apply FSL(Flora Software License)
authorKim Kibum <kb0929.kim@samsung.com>
Fri, 8 Jun 2012 05:54:07 +0000 (14:54 +0900)
committerKim Kibum <kb0929.kim@samsung.com>
Fri, 8 Jun 2012 05:54:07 +0000 (14:54 +0900)
177 files changed:
CMakeLists.txt [new file with mode: 0755]
LICENSE [new file with mode: 0755]
NOTICE [new file with mode: 0755]
common/CMakeLists.txt [new file with mode: 0755]
common/data/edc_image/00_button_03_dim.png [new file with mode: 0755]
common/data/edc_image/00_button_03_focus.png [new file with mode: 0755]
common/data/edc_image/00_button_03_normal.png [new file with mode: 0755]
common/data/edc_image/00_button_03_press.png [new file with mode: 0755]
common/data/edc_image/00_list_bar_group_middle_focus.png [new file with mode: 0755]
common/data/edc_image/00_list_bar_press_1x80.png [new file with mode: 0755]
common/data/edc_image/00_list_photo_default.png [new file with mode: 0755]
common/data/edc_image/00_sweep_list_bg.png [new file with mode: 0755]
common/data/edc_image/07_message_add files_bg.PNG [new file with mode: 0755]
common/data/edc_image/07_message_bubble_readmessage.png [new file with mode: 0755]
common/data/edc_image/07_message_bubble_reponsible_message.png [new file with mode: 0755]
common/data/edc_image/07_message_bubble_sentmessage.png [new file with mode: 0755]
common/data/edc_image/07_message_list_badge_01.png [new file with mode: 0755]
common/data/edc_image/07_message_list_bg.PNG [new file with mode: 0755]
common/data/edc_image/07_message_sweep_list_bg.png [new file with mode: 0755]
common/data/edc_image/27_textinput_predictive_btn_arrow_down.png [new file with mode: 0755]
common/data/edc_image/27_textinput_predictive_btn_arrow_up.png [new file with mode: 0755]
common/data/edc_image/M01_btn_Unread_message.png [new file with mode: 0755]
common/data/edc_image/M01_btn_Unread_message_HD.png [new file with mode: 0755]
common/data/edc_image/M01_btn_Unread_message_white_theme.png [new file with mode: 0755]
common/data/edc_image/M01_search_input_field_bg.png [new file with mode: 0755]
common/data/edc_image/Seven_IM_input_field_01.png [new file with mode: 0755]
common/data/edc_image/Seven_IM_input_field_02.png [new file with mode: 0755]
common/data/edc_image/black/07_message_add files_bg.PNG [new file with mode: 0755]
common/data/edc_image/black/M01_search_input_field_bg.png [new file with mode: 0755]
common/data/edc_image/white/07_message_add files_bg.PNG [new file with mode: 0755]
common/data/edc_image/white/M01_icon_minus.png [new file with mode: 0755]
common/data/edc_image/white/M01_search_input_field_bg.png [new file with mode: 0755]
common/data/image/00_list_photo_default.png [new file with mode: 0755]
common/data/image/01_dialog_field_bg.png [new file with mode: 0755]
common/data/image/01_dialog_field_bg_dim.png [new file with mode: 0755]
common/data/image/01_dialogue_field_bg_press.png [new file with mode: 0755]
common/data/image/01_header_icon_cancel.png [new file with mode: 0755]
common/data/image/01_header_icon_done.png [new file with mode: 0755]
common/data/image/01_navi_icon_delete.png [new file with mode: 0755]
common/data/image/07_message_sim.png [new file with mode: 0755]
common/data/image/07_message_title_button.png [new file with mode: 0755]
common/data/image/17_default_image.png [new file with mode: 0755]
common/data/image/60_myfiles_file_etc.png [new file with mode: 0755]
common/data/image/M01_btn_Unread_message.png [new file with mode: 0755]
common/data/image/M01_btn_Unread_message_HD.png [new file with mode: 0755]
common/data/image/M01_btn_Unread_message_press.png [new file with mode: 0755]
common/data/image/M01_btn_Unread_message_press_HD.png [new file with mode: 0755]
common/data/image/M01_icon_OTA.png [new file with mode: 0755]
common/data/image/M01_icon_OTA_HD.png [new file with mode: 0755]
common/data/image/M01_icon_OTA_press.png [new file with mode: 0755]
common/data/image/M01_icon_OTA_press_HD.png [new file with mode: 0755]
common/data/image/M01_icon_Push.png [new file with mode: 0755]
common/data/image/M01_icon_Push_HD.png [new file with mode: 0755]
common/data/image/M01_icon_Push_press.png [new file with mode: 0755]
common/data/image/M01_icon_Push_press_HD.png [new file with mode: 0755]
common/data/image/M01_icon_broadcasting.png [new file with mode: 0755]
common/data/image/M01_icon_broadcasting_HD.png [new file with mode: 0755]
common/data/image/M01_icon_broadcasting_press.png [new file with mode: 0755]
common/data/image/M01_icon_broadcasting_press_HD.png [new file with mode: 0755]
common/data/image/M01_icon_minus.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_call.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_compose.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_create.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_delete.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_edit.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_forward.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_info.png [new file with mode: 0755]
common/data/image/controlbar/01_controlbar_icon_move.png [new file with mode: 0755]
common/data/image/controlbar/01_controllbar_icon_add_to_contact.png [new file with mode: 0755]
common/data/image/controlbar/01_controllbar_icon_close.png [new file with mode: 0755]
common/data/image/indicator_live panel_handle.png [new file with mode: 0755]
common/data/image/org.tizen.message.cb.png [new file with mode: 0755]
common/data/image/org.tizen.message.noti.png [new file with mode: 0755]
common/data/image/org.tizen.message.png [new file with mode: 0755]
common/data/image/org.tizen.message.voice.png [new file with mode: 0755]
common/data/image/white/M01_icon_minus.png [new file with mode: 0755]
common/msg-ui-bundle.h [new file with mode: 0755]
common/msg-ui-common-utility.c [new file with mode: 0755]
common/msg-ui-common-utility.h [new file with mode: 0755]
common/msg-ui-util.h [new file with mode: 0755]
composer/CMakeLists.txt [new file with mode: 0755]
composer/data/composer_edc/composer_main.edc [new file with mode: 0755]
composer/data/composer_edc/msg-ui-composer-body.edc [new file with mode: 0755]
composer/data/composer_edc/msg-ui-composer-bubble.edc [new file with mode: 0755]
composer/data/composer_edc/msg-ui-composer-custom.edc [new file with mode: 0755]
composer/data/composer_edc/msg-ui-composer-data.edc [new file with mode: 0755]
composer/data/composer_edc/msg-ui-composer-main.edc [new file with mode: 0755]
composer/data/composer_edc/msg-ui-composer-recipient.edc [new file with mode: 0755]
composer/data/composer_edc/white_theme_composer.edc [new file with mode: 0755]
composer/include/msg-ui-composer-body-callback.h [new file with mode: 0755]
composer/include/msg-ui-composer-body-page.h [new file with mode: 0755]
composer/include/msg-ui-composer-body.h [new file with mode: 0755]
composer/include/msg-ui-composer-bubble.h [new file with mode: 0755]
composer/include/msg-ui-composer-common.h [new file with mode: 0755]
composer/include/msg-ui-composer-core.h [new file with mode: 0755]
composer/include/msg-ui-composer-data.h [new file with mode: 0755]
composer/include/msg-ui-composer-external.h [new file with mode: 0755]
composer/include/msg-ui-composer-main.h [new file with mode: 0755]
composer/include/msg-ui-composer-message-data.h [new file with mode: 0755]
composer/include/msg-ui-composer-message.h [new file with mode: 0755]
composer/include/msg-ui-composer-popup.h [new file with mode: 0755]
composer/include/msg-ui-composer-predictsearch.h [new file with mode: 0755]
composer/include/msg-ui-composer-recipient-callback.h [new file with mode: 0755]
composer/include/msg-ui-composer-recipient.h [new file with mode: 0755]
composer/include/msg-ui-composer-res.h [new file with mode: 0755]
composer/include/msg-ui-composer-string.h [new file with mode: 0755]
composer/src/bubble/msg-ui-composer-bubble-callback.c [new file with mode: 0755]
composer/src/bubble/msg-ui-composer-bubble-list.c [new file with mode: 0755]
composer/src/bubble/msg-ui-composer-bubble-main.c [new file with mode: 0755]
composer/src/bubble/msg-ui-composer-bubble-util.c [new file with mode: 0755]
composer/src/core/msg-ui-composer-core.c [new file with mode: 0755]
composer/src/external/msg-ui-composer-external.c [new file with mode: 0755]
composer/src/gadget/msg-ui-composer-gadget.c [new file with mode: 0755]
composer/src/message/msg-ui-composer-message.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-body-callback.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-body-page.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-body.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-common.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-main.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-popup.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-predictsearch.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-recipient-callback.c [new file with mode: 0755]
composer/src/ui-composer/msg-ui-composer-recipient.c [new file with mode: 0755]
composer/src/util/msg-ui-composer-util.c [new file with mode: 0755]
composer/src/util/msg-ui-composer-util.h [new file with mode: 0755]
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0755]
debian/control [new file with mode: 0755]
debian/dirs [new file with mode: 0755]
debian/docs [new file with mode: 0755]
debian/org.tizen.message.install.in [new file with mode: 0755]
debian/org.tizen.message.postinst.in [new file with mode: 0755]
debian/rules [new file with mode: 0755]
dialog/CMakeLists.txt [new file with mode: 0755]
dialog/message-dialog.c [new file with mode: 0755]
dialog/message-dialog.h [new file with mode: 0755]
main/CMakeLists.txt [new file with mode: 0755]
main/message.c [new file with mode: 0755]
main/message.h [new file with mode: 0755]
main/org.tizen.message.desktop.in [new file with mode: 0755]
main/po/CMakeLists.txt [new file with mode: 0755]
main/po/de_DE.po [new file with mode: 0755]
main/po/el_GR.po [new file with mode: 0755]
main/po/en.po [new file with mode: 0755]
main/po/es_ES.po [new file with mode: 0755]
main/po/fr_FR.po [new file with mode: 0755]
main/po/it_IT.po [new file with mode: 0755]
main/po/ja_JP.po [new file with mode: 0755]
main/po/ko_KR.po [new file with mode: 0755]
main/po/nl_NL.po [new file with mode: 0755]
main/po/pt_PT.po [new file with mode: 0755]
main/po/ru_RU.po [new file with mode: 0755]
main/po/tr_TR.po [new file with mode: 0755]
main/po/zh_CN.po [new file with mode: 0755]
main/po/zh_HK.po [new file with mode: 0755]
main/po/zh_TW.po [new file with mode: 0755]
packaging/org.tizen.message.spec [new file with mode: 0755]
setting/CMakeLists.txt [new file with mode: 0755]
setting/include/msg-ui-setting-callback.h [new file with mode: 0755]
setting/include/msg-ui-setting-common-util.h [new file with mode: 0755]
setting/include/msg-ui-setting-gadget.h [new file with mode: 0755]
setting/include/msg-ui-setting-main.h [new file with mode: 0755]
setting/include/msg-ui-setting-msg-service-wrapper.h [new file with mode: 0755]
setting/include/msg-ui-setting-text-message.h [new file with mode: 0755]
setting/include/msg-ui-setting-types.h [new file with mode: 0755]
setting/src/main/msg-ui-setting-callback.c [new file with mode: 0755]
setting/src/main/msg-ui-setting-common-util.c [new file with mode: 0755]
setting/src/main/msg-ui-setting-gadget.c [new file with mode: 0755]
setting/src/main/msg-ui-setting-main.c [new file with mode: 0755]
setting/src/main/msg-ui-setting-msg-service-wrapper.c [new file with mode: 0755]
setting/src/text/msg-ui-setting-text-message.c [new file with mode: 0755]
thread/include/msg-ui-thread-main.h [new file with mode: 0755]
thread/src/msg-ui-thread-callback.c [new file with mode: 0755]
thread/src/msg-ui-thread-list.c [new file with mode: 0755]
thread/src/msg-ui-thread-main.c [new file with mode: 0755]
thread/src/msg-ui-thread-util.c [new file with mode: 0755]
thread/theme/thread_genlist.edc [new file with mode: 0755]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..4d8f0a3
--- /dev/null
@@ -0,0 +1,37 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+SET(PKGNAME "org.tizen.message")
+SET(CMAKE_SOURCE_COMMON_DIR "${CMAKE_SOURCE_DIR}/common")
+SET(CMAKE_SOURCE_MAIN_DIR "${CMAKE_SOURCE_DIR}/main")
+SET(CMAKE_SOURCE_THREAD_DIR "${CMAKE_SOURCE_DIR}/thread")
+SET(CMAKE_SOURCE_BUBBLE_DIR "${CMAKE_SOURCE_DIR}/bubble")
+SET(CMAKE_SOURCE_COMPOSER_DIR "${CMAKE_SOURCE_DIR}/composer")
+SET(CMAKE_SOURCE_SETTING_DIR "${CMAKE_SOURCE_DIR}/setting")
+SET(CMAKE_SOURCE_DIALOG_DIR "${CMAKE_SOURCE_DIR}/dialog")
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "${PREFIX}/data")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(ICONDIR "${RESDIR}/icons/default/small")
+SET(IMGDIR "${RESDIR}/images")
+SET(EDJDIR "${RESDIR}/edje")
+SET(UGDIR "/opt/ug/lib")
+SET(LIBDIR "${PREFIX}/lib")
+
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"")
+ADD_DEFINITIONS("-DIMGDIR=\"${IMGDIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+
+SET(CMAKE_LDFLAGS "-Wl,-zdefs" )
+
+#Add your submodule directory name
+ADD_SUBDIRECTORY(common)
+ADD_SUBDIRECTORY(main)
+ADD_SUBDIRECTORY(composer)
+ADD_SUBDIRECTORY(setting)
+ADD_SUBDIRECTORY(dialog)
diff --git a/LICENSE b/LICENSE
new file mode 100755 (executable)
index 0000000..7ccb5b5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+http://www.tizenopensource.org/license
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies with the standards set forth in the Compatibility Definition Document and passes the Compatibility Test Suite as defined from time to time by the Tizen Technical Steering Group and certified by the Tizen Association or its designated agent.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work solely as incorporated into a Tizen Certified Platform, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work solely as incorporated into a Tizen Certified Platform to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof pursuant to the copyright license above, in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+  2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+  3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+  4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.tizenopensource.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.
diff --git a/NOTICE b/NOTICE
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..3529d93
--- /dev/null
@@ -0,0 +1,49 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(msg-common C)
+
+SET(VERSION 0.1.0)
+#################################
+#      Message Common          #
+#################################
+
+SET(COMMON_SRCS
+       ./msg-ui-common-utility.c
+)
+
+INCLUDE_DIRECTORIES(
+       ${CMAKE_SOURCE_COMMON_DIR}
+)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       appcore-common appcore-efl appsvc
+       bundle
+       capi-appfw-application contacts-service
+       dlog devman_haptic
+       elementary ecore ecore-x ecore-input ecore-imf ecore-file eina
+       glib-2.0
+       heynoti
+       icu-i18n
+       msg-service
+       ui-gadget
+       utilX
+       vconf
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+
+ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"")
+ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"")
+ADD_DEFINITIONS("-DTARGET")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${COMMON_SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION} )
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${CMAKE_LDFLAGS})
+
+# Install so files.
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})
diff --git a/common/data/edc_image/00_button_03_dim.png b/common/data/edc_image/00_button_03_dim.png
new file mode 100755 (executable)
index 0000000..118cbb9
Binary files /dev/null and b/common/data/edc_image/00_button_03_dim.png differ
diff --git a/common/data/edc_image/00_button_03_focus.png b/common/data/edc_image/00_button_03_focus.png
new file mode 100755 (executable)
index 0000000..e0f8ebf
Binary files /dev/null and b/common/data/edc_image/00_button_03_focus.png differ
diff --git a/common/data/edc_image/00_button_03_normal.png b/common/data/edc_image/00_button_03_normal.png
new file mode 100755 (executable)
index 0000000..118cbb9
Binary files /dev/null and b/common/data/edc_image/00_button_03_normal.png differ
diff --git a/common/data/edc_image/00_button_03_press.png b/common/data/edc_image/00_button_03_press.png
new file mode 100755 (executable)
index 0000000..2f0dbc3
Binary files /dev/null and b/common/data/edc_image/00_button_03_press.png differ
diff --git a/common/data/edc_image/00_list_bar_group_middle_focus.png b/common/data/edc_image/00_list_bar_group_middle_focus.png
new file mode 100755 (executable)
index 0000000..96374f5
Binary files /dev/null and b/common/data/edc_image/00_list_bar_group_middle_focus.png differ
diff --git a/common/data/edc_image/00_list_bar_press_1x80.png b/common/data/edc_image/00_list_bar_press_1x80.png
new file mode 100755 (executable)
index 0000000..0e0becb
Binary files /dev/null and b/common/data/edc_image/00_list_bar_press_1x80.png differ
diff --git a/common/data/edc_image/00_list_photo_default.png b/common/data/edc_image/00_list_photo_default.png
new file mode 100755 (executable)
index 0000000..2d15281
Binary files /dev/null and b/common/data/edc_image/00_list_photo_default.png differ
diff --git a/common/data/edc_image/00_sweep_list_bg.png b/common/data/edc_image/00_sweep_list_bg.png
new file mode 100755 (executable)
index 0000000..b08f111
Binary files /dev/null and b/common/data/edc_image/00_sweep_list_bg.png differ
diff --git a/common/data/edc_image/07_message_add files_bg.PNG b/common/data/edc_image/07_message_add files_bg.PNG
new file mode 100755 (executable)
index 0000000..074b806
Binary files /dev/null and b/common/data/edc_image/07_message_add files_bg.PNG differ
diff --git a/common/data/edc_image/07_message_bubble_readmessage.png b/common/data/edc_image/07_message_bubble_readmessage.png
new file mode 100755 (executable)
index 0000000..5b57efe
Binary files /dev/null and b/common/data/edc_image/07_message_bubble_readmessage.png differ
diff --git a/common/data/edc_image/07_message_bubble_reponsible_message.png b/common/data/edc_image/07_message_bubble_reponsible_message.png
new file mode 100755 (executable)
index 0000000..1e0f324
Binary files /dev/null and b/common/data/edc_image/07_message_bubble_reponsible_message.png differ
diff --git a/common/data/edc_image/07_message_bubble_sentmessage.png b/common/data/edc_image/07_message_bubble_sentmessage.png
new file mode 100755 (executable)
index 0000000..7ae30ba
Binary files /dev/null and b/common/data/edc_image/07_message_bubble_sentmessage.png differ
diff --git a/common/data/edc_image/07_message_list_badge_01.png b/common/data/edc_image/07_message_list_badge_01.png
new file mode 100755 (executable)
index 0000000..d1acc0d
Binary files /dev/null and b/common/data/edc_image/07_message_list_badge_01.png differ
diff --git a/common/data/edc_image/07_message_list_bg.PNG b/common/data/edc_image/07_message_list_bg.PNG
new file mode 100755 (executable)
index 0000000..2ba50b9
Binary files /dev/null and b/common/data/edc_image/07_message_list_bg.PNG differ
diff --git a/common/data/edc_image/07_message_sweep_list_bg.png b/common/data/edc_image/07_message_sweep_list_bg.png
new file mode 100755 (executable)
index 0000000..d32d1e3
Binary files /dev/null and b/common/data/edc_image/07_message_sweep_list_bg.png differ
diff --git a/common/data/edc_image/27_textinput_predictive_btn_arrow_down.png b/common/data/edc_image/27_textinput_predictive_btn_arrow_down.png
new file mode 100755 (executable)
index 0000000..41932ca
Binary files /dev/null and b/common/data/edc_image/27_textinput_predictive_btn_arrow_down.png differ
diff --git a/common/data/edc_image/27_textinput_predictive_btn_arrow_up.png b/common/data/edc_image/27_textinput_predictive_btn_arrow_up.png
new file mode 100755 (executable)
index 0000000..2fdda91
Binary files /dev/null and b/common/data/edc_image/27_textinput_predictive_btn_arrow_up.png differ
diff --git a/common/data/edc_image/M01_btn_Unread_message.png b/common/data/edc_image/M01_btn_Unread_message.png
new file mode 100755 (executable)
index 0000000..68772aa
Binary files /dev/null and b/common/data/edc_image/M01_btn_Unread_message.png differ
diff --git a/common/data/edc_image/M01_btn_Unread_message_HD.png b/common/data/edc_image/M01_btn_Unread_message_HD.png
new file mode 100755 (executable)
index 0000000..55004f5
Binary files /dev/null and b/common/data/edc_image/M01_btn_Unread_message_HD.png differ
diff --git a/common/data/edc_image/M01_btn_Unread_message_white_theme.png b/common/data/edc_image/M01_btn_Unread_message_white_theme.png
new file mode 100755 (executable)
index 0000000..68772aa
Binary files /dev/null and b/common/data/edc_image/M01_btn_Unread_message_white_theme.png differ
diff --git a/common/data/edc_image/M01_search_input_field_bg.png b/common/data/edc_image/M01_search_input_field_bg.png
new file mode 100755 (executable)
index 0000000..038da87
Binary files /dev/null and b/common/data/edc_image/M01_search_input_field_bg.png differ
diff --git a/common/data/edc_image/Seven_IM_input_field_01.png b/common/data/edc_image/Seven_IM_input_field_01.png
new file mode 100755 (executable)
index 0000000..6125f7e
Binary files /dev/null and b/common/data/edc_image/Seven_IM_input_field_01.png differ
diff --git a/common/data/edc_image/Seven_IM_input_field_02.png b/common/data/edc_image/Seven_IM_input_field_02.png
new file mode 100755 (executable)
index 0000000..fed0b36
Binary files /dev/null and b/common/data/edc_image/Seven_IM_input_field_02.png differ
diff --git a/common/data/edc_image/black/07_message_add files_bg.PNG b/common/data/edc_image/black/07_message_add files_bg.PNG
new file mode 100755 (executable)
index 0000000..074b806
Binary files /dev/null and b/common/data/edc_image/black/07_message_add files_bg.PNG differ
diff --git a/common/data/edc_image/black/M01_search_input_field_bg.png b/common/data/edc_image/black/M01_search_input_field_bg.png
new file mode 100755 (executable)
index 0000000..038da87
Binary files /dev/null and b/common/data/edc_image/black/M01_search_input_field_bg.png differ
diff --git a/common/data/edc_image/white/07_message_add files_bg.PNG b/common/data/edc_image/white/07_message_add files_bg.PNG
new file mode 100755 (executable)
index 0000000..074b806
Binary files /dev/null and b/common/data/edc_image/white/07_message_add files_bg.PNG differ
diff --git a/common/data/edc_image/white/M01_icon_minus.png b/common/data/edc_image/white/M01_icon_minus.png
new file mode 100755 (executable)
index 0000000..1943f8d
Binary files /dev/null and b/common/data/edc_image/white/M01_icon_minus.png differ
diff --git a/common/data/edc_image/white/M01_search_input_field_bg.png b/common/data/edc_image/white/M01_search_input_field_bg.png
new file mode 100755 (executable)
index 0000000..f5aaa5e
Binary files /dev/null and b/common/data/edc_image/white/M01_search_input_field_bg.png differ
diff --git a/common/data/image/00_list_photo_default.png b/common/data/image/00_list_photo_default.png
new file mode 100755 (executable)
index 0000000..2d15281
Binary files /dev/null and b/common/data/image/00_list_photo_default.png differ
diff --git a/common/data/image/01_dialog_field_bg.png b/common/data/image/01_dialog_field_bg.png
new file mode 100755 (executable)
index 0000000..67d3908
Binary files /dev/null and b/common/data/image/01_dialog_field_bg.png differ
diff --git a/common/data/image/01_dialog_field_bg_dim.png b/common/data/image/01_dialog_field_bg_dim.png
new file mode 100755 (executable)
index 0000000..25c4acf
Binary files /dev/null and b/common/data/image/01_dialog_field_bg_dim.png differ
diff --git a/common/data/image/01_dialogue_field_bg_press.png b/common/data/image/01_dialogue_field_bg_press.png
new file mode 100755 (executable)
index 0000000..8686f16
Binary files /dev/null and b/common/data/image/01_dialogue_field_bg_press.png differ
diff --git a/common/data/image/01_header_icon_cancel.png b/common/data/image/01_header_icon_cancel.png
new file mode 100755 (executable)
index 0000000..4fb54c3
Binary files /dev/null and b/common/data/image/01_header_icon_cancel.png differ
diff --git a/common/data/image/01_header_icon_done.png b/common/data/image/01_header_icon_done.png
new file mode 100755 (executable)
index 0000000..d771640
Binary files /dev/null and b/common/data/image/01_header_icon_done.png differ
diff --git a/common/data/image/01_navi_icon_delete.png b/common/data/image/01_navi_icon_delete.png
new file mode 100755 (executable)
index 0000000..4f0f16e
Binary files /dev/null and b/common/data/image/01_navi_icon_delete.png differ
diff --git a/common/data/image/07_message_sim.png b/common/data/image/07_message_sim.png
new file mode 100755 (executable)
index 0000000..84aff16
Binary files /dev/null and b/common/data/image/07_message_sim.png differ
diff --git a/common/data/image/07_message_title_button.png b/common/data/image/07_message_title_button.png
new file mode 100755 (executable)
index 0000000..3c6909b
Binary files /dev/null and b/common/data/image/07_message_title_button.png differ
diff --git a/common/data/image/17_default_image.png b/common/data/image/17_default_image.png
new file mode 100755 (executable)
index 0000000..780985e
Binary files /dev/null and b/common/data/image/17_default_image.png differ
diff --git a/common/data/image/60_myfiles_file_etc.png b/common/data/image/60_myfiles_file_etc.png
new file mode 100755 (executable)
index 0000000..26748d8
Binary files /dev/null and b/common/data/image/60_myfiles_file_etc.png differ
diff --git a/common/data/image/M01_btn_Unread_message.png b/common/data/image/M01_btn_Unread_message.png
new file mode 100755 (executable)
index 0000000..55004f5
Binary files /dev/null and b/common/data/image/M01_btn_Unread_message.png differ
diff --git a/common/data/image/M01_btn_Unread_message_HD.png b/common/data/image/M01_btn_Unread_message_HD.png
new file mode 100755 (executable)
index 0000000..55004f5
Binary files /dev/null and b/common/data/image/M01_btn_Unread_message_HD.png differ
diff --git a/common/data/image/M01_btn_Unread_message_press.png b/common/data/image/M01_btn_Unread_message_press.png
new file mode 100755 (executable)
index 0000000..55004f5
Binary files /dev/null and b/common/data/image/M01_btn_Unread_message_press.png differ
diff --git a/common/data/image/M01_btn_Unread_message_press_HD.png b/common/data/image/M01_btn_Unread_message_press_HD.png
new file mode 100755 (executable)
index 0000000..55004f5
Binary files /dev/null and b/common/data/image/M01_btn_Unread_message_press_HD.png differ
diff --git a/common/data/image/M01_icon_OTA.png b/common/data/image/M01_icon_OTA.png
new file mode 100755 (executable)
index 0000000..6143020
Binary files /dev/null and b/common/data/image/M01_icon_OTA.png differ
diff --git a/common/data/image/M01_icon_OTA_HD.png b/common/data/image/M01_icon_OTA_HD.png
new file mode 100755 (executable)
index 0000000..ffeb5d3
Binary files /dev/null and b/common/data/image/M01_icon_OTA_HD.png differ
diff --git a/common/data/image/M01_icon_OTA_press.png b/common/data/image/M01_icon_OTA_press.png
new file mode 100755 (executable)
index 0000000..7dcdb30
Binary files /dev/null and b/common/data/image/M01_icon_OTA_press.png differ
diff --git a/common/data/image/M01_icon_OTA_press_HD.png b/common/data/image/M01_icon_OTA_press_HD.png
new file mode 100755 (executable)
index 0000000..ffeb5d3
Binary files /dev/null and b/common/data/image/M01_icon_OTA_press_HD.png differ
diff --git a/common/data/image/M01_icon_Push.png b/common/data/image/M01_icon_Push.png
new file mode 100755 (executable)
index 0000000..f130891
Binary files /dev/null and b/common/data/image/M01_icon_Push.png differ
diff --git a/common/data/image/M01_icon_Push_HD.png b/common/data/image/M01_icon_Push_HD.png
new file mode 100755 (executable)
index 0000000..b6be564
Binary files /dev/null and b/common/data/image/M01_icon_Push_HD.png differ
diff --git a/common/data/image/M01_icon_Push_press.png b/common/data/image/M01_icon_Push_press.png
new file mode 100755 (executable)
index 0000000..c229030
Binary files /dev/null and b/common/data/image/M01_icon_Push_press.png differ
diff --git a/common/data/image/M01_icon_Push_press_HD.png b/common/data/image/M01_icon_Push_press_HD.png
new file mode 100755 (executable)
index 0000000..b6be564
Binary files /dev/null and b/common/data/image/M01_icon_Push_press_HD.png differ
diff --git a/common/data/image/M01_icon_broadcasting.png b/common/data/image/M01_icon_broadcasting.png
new file mode 100755 (executable)
index 0000000..5ffd70a
Binary files /dev/null and b/common/data/image/M01_icon_broadcasting.png differ
diff --git a/common/data/image/M01_icon_broadcasting_HD.png b/common/data/image/M01_icon_broadcasting_HD.png
new file mode 100755 (executable)
index 0000000..bd4d650
Binary files /dev/null and b/common/data/image/M01_icon_broadcasting_HD.png differ
diff --git a/common/data/image/M01_icon_broadcasting_press.png b/common/data/image/M01_icon_broadcasting_press.png
new file mode 100755 (executable)
index 0000000..038cd2a
Binary files /dev/null and b/common/data/image/M01_icon_broadcasting_press.png differ
diff --git a/common/data/image/M01_icon_broadcasting_press_HD.png b/common/data/image/M01_icon_broadcasting_press_HD.png
new file mode 100755 (executable)
index 0000000..bd4d650
Binary files /dev/null and b/common/data/image/M01_icon_broadcasting_press_HD.png differ
diff --git a/common/data/image/M01_icon_minus.png b/common/data/image/M01_icon_minus.png
new file mode 100755 (executable)
index 0000000..bddc2cf
Binary files /dev/null and b/common/data/image/M01_icon_minus.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_call.png b/common/data/image/controlbar/01_controlbar_icon_call.png
new file mode 100755 (executable)
index 0000000..b8b7806
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_call.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_compose.png b/common/data/image/controlbar/01_controlbar_icon_compose.png
new file mode 100755 (executable)
index 0000000..20b71f7
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_compose.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_create.png b/common/data/image/controlbar/01_controlbar_icon_create.png
new file mode 100755 (executable)
index 0000000..0dc1144
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_create.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_delete.png b/common/data/image/controlbar/01_controlbar_icon_delete.png
new file mode 100755 (executable)
index 0000000..faaa0d3
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_delete.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_edit.png b/common/data/image/controlbar/01_controlbar_icon_edit.png
new file mode 100755 (executable)
index 0000000..4ddc598
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_edit.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_forward.png b/common/data/image/controlbar/01_controlbar_icon_forward.png
new file mode 100755 (executable)
index 0000000..a1fca43
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_forward.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_info.png b/common/data/image/controlbar/01_controlbar_icon_info.png
new file mode 100755 (executable)
index 0000000..12a5b06
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_info.png differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_move.png b/common/data/image/controlbar/01_controlbar_icon_move.png
new file mode 100755 (executable)
index 0000000..fdc8c8a
Binary files /dev/null and b/common/data/image/controlbar/01_controlbar_icon_move.png differ
diff --git a/common/data/image/controlbar/01_controllbar_icon_add_to_contact.png b/common/data/image/controlbar/01_controllbar_icon_add_to_contact.png
new file mode 100755 (executable)
index 0000000..65d47e4
Binary files /dev/null and b/common/data/image/controlbar/01_controllbar_icon_add_to_contact.png differ
diff --git a/common/data/image/controlbar/01_controllbar_icon_close.png b/common/data/image/controlbar/01_controllbar_icon_close.png
new file mode 100755 (executable)
index 0000000..91b04e5
Binary files /dev/null and b/common/data/image/controlbar/01_controllbar_icon_close.png differ
diff --git a/common/data/image/indicator_live panel_handle.png b/common/data/image/indicator_live panel_handle.png
new file mode 100755 (executable)
index 0000000..2c05453
Binary files /dev/null and b/common/data/image/indicator_live panel_handle.png differ
diff --git a/common/data/image/org.tizen.message.cb.png b/common/data/image/org.tizen.message.cb.png
new file mode 100755 (executable)
index 0000000..e7bfab5
Binary files /dev/null and b/common/data/image/org.tizen.message.cb.png differ
diff --git a/common/data/image/org.tizen.message.noti.png b/common/data/image/org.tizen.message.noti.png
new file mode 100755 (executable)
index 0000000..e7bfab5
Binary files /dev/null and b/common/data/image/org.tizen.message.noti.png differ
diff --git a/common/data/image/org.tizen.message.png b/common/data/image/org.tizen.message.png
new file mode 100755 (executable)
index 0000000..e7bfab5
Binary files /dev/null and b/common/data/image/org.tizen.message.png differ
diff --git a/common/data/image/org.tizen.message.voice.png b/common/data/image/org.tizen.message.voice.png
new file mode 100755 (executable)
index 0000000..e7bfab5
Binary files /dev/null and b/common/data/image/org.tizen.message.voice.png differ
diff --git a/common/data/image/white/M01_icon_minus.png b/common/data/image/white/M01_icon_minus.png
new file mode 100755 (executable)
index 0000000..1943f8d
Binary files /dev/null and b/common/data/image/white/M01_icon_minus.png differ
diff --git a/common/msg-ui-bundle.h b/common/msg-ui-bundle.h
new file mode 100755 (executable)
index 0000000..2ac8b7c
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_BUNDLE_H__
+#define __MSG_BUNDLE_H__
+
+
+ /* Bundle key name */
+#define MSG_BUNDLE_KEY_TYPE                            "type"
+#define MSG_BUNDLE_KEY_RUN_TYPE                        "RUN_TYPE"              /* type for email */
+#define MSG_BUNDLE_KEY_LAUNCH_TYPE             "launch-type"   /* type for call */
+
+#define MSG_BUNDLE_KEY_MSG_ID                  "msgId"
+#define MSG_BUNDLE_KEY_THREAD_ID               "threadId"
+#define MSG_BUNDLE_KEY_THREAD_NAME             "threadName"
+#define MSG_BUNDLE_KEY_THREAD_ADDRESS  "threadAddr"
+#define MSG_BUNDLE_KEY_CONTACT_ID              "contactId"
+
+#define MSG_BUNDLE_KEY_COMPOSER                        "composer"
+#define MSG_BUNDLE_KEY_TO                              "TO"
+#define MSG_BUNDLE_KEY_CC                              "CC"
+#define MSG_BUNDLE_KEY_BCC                             "BCC"
+
+#define MSG_BUNDLE_KEY_BODY                    "BODY"
+#define MSG_BUNDLE_KEY_FORWARD                 "FORWARD"
+#define MSG_BUNDLE_KEY_RECIPIENT               "recipient"
+#define MSG_BUNDLE_KEY_NUMBER_INDEX            "number/index"
+#define MSG_BUNDLE_KEY_INDEX           "index"
+#define MSG_BUNDLE_KEY_COMPOSER_RESPONSE       "composer_resp"
+
+#define MSG_BUNDLE_KEY_REQUEST_TYPE            "request_type"
+#define MSG_BUNDLE_KEY_FILE_TYPE               "file_type"
+#define MSG_BUNDLE_KEY_SELECT_TYPE             "select_type"
+#define MSG_BUNDLE_KEY_PREVIEW_DATA            "preview_data"
+
+#define MSG_BUNDLE_KEY_GET_SEL_LIST            "get_select_list"
+#define MSG_BUNDLE_KEY_NAMECARD_INDEX          "id"
+#define MSG_BUNDLE_KEY_COUNT           "count"
+#define MSG_BUNDLE_KEY_IMAGE           "image"
+#define MSG_BUNDLE_KEY_TEXT            "text"
+#define MSG_BUNDLE_KEY_PATH            "path"
+#define MSG_BUNDLE_KEY_MM_PATH         "PATH"
+
+#define MSG_BUNDLE_KEY_CALLER          "CALLER"
+#define MSG_BUNDLE_KEY_RESOLUTION      "RESOLUTION"
+#define MSG_BUNDLE_KEY_LIMIT           "LIMIT"
+#define MSG_BUNDLE_KEY_SIZE            "SIZE"
+#define MSG_BUNDLE_KEY_QUALITY         "QUALITY"
+
+#define MSG_BUNDLE_KEY_LAUNCH_APPLICATION      "launching_application"
+#define MSG_BUNDLE_KEY_VIEWER_MESSAGE  "msg_viewer_message"
+
+#define MSG_BUNDLE_KEY_RESULT                  "result"
+#define MSG_BUNDLE_KEY_MODE                            "mode"
+#define MSG_BUNDLE_KEY_DESTROY                 "destroy"
+#define MSG_BUNDLE_KEY_NUMBER                  "number"
+#define MSG_BUNDLE_KEY_MAX                             "max"
+#define MSG_BUNDLE_KEY_PWD_RESULT              "Result"
+#define MSG_BUNDLE_KEY_FROM                            "from"
+#define MSG_BUNDLE_KEY_LAYOUT                  "layout"
+
+#define MSG_BUNDLE_KEY_VCALL_TYPE              "KEY_CALL_TYPE"
+#define MSG_BUNDLE_KEY_VCALL_HANDLE            "KEY_CALL_HANDLE"
+#define MSG_BUNDLE_KEY_VCALL_PARTY_NUM "KEY_CALLING_PARTY_NUMBER"
+#define MSG_BUNDLE_KEY_VCALL_CLI_CAUSE "KEY_CLI_CAUSE"
+#define MSG_BUNDLE_KEY_VCALL_FORWARDED "KEY_FORWARDED"
+
+/* Bundle value name */
+#define MSG_BUNDLE_VALUE_COMPOSE               "compose"
+#define MSG_BUNDLE_VALUE_SMS_URI               "sms"
+#define MSG_BUNDLE_VALUE_MMSTO_URI             "mmsto"
+#define MSG_BUNDLE_VALUE_NEW_MSG               "new_msg"
+#define MSG_BUNDLE_VALUE_MSG_ID                        "msg_id"
+#define MSG_BUNDLE_VALUE_CREATE_MSG            "create_msg"
+#define MSG_BUNDLE_VALUE_INTERNAL              "internal"
+
+#define MSG_BUNDLE_VALUE_IMAGE                 "IMAGE"
+#define MSG_BUNDLE_VALUE_VIDEO                 "VIDEO"
+#define MSG_BUNDLE_VALUE_SOUND                 "SOUND"
+#define MSG_BUNDLE_VALUE_ALL                   "ALL"
+#define MSG_BUNDLE_VALUE_GALLERY_ALL   "all"
+#define MSG_BUNDLE_VALUE_MULTI_FILE            "MULTI_FILE"
+#define MSG_BUNDLE_VALUE_OTHERS                "OTHERS"
+#define MSG_BUNDLE_VALUE_FILE                  "file"
+#define MSG_BUNDLE_VALUE_SELECT_MULTIPLE       "select-multiple"
+
+#define MSG_BUNDLE_VALUE_GET                   "get"
+
+#define MSG_BUNDLE_VALUE_NORMAL                        "normal"
+#define MSG_BUNDLE_VALUE_EDIT                  "edit"
+#define MSG_BUNDLE_VALUE_SEARCH_MODE                   "search_mode"
+#define MSG_BUNDLE_VALUE_NO_CONTENT                    "no_content"
+
+#define MSG_BUNDLE_VALUE_DEL_ALL               "del_all"
+#define MSG_BUNDLE_VALUE_FORWARDED             "forwarded"
+
+#define MSG_BUNDLE_VALUE_DESTROY               "destroy"
+#define MSG_BUNDLE_VALUE_ERROR                         "error"
+#define MSG_BUNDLE_VALUE_SENT                  "sent"
+#define MSG_BUNDLE_VALUE_RESET         "reset"
+#define MSG_BUNDLE_VALUE_FOCUS_IN      "focus_in"
+
+#define MSG_BUNDLE_VALUE_VGA           "VGA"
+#define MSG_BUNDLE_VALUE_QCIF          "QCIF"
+#define MSG_BUNDLE_VALUE_LOW           "LOW"
+#define MSG_BUNDLE_VALUE_CAM_LIMIT_SIZE                "295"   /* Limit size of camcoder in message composer */
+#define MSG_BUNDLE_VALUE_VR_LIMIT_SIZE         "300"   /* Limit size of voice recorder in message composer */
+
+#define MSG_BUNDLE_VALUE_PREVIEW_MODE  "preview_mode"
+#define MSG_BUNDLE_VALUE_CALENDAR_MAX  "3"
+
+#define MSG_BUNDLE_VALUE_EMAIL_COMPOSE "5"
+
+#define MSG_BUNDLE_VALUE_CALL_MO               "MO"    /* "MO" : normal call, "EMERGENCY" : emergency call */
+#define MSG_BUNDLE_VALUE_VCALL_MO              "mo"
+#define MSG_BUNDLE_VALUE_VCALL_HANDLE  "1"
+#define MSG_BUNDLE_VALUE_VCALL_FALSE           "-1"
+#define MSG_BUNDLE_VALUE_AUTO_REJECT_LIST      "1"
+#define MSG_BUNDLE_VALUE_CONTACT_CHECK_LIST    "46"
+
+#define MSG_BUNDLE_VALUE_RET_YES       "yes"
+#define MSG_BUNDLE_VALUE_RET_NO                "no"
+
+#endif /* __MSG_BUNDLE_H__ */
+
diff --git a/common/msg-ui-common-utility.c b/common/msg-ui-common-utility.c
new file mode 100755 (executable)
index 0000000..c4fb2bc
--- /dev/null
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 HEADERS
+ * ================= */
+#include <msg-ui-util.h>
+#include <msg-ui-common-utility.h>
+
+/* for i18n */
+#include <unicode/uloc.h>
+#include <unicode/ucal.h>
+#include <unicode/udat.h>
+#include <unicode/udatpg.h>
+#include <unicode/ustring.h>
+
+/*==========================
+ * FUNCTION IMPLEMENTATIONS
+ *========================== */
+const char *msg_common_get_default_locale()
+{
+       const char *locale;
+       UErrorCode status = U_ZERO_ERROR;
+       /* ICU API to set default locale */
+       uloc_setDefault(getenv("LC_TIME"), &status);
+       locale = uloc_getDefault();
+
+       return locale;
+}
+
+char *msg_common_get_date_best_pattern(const char* locale, char* skeleton)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, locale == NULL || skeleton == NULL, NULL);
+
+       UErrorCode status = U_ZERO_ERROR;
+       UDateTimePatternGenerator *generator = NULL;
+       UChar bestPattern[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
+       char bestPatternString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
+       int32_t bestPatternCapacity = 0;
+       int32_t bestPatternLength = 0;
+
+       UChar customSkeleton[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
+       int skeletonLength = 0;
+
+       skeletonLength = strlen(skeleton);
+       /* convert char to uchar */
+       if (skeletonLength <= MSG_COMMON_MAX_UCHAR_PATTERN_LEN)
+               u_uastrncpy(customSkeleton, skeleton, skeletonLength);
+       else
+               u_uastrncpy(customSkeleton, skeleton, MSG_COMMON_MAX_UCHAR_PATTERN_LEN);
+
+       generator = udatpg_open(locale, &status);
+       bestPatternCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
+
+       /* get bestpattern from customskeletom of uchar */
+       bestPatternLength = udatpg_getBestPattern(generator, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status);
+
+       /* convert uchar to char to know bestpatternstring */
+       u_austrcpy(bestPatternString, bestPattern);
+
+       udatpg_close(generator);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return strdup(bestPatternString);
+}
+
+char *msg_common_get_formatted_date(const char* locale, char* bestPattern, void *time)
+{
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, locale == NULL || bestPattern == NULL || time == NULL, NULL);
+
+       UErrorCode status = U_ZERO_ERROR;
+       UDate date;
+       UDateFormat *date_format = NULL;
+       UChar uBestPattern[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
+       UChar formatted[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
+       char formattedString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
+       int32_t formattedCapacity = 0;
+       int patternLength = 0, formattedLength = 0;
+
+       patternLength = strlen(bestPattern);
+       /* convert char to uchar */
+       if (patternLength <= MSG_COMMON_MAX_UCHAR_PATTERN_LEN)
+               u_uastrncpy(uBestPattern, bestPattern, patternLength);
+       else
+               u_uastrncpy(uBestPattern, bestPattern, MSG_COMMON_MAX_UCHAR_PATTERN_LEN);
+
+       /* convert time_t to UDate, if it is */
+       if (time) {
+               time_t msg_time = *(time_t *) time;
+               date = (UDate) msg_time * 1000; /* Equivalent to Date = ucal_getNow() in Milliseconds */
+       } else
+               date = ucal_getNow();
+
+       date_format = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, uBestPattern, -1, &status);
+       formattedCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
+       /* get formatted string */
+       formattedLength = udat_format(date_format, date, formatted, formattedCapacity, NULL, &status);
+       /* convert uchar to char */
+       u_austrcpy(formattedString, formatted);
+
+       udat_close(date_format);
+
+       return strdup(formattedString);
+}
+
+char *msg_common_get_date_text(const char* locale, char* skeleton, void* time)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, locale == NULL, NULL);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, skeleton == NULL, NULL);
+
+       UChar customSkeleton[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
+       int skeletonLength = 0;
+
+       skeletonLength = strlen(skeleton);
+       /* convert char to uchar */
+       if (skeletonLength <= MSG_COMMON_MAX_UCHAR_PATTERN_LEN)
+               u_uastrncpy(customSkeleton, skeleton, skeletonLength);
+       else
+               u_uastrncpy(customSkeleton, skeleton, MSG_COMMON_MAX_UCHAR_PATTERN_LEN);
+
+       UErrorCode status = U_ZERO_ERROR;
+       UDateTimePatternGenerator *generator = NULL;
+       UDateFormat *date_format = NULL;
+       UDate date;
+       UChar bestPattern[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
+       UChar formatted[MSG_COMMON_MAX_UCHAR_PATTERN_LEN + 1] = {0,};
+       char bestPatternString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
+       char formattedString[MSG_COMMON_MAX_CHAR_PATTERN_LEN + 1] = {0,};
+       int32_t bestPatternCapacity = 0;
+       int32_t bestPatternLength = 0;
+       int32_t formattedCapacity = 0;
+       int32_t formattedLength = 0;
+
+       generator = udatpg_open(locale, &status);
+       bestPatternCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
+
+       /* get bestpattern from customskeletom of uchar */
+       bestPatternLength = udatpg_getBestPattern(generator, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status);
+
+       /* convert uchar to char to know bestpatternstring */
+       u_austrcpy(bestPatternString, bestPattern);
+
+       /* convert time_t to UDate, if it is */
+       if (time) {
+               time_t msg_time = *(time_t *) time;
+               date = (UDate) msg_time * 1000; /* Equivalent to Date = ucal_getNow() in Milliseconds */
+       } else
+               date = ucal_getNow();
+
+       date_format = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern, -1, &status);
+       formattedCapacity = MSG_COMMON_MAX_UCHAR_PATTERN_LEN;
+       /* get formatted string */
+       formattedLength = udat_format(date_format, date, formatted, formattedCapacity, NULL, &status);
+       /* convert uchar to char */
+       u_austrcpy(formattedString, formatted);
+
+       udatpg_close(generator);
+       udat_close(date_format);
+
+       return strdup(formattedString);
+}
+
+
+MSG_BOOL msg_common_is_valid_phone_number(const char *address)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, address == NULL, FALSE, "address is NULL");
+
+       int addr_len = 0;
+       addr_len = strlen(address);
+
+       if (addr_len == 0)
+               return FALSE;
+
+       /*  length check phone address should be longer than 2 and shorter than 40 */
+       if (addr_len > 2 && addr_len <= MSG_COMMON_NUMBER_MAX_LEN) {
+               const char *pszOneChar = address;
+
+               if (*pszOneChar == '+')
+                       ++pszOneChar;
+
+               while (*pszOneChar) {
+                       if (!isdigit(*pszOneChar) && (*pszOneChar != '*') && (*pszOneChar != '#'))
+                               return FALSE;
+
+                       ++pszOneChar;
+               }
+
+               return TRUE;
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid address length [%d]", addr_len);
+               return FALSE;
+       }
+}
+
+MSG_BOOL msg_common_is_valid_email_addr(const char *address)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, address == NULL, FALSE, "address is NULL");
+
+       const char *pszOneChar = address;
+       MSG_BOOL bIsPrefixStringCorrect = FALSE;
+       MSG_BOOL bIsSurfixStringCorrect = FALSE;
+       MSG_BOOL bIsExistAt = FALSE;
+
+       for (; *pszOneChar != '\0'; ++pszOneChar) {
+               if (bIsExistAt == FALSE) {
+                       if (isalnum(*pszOneChar) || *pszOneChar == '.' || *pszOneChar == '_' || *pszOneChar == '-') {
+                               bIsPrefixStringCorrect = TRUE;
+                               continue;
+                       } else if (*pszOneChar == '@') {
+                               if (bIsPrefixStringCorrect == FALSE)
+                                       return FALSE;
+                               else
+                                       bIsExistAt = TRUE;
+                       } else {
+                               return FALSE;
+                       }
+               } else {
+                       if (isalnum(*pszOneChar) || *pszOneChar == '.' || *pszOneChar == '_' || *pszOneChar == '-') {
+                               bIsSurfixStringCorrect = TRUE;
+                               continue;
+                       } else {
+                               return FALSE;
+                       }
+               }
+       }
+
+       return (bIsPrefixStringCorrect) && (bIsSurfixStringCorrect) && (bIsExistAt);
+}
+
+MSG_BOOL msg_common_is_connected_call(void)
+{
+       int call_status = 0;
+
+       if (vconf_get_int(VCONFKEY_CALL_STATE, &call_status) < 0)
+               return FALSE;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "call_status = %d", call_status);
+
+       if (call_status != VCONFKEY_CALL_OFF)
+               return TRUE;
+       else
+               return FALSE;
+}
+
+char *msg_common_get_current_theme_name(void)
+{
+       char *theme_name = NULL;
+       char *save_ptr = NULL;
+
+       /* Get current theme path. Return value is a full path of theme file. */
+       const char *current_theme_path = elm_theme_get(NULL);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current_theme_path is %s", current_theme_path);
+
+       if (current_theme_path == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "current_theme_path is NULL !!");
+               return NULL;
+       }
+
+       theme_name = strdup(current_theme_path);
+       if (theme_name == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "strdup is NULL !!");
+               return NULL;
+       }
+
+       theme_name = strtok_r(theme_name, ":", &save_ptr);
+       if (theme_name == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "theme_name_dup is NULL !!");
+               return NULL;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "theme_name is %s", theme_name);
+
+       return theme_name;
+}
+
+MSG_BOOL msg_common_is_sim_inserted(void)
+{
+       int sim_slot_status = 0;
+
+       if (vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &sim_slot_status) < 0)
+               return FALSE;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sim_slot_status = %d", sim_slot_status);
+
+       if (sim_slot_status == VCONFKEY_TELEPHONY_SIM_INSERTED)
+               return TRUE;
+       else
+               return FALSE;
+}
+
diff --git a/common/msg-ui-common-utility.h b/common/msg-ui-common-utility.h
new file mode 100755 (executable)
index 0000000..144115d
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMMON_UTILITY_H__
+#define __MSG_UI_COMMON_UTILITY_H__
+
+/*==================================================================================================
+ INCLUDE HEADERS
+ * ==================================================================================================*/
+
+#include <glib.h>
+#include <Elementary.h>
+
+/*==================================================================================================
+ DEFINITIONS
+ *==================================================================================================*/
+/* for i18n */
+#define MSG_COMMON_MAX_UCHAR_PATTERN_LEN       64
+#define MSG_COMMON_MAX_CHAR_PATTERN_LEN        128
+
+/* for cutlink*/
+#define MSG_COMMON_TAG_TEXT "<wrap=char>"
+#define MSG_COMMON_TAG_LINK "<color=#72b1f2 underline=on underline_color=#72b1f2>"
+#define MSG_COMMON_CUTLINK_MAX_NUMBER_LEN      40
+#define MSG_COMMON_CUTLINK_MAX_EMAIL_LEN       128
+#define MSG_COMMON_CUTLINK_MAX_URL_LEN         256
+#define MSG_COMMON_MAX_CUTLINK_LEN                     MSG_COMMON_CUTLINK_MAX_URL_LEN
+#define MSG_COMMON_CUTLINK_COUNT_MAX   50      /* maximum cutlink count */
+
+#define MSG_COMMON_NUMBER_MAX_LEN      40
+
+/*==================================================================================================
+ ENUMERATIONS
+ *==================================================================================================*/
+
+typedef enum {
+       MSG_COMMON_LINK_NONE,
+       MSG_COMMON_LINK_PHONE,
+       MSG_COMMON_LINK_EMAIL,
+       MSG_COMMON_LINK_URL,
+       MSG_COMMON_LINK_RTSP,
+       MSG_COMMON_LINK_WAP,
+} MsgLinkType;
+
+/*==================================================================================================
+ STRUCTURES
+ *==================================================================================================*/
+
+typedef struct {
+       gchar *pattern;
+       MsgLinkType type;
+} MsgLinkPattern;
+
+typedef struct {
+       gchar *string;
+       MsgLinkType type;
+       gint s_offset;
+       gint e_offset;
+} MsgLinkInfo;
+
+/*==================================================================================================
+ FUNCTION DECLARATIONS
+ *==================================================================================================*/
+
+/*
+ *@fn  msg_common_get_default_locale();
+ *@brief       This function is used to get default locale
+ *@return      default locale string on success, else NULL pointer on failure
+ *@param[in]   None
+ */
+const char *msg_common_get_default_locale();
+
+/*
+ *@fn  msg_common_get_date_text(const char* locale, char* skeleton, void* time);
+ *@brief       This function is used to get data & time string based on both locale and skeleton.
+ *             Caller must free returned string after using it, else memory will be leaked
+ *@return      data and time formated string on success, else NULL pointer on failure
+ *@param[in]   locale  locale info. of current setting
+ *@param[in]   skeleton        skeleton string caller want to see
+ *@param[in]   time_t  time_t pointer to be diaplayed. If NULL is passed, current time will be displayed
+ */
+char *msg_common_get_date_text(const char* locale, char* skeleton, void* time);
+
+/*
+ *@fn  msg_common_is_valid_phone_number(const char* address);
+ *@brief       This function is used to check address is valid number or not
+ *@return      return TRUE if address is valide number type, else FALSE
+ *@param[in]   address string pointer of address
+ */
+MSG_BOOL msg_common_is_valid_phone_number(const char *address);
+
+/*
+ *@fn  msg_common_is_valid_email_addr(const char* address);
+ *@brief       This function is used to check address is valid email address or not
+ *@return      return TRUE if address is valide email address type, else FALSE
+ *@param[in]   address string pointer of address
+ */
+MSG_BOOL msg_common_is_valid_email_addr(const char *address);
+
+/*
+ *@fn  msg_common_is_connected_call(void);
+ *@brief       This function is used to know (voice or video)call is connected or not
+ *@return      return TRUE if call is connected status, else FALSE
+ */
+MSG_BOOL msg_common_is_connected_call(void);
+
+/*
+ *@fn  msg_common_get_date_best_pattern(const char* locale, char* skeleton);
+ *@brief       This function is used to get best pattern string based on both locale and skeleton.
+ *@return      best pattern based on locale for data and time on success, else NULL pointer on failure
+ *@param[in]   locale  locale info. of current setting
+ *@param[in]   skeleton        skeleton string caller want to see
+ */
+char *msg_common_get_date_best_pattern(const char* locale, char* skeleton);
+
+/*
+ *@fn  msg_common_get_formatted_date(const char* locale, char* bestPattern, void *time);
+ *@brief       This function is used to get data & time string from best pattern based on locale.
+ *@return      data and time formated string on success, else NULL pointer on failure
+ *@param[in]   locale  locale info. of current setting
+ *@param[in]   bestPattern     best pattern for date and time based on locale
+ *@param[in]   time_t  time_t pointer to be diaplayed. If NULL is passed, current time will be displayed
+ */
+char *msg_common_get_formatted_date(const char* locale, char* bestPattern, void *time);
+
+/*
+ *@fn  msg_common_get_current_theme_name(void);
+ *@brief       This function is used to get current theme name.
+ *@return      return theme name. if it is failed, it will return NULL. Caller should free the memory.
+ */
+char *msg_common_get_current_theme_name(void);
+
+/*
+ *@fn  msg_common_check_sim_existence(void);
+ *@brief       This function is used to know whether SIM is inserted or not.
+ *@return      return TRUE if SIM is inserted, else FALSE
+ */
+MSG_BOOL msg_common_is_sim_inserted(void);
+
+
+#endif
+
diff --git a/common/msg-ui-util.h b/common/msg-ui-util.h
new file mode 100755 (executable)
index 0000000..83af85b
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UTIL_H__
+#define __MSG_UTIL_H__
+
+#include <stdio.h>
+#include <string.h>
+#include "dlog.h"
+#include <vconf.h>
+#include <heynoti.h>
+#include "msg-ui-bundle.h"
+
+#include <unicode/udat.h>
+#include <unicode/utypes.h>
+#include <unicode/ustring.h>
+
+#ifndef MSG_BOOL
+#define MSG_BOOL char
+#endif
+#ifndef TRUE
+#define TRUE   1
+#endif
+#ifndef FALSE
+#define FALSE  0
+#endif
+
+
+#define MESSAGE_PKGNAME        "message"
+
+#define _EDJ(o)                elm_layout_edje_get(o)
+
+#define TAG_MSG_UI                     "MESSAGE_APP"
+
+#define MSG_UI_LEVEL_DEBUG             0
+#define MSG_UI_LEVEL_ERR               1
+#define MSG_UI_LEVEL_ASSERT            2
+
+#define DEF_BUF_LEN_D  (10)
+#define DEF_BUF_LEN_S  (128)
+#define DEF_BUF_LEN    (512)
+#define DEF_BUF_LEN_L  (4096)
+
+#define DEF_PATH_MAX   (4096)
+#define DEF_IMG_PATH_LEN       (1024)
+#define DEF_MAX_MSG_TEXT_LEN   (1530)
+#define MSG_UI_URL_MAX_LEN      (1024)
+#define DEF_MAX_EMAIL_LEN      (255)
+
+#define DEF_THREAD_ADDR_LEN    (200)
+#define DEF_THREAD_NAME_LEN    (200)
+
+#define DEF_VALID_ADDRESS_LEN  (9)
+
+#define MSG_UI_TIME_PATTERN_12H                "hma"
+#define MSG_UI_TIME_PATTERN_24H                "Hm"
+
+enum {
+       MSG_UI_RET_ERR = -1,
+       MSG_UI_RET_SUCCESS = 0,
+};
+
+#define D_PRINT(fmt, args...)       \
+       LOG(LOG_DEBUG, TAG_MSG_UI, fmt, ##args);
+
+#define D_MSG(fmt, args...)       \
+       LOG(LOG_DEBUG, TAG_MSG_UI, "\n[%s %s() #%d ]" fmt "\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__,  __LINE__, ##args);
+
+#define D_EMSG(fmt, args...)       \
+       LOG(LOG_DEBUG, TAG_MSG_UI, "\n[ERROR][%s %s() #%d ]" fmt "\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, ##args);
+
+#define D_ENTER\
+       LOG(LOG_DEBUG, TAG_MSG_UI, "\n[ENTER][%s %s(%p) #%d ]>>>>>\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __FUNCTION__,  __LINE__);
+
+#define D_LEAVE\
+       LOG(LOG_DEBUG, TAG_MSG_UI, "\n[LEAVE][%s %s() #%d]<<<<<\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__);
+
+#define D_MSG_RETM_IF(expr, fmt, args...) do { \
+               if (expr) { \
+                       LOG(LOG_ERROR, TAG_MSG_UI, "\n[File: %s : %s() #%d][(%s)] Return message : " fmt "\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, #expr, ##args); \
+                       return; \
+               } \
+       } while (0)
+
+#define D_MSG_RETVM_IF(expr, val, fmt, args...) do { \
+                       if (expr) { \
+                               LOG(LOG_ERROR, TAG_MSG_UI, "\n[File: %s : %s() #%d][(%s)] Return value : %d, message : " fmt "\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, #expr, val, ##args); \
+                               return (val); \
+                       } \
+               } while (0)
+
+
+#define MSG_UI_DEBUG(level, fmt, args...)       \
+       LOG(LOG_DEBUG, TAG_MSG_UI, "\n[File: %s : %s() #%d] " fmt "\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, ##args);
+#define MSG_UI_ENTER(level)    \
+       LOG(LOG_DEBUG, TAG_MSG_UI, "\n[File: %s : %s() #%d] enter \n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__),  __FUNCTION__, __LINE__);
+#define MSG_UI_LEAVE(level)    \
+       LOG(LOG_DEBUG, TAG_MSG_UI, "\n[File: %s : %s() #%d] leave \n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__);
+
+#define MSG_UI_RET_IF(level, expr) do { \
+               if (expr) { \
+                       LOG(LOG_ERROR, TAG_MSG_UI, "\n[File: %s : %s() #%d][(%s)] Return\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, #expr); \
+                       return; \
+               } \
+       } while (0)
+#define MSG_UI_RETV_IF(level, expr, val) do { \
+               if (expr) { \
+                       LOG(LOG_ERROR, TAG_MSG_UI, "\n[File: %s : %s() #%d][(%s)] Return value : %d\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, #expr, val); \
+                       return (val); \
+               } \
+       } while (0)
+#define MSG_UI_RETM_IF(level, expr, fmt, args...) do { \
+               if (expr) { \
+                       LOG(LOG_ERROR, TAG_MSG_UI, "\n[File: %s : %s() #%d][(%s)] Return message : " fmt "\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, #expr, ##args); \
+                       return; \
+               } \
+       } while (0)
+#define MSG_UI_RETVM_IF(level, expr, val, fmt, args...) do { \
+               if (expr) { \
+                       LOG(LOG_ERROR, TAG_MSG_UI, "\n[File: %s : %s() #%d][(%s)] Return value : %d, message : " fmt "\n", (rindex(__FILE__, '/') ? (rindex(__FILE__, '/')+1) : __FILE__), __FUNCTION__, __LINE__, #expr, val, ##args); \
+                       return (val); \
+               } \
+       } while (0)
+
+#define MSG_THEME_BLUE_HD              "blue-hd"
+#define MSG_THEME_WHITE_HD             "white-hd"
+
+#define MSG_THREAD_UG_NAME             "msg-thread-efl"
+#define MSG_COMPOSER_UG_NAME           "msg-composer-efl"
+#define MSG_SETTING_UG_NAME            "msg-setting-efl"
+#define MSG_BUBBLE_UG_NAME             "msg-conversation-efl"
+#define MSG_VIEWER_UG_NAME             "msg-viewer-efl"
+
+#define PRIVACY_SETTING_UG_NAME                "setting-passwd-efl"
+#define EMAIL_COMPOSER_UG_NAME         "email-composer-efl"
+#define CALL_SETTING_UG_NAME           "setting-call-efl"
+
+/* NOTIFY MESSAGE */
+#define MSG_UI_NOTI_UNDER_CONTRUCT     "Under construction"
+#define MSG_UI_NOTI_BLOCKED            "Blocked"
+#define MSG_UI_NOTI_ALREADY_BLOCKED    "Already blocked for this address"
+
+/* Navigation icon*/
+#define MSG_HEADER_ICON_CANCEL                 IMGDIR"/01_header_icon_cancel.png"
+#define MSG_HEADER_ICON_DONE                   IMGDIR"/01_header_icon_done.png"
+
+/* Controlbar Icon */
+#define MSG_CONTROLBAR_IMG_PATH                IMGDIR"/controlbar/"
+
+#define MSG_CONTROLBAR_ICON_COMPOSE            MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_compose.png"
+#define MSG_CONTROLBAR_ICON_CANCEL             MSG_CONTROLBAR_IMG_PATH"01_controllbar_icon_close.png"
+#define MSG_CONTROLBAR_ICON_EDIT               MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_edit.png"
+#define MSG_CONTROLBAR_ICON_DELETE             MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_delete.png"
+#define MSG_CONTROLBAR_ICON_MOVE               MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_move.png"
+#define MSG_CONTROLBAR_ICON_FORWARD            MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_forward.png"
+#define MSG_CONTROLBAR_ICON_VOICE_CALL         MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_call.png"
+#define MSG_CONTROLBAR_ICON_ADD_TO_CONTACT     MSG_CONTROLBAR_IMG_PATH"01_controllbar_icon_add_to_contact.png"
+#define MSG_CONTROLBAR_ICON_VIEW_CONTACT_DETAIL        MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_info.png"
+
+/* setting */
+#define MSG_CONTROLBAR_ICON_CREATE             MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_create.png"
+
+
+typedef enum {
+       MSG_TIME_FORMAT_12H = 0,
+       MSG_TIME_FORMAT_24H,
+       MSG_TIME_FORMAT_UNKNOWN
+
+} msg_time_format;
+
+enum {
+       MSG_UI_THEME_WHITE,
+       MSG_UI_THEME_BLUE_HD,
+};
+
+enum {
+       CONTROLBAR_ITEM_1 = 0,
+       CONTROLBAR_ITEM_2,
+       CONTROLBAR_ITEM_3,
+       CONTROLBAR_ITEM_4,
+};
+
+enum {
+       MSG_UI_STATE_NONE = 0,
+       MSG_UI_STATE_RUNNING,
+       MSG_UI_STATE_PAUSE,
+       MSG_UI_STATE_DESTROY,
+       MSG_UI_STATE_MAX,
+};
+
+#endif /* __MSG_UTIL_H__ */
diff --git a/composer/CMakeLists.txt b/composer/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..87671e6
--- /dev/null
@@ -0,0 +1,78 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ug-msg-composer-efl C)
+
+#SET (COMPOSER composer)
+SET (UGCOMPOSER ug-msg-composer-efl)
+#################################
+#      Message composer        #
+#################################
+SET(COMPOSER_SRCS
+       ./src/core/msg-ui-composer-core.c
+       ./src/gadget/msg-ui-composer-gadget.c
+       ./src/external/msg-ui-composer-external.c
+       ./src/message/msg-ui-composer-message.c
+       ./src/util/msg-ui-composer-util.c
+       ./src/ui-composer/msg-ui-composer-body.c
+       ./src/ui-composer/msg-ui-composer-body-page.c
+       ./src/ui-composer/msg-ui-composer-body-callback.c
+       ./src/ui-composer/msg-ui-composer-recipient.c
+       ./src/ui-composer/msg-ui-composer-recipient-callback.c
+       ./src/ui-composer/msg-ui-composer-popup.c
+       ./src/ui-composer/msg-ui-composer-predictsearch.c
+       ./src/ui-composer/msg-ui-composer-common.c
+       ./src/ui-composer/msg-ui-composer-main.c
+       ./src/bubble/msg-ui-composer-bubble-main.c
+       ./src/bubble/msg-ui-composer-bubble-list.c
+       ./src/bubble/msg-ui-composer-bubble-callback.c
+       ./src/bubble/msg-ui-composer-bubble-util.c
+)
+
+INCLUDE_DIRECTORIES(
+               ${CMAKE_CURRENT_SOURCE_DIR}/include
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/ui-composer
+               ${CMAKE_CURRENT_SOURCE_DIR}/src/util
+               ${CMAKE_SOURCE_MAIN_DIR}
+               ${CMAKE_SOURCE_COMMON_DIR}
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -Wall")
+SET(CMAKE_LDFLAGS "-Wl,-zdefs" )
+
+ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"")
+ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"")
+ADD_DEFINITIONS("-DTARGET")
+
+ADD_LIBRARY(${UGCOMPOSER} SHARED ${COMPOSER_SRCS})
+TARGET_LINK_LIBRARIES(${UGCOMPOSER} ${CMAKE_LDFLAGS} ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common)
+
+ADD_CUSTOM_TARGET(composer.edj
+                COMMAND edje_cc -id
+                               ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image
+                               ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/composer_main.edc
+                               ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/composer.edj
+                               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/composer_main.edc
+
+)
+ADD_DEPENDENCIES(${UGCOMPOSER} composer.edj)
+
+
+INSTALL(TARGETS ${UGCOMPOSER} DESTINATION ${UGDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/composer/data/composer_edc/composer.edj DESTINATION ${EDJDIR})
+
+ADD_CUSTOM_TARGET(white_theme_composer.edj
+                COMMAND edje_cc -id
+                               ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image/white
+                               ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/white_theme_composer.edc
+                               ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/white_theme_composer.edj
+                               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/white_theme_composer.edc
+
+)
+ADD_DEPENDENCIES(${UGCOMPOSER} white_theme_composer.edj)
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/composer/data/composer_edc/white_theme_composer.edj DESTINATION ${EDJDIR})
+
diff --git a/composer/data/composer_edc/composer_main.edc b/composer/data/composer_edc/composer_main.edc
new file mode 100755 (executable)
index 0000000..ae6088c
--- /dev/null
@@ -0,0 +1,17 @@
+/* Black Theme of Composer */
+
+#include "msg-ui-composer-data.edc"
+
+#define IMG_BODY_INPUT_FIELD "M01_search_input_field_bg.png"
+#define BORDER_BODY_INPUT_FIELD 6 6 6 6
+
+collections
+{
+
+#include "msg-ui-composer-main.edc"
+#include "msg-ui-composer-body.edc"
+#include "msg-ui-composer-recipient.edc"
+
+#include "msg-ui-composer-custom.edc"
+#include "msg-ui-composer-bubble.edc"
+}
diff --git a/composer/data/composer_edc/msg-ui-composer-body.edc b/composer/data/composer_edc/msg-ui-composer-body.edc
new file mode 100755 (executable)
index 0000000..6bc8e59
--- /dev/null
@@ -0,0 +1,311 @@
+#define MSGC_BODY_PAGE_MIN_H 90
+#define MSGC_BODY_MAIN_MIN_H (MSGC_BODY_PAGE_MIN_H + 16 + 16)
+
+#define BODY_SENDBUTTON_SIZE 108 74
+#define BODYPAGE_DELBUTTON_SIZE 44 36
+#define MSGC_BODY_PAGE_IMAGE_H 74
+
+group
+{
+       name: "composer/body/page";
+       images
+       {
+               image: IMG_BODY_INPUT_FIELD COMP;
+       }
+
+       parts
+       {
+               part
+               {
+                       name: "rect";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events:  0;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 MSGC_BODY_PAGE_MIN_H;
+                               color: 0 0 0 0;
+                       }
+               }
+
+               PADDING_TOP("padding_top",16);
+               PADDING_LEFT("padding_left",0);
+               PADDING_RIGHT("padding_right",16);
+               PADDING_BOTTOM("padding_bottom",0);
+
+               part
+               {
+                       name: "img.body";
+                       type: IMAGE;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 MSGC_BODY_PAGE_IMAGE_H;
+                               fixed: 1 0;
+                               rel1
+                               {
+                                       to_x: "padding_left";
+                                       to_y: "padding_top";
+                                       relative: 1.0 1.0;
+                               }
+                               rel2
+                               {
+                                       to_x: "padding_right";
+                                       to_y: "padding_bottom";
+                                       relative: 0.0 0.0;
+                               }
+                               image
+                               {
+                                       normal: IMG_BODY_INPUT_FIELD;
+                                       border: BORDER_BODY_INPUT_FIELD;
+                               }
+                       }
+               }
+
+               part
+               {
+                       name: "swl.page";
+                       type: SWALLOW;
+                       scale:1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 1 0;
+                               rel1
+                               {
+                                       to:"img.body";
+                                       relative: 0.0 0.0;
+                                       offset: 16 5;
+                               }
+                               rel2
+                               {
+                                       to:"img.body";
+                                       relative: 1.0 1.0;
+                                       offset: -16 -5;
+                               }
+                               align: 0.5 0.5;
+                       }
+               }
+               part
+               {
+                       name: "swl.del_button";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: BODYPAGE_DELBUTTON_SIZE;
+                               max: BODYPAGE_DELBUTTON_SIZE;
+                               fixed: 1 1;
+                               rel1
+                               {
+                                       to_x: "padding_right";
+                                       to_y: "padding_top";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2
+                               {
+                                       to_x: "padding_right";
+                                       to_y: "padding_top";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 1.0 0.0;
+                       }
+               }
+       }
+}
+
+group
+{
+       name: "composer/body/main";
+
+       parts
+       {
+               part
+               {
+                       name: "rect";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 MSGC_BODY_MAIN_MIN_H;
+                               rel1{relative: 0.0 0.0;}
+                               rel2{relative: 1.0 1.0;}
+                               color: 0 0 0 0;
+                       }
+               }
+
+               PADDING_TOP("padding_top",16);
+               PADDING_TOP("padding_top_32",32);
+               PADDING_LEFT("padding_left_16",16);
+               PADDING_RIGHT("padding_right_16",16);
+
+               PADDING_BOTTOM("padding_bottom_16",16);
+               PADDING_BOTTOM("padding_bottom_21",21);
+               part
+               {
+                       name: "rb_rect";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events:  0;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               max: 9999 110;
+                               fixed: 0 1;
+                               visible: 1;
+                               rel1
+                               {
+                                       to_x: "body.swl.send_button";
+                                       to_y: "padding_top_32";
+                                       relative: 0.0 1.0;
+                                       offset: 0 2;
+                               }
+                               rel2
+                               {
+                                       to_x: "body.swl.send_button";
+                                       to_y: "padding_bottom_16";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 1.0 1.0;
+                               color: 255 255 255 255;
+                       }
+               }
+
+               part
+               {
+                       name: "body.swl.main";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 0 0;
+                               rel1
+                               {
+                                       to_x: "padding_left_16";
+                                       to_y: "padding_top";
+                                       relative: 1.0 1.0;
+                                       offset: 0 0;
+                               }
+                               rel2
+                               {
+                                       to_x: "body.swl.send_button";
+                                       to_y: "padding_bottom_16";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+                       }
+               }
+
+               part
+               {
+                       name: "text.char_count";
+                       type: TEXT;
+                       scale: 1;
+                       mouse_events: 0;
+                       clip_to: "rb_rect";
+                       description
+                       {
+                               state: "default" 0.0;
+                               rel1
+                               {
+                                       to_x: "body.swl.send_button";
+                                       to_y: "rb_rect";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2
+                               {
+                                       to_y: "body.swl.send_button";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.5 0.5;
+                               color: 255 255 255 255;
+                               text
+                               {
+                                       font: SLP_FONT_MEDIUM
+                                       size: 20;
+                                       align: 0.5 0.5;
+                                       text: "";
+                               }
+                       }
+               }
+
+               part
+               {
+                       name: "body.swl.send_button";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: BODY_SENDBUTTON_SIZE;
+                               max: BODY_SENDBUTTON_SIZE;
+                               fixed: 1 1;
+                               rel1
+                               {
+                                       to_x: "padding_right_16";
+                                       to_y: "padding_bottom_16";
+                                       relative: 1.0 0.0;
+                                       offset: 0 0;
+                               }
+                               rel2
+                               {
+                                       to_x: "padding_right_16";
+                                       to_y: "padding_bottom_16";
+                                       relative: 1.0 0.0;
+                                       offset: 0 0;
+                               }
+                               align: 0.0 1.0;
+                       }
+                       description
+                       {
+                               state: "contract" 0.0;
+                               inherit: "default" 0.0;
+
+                               rel1
+                               {
+                                       to_x:"padding_right_16";
+                                       to_y:"padding_bottom_16";
+                                       relative: 0.0 0.0;
+                                       offset: 0 0;
+                               }
+                               rel2
+                               {
+                                       to_x: "padding_right_16";
+                                       to_y: "padding_bottom_16";
+                                       relative: 0.0 0.0;
+                                       offset: 0 0;
+                               }
+                               align: 1.0 1.0;
+                       }
+               }
+       }
+
+       programs
+       {
+               program
+               {
+                       name: "body_contract";
+                       signal: "body_contract";
+                       source: "*";
+                       action: STATE_SET "contract" 0.0;
+                       target: "body.swl.send_button";
+               }
+               program
+               {
+                       name: "body_expand";
+                       signal: "body_expand";
+                       source: "*";
+                       action: STATE_SET "default" 0.0;
+                       target: "body.swl.send_button";
+               }
+       }
+}
diff --git a/composer/data/composer_edc/msg-ui-composer-bubble.edc b/composer/data/composer_edc/msg-ui-composer-bubble.edc
new file mode 100755 (executable)
index 0000000..ff158df
--- /dev/null
@@ -0,0 +1,179 @@
+#define SLP_FONT_BOLD          "SLP:style=Bold";\r
+#define SLP_FONT_MEDIUM        "SLP:style=Medium";\r
+#define SLP_FONT_ROMAN                 "SLP:style=Roman";\r
+\r
+group\r
+{\r
+       name: "composer/content/bubble";\r
+       parts{\r
+               part{\r
+                       name: "rect";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       mouse_events : 0;\r
+                       description\r
+                       {\r
+                               state: "default" 0.0;\r
+                               color: 0 0 0 0;\r
+                       }\r
+               }\r
+               part{\r
+                       name : "swl.sel_all";\r
+                       type : SWALLOW;\r
+                       scale : 1;\r
+                       description{\r
+                               state: "default" 0.0;\r
+                               fixed : 1 1;\r
+                               min : 0 0;\r
+                               align : 0.0 0.0;\r
+                               rel1 {to: "rect"; relative:0.0 0.0;}\r
+                               rel2 {to: "rect"; relative:1.0 0.0;}\r
+                       }\r
+               }\r
+               part{\r
+                       name: "swl.composer.body";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description\r
+                       {\r
+                               state: "default" 0.0;\r
+                               fixed :1 1;\r
+                               min : 0 1;\r
+                               align: 0.0 1.0;\r
+                               rel1{to: "rect"; relative: 0.0 1.0;}\r
+                               rel2{to: "rect"; relative: 1.0 1.0;}\r
+                       }\r
+               }\r
+               part{\r
+                       name: "swl.bubble.content";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description\r
+                       {\r
+                               state: "default" 0.0;\r
+                               fixed: 1 1;\r
+                               min: 0 1;\r
+                               rel1{to: "swl.sel_all"; relative: 0.0 1.0;}\r
+                               rel2{to: "swl.composer.body"; relative: 1.0 0.0;}\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+\r
+group {\r
+       name: "msg_2button_popup";\r
+       #define BUTTON_WIDTH 304.0\r
+       #define BUTTON_HEIGHT 46.0\r
+       #define BUTTON_GAP 12.0\r
+       parts{\r
+               part { name: "top_padding";\r
+                       type: RECT;\r
+                       scale: 1; //allow scaling\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min : 0 1; //minimum size for gap filler\r
+                               color: 0 0 0 0;\r
+                               fixed: 0 1;\r
+                               rel1 { relative: 0.0 0.0; }\r
+                               rel2 { relative: 1.0 0.0; }\r
+                               align: 0 0;\r
+                       }\r
+               }\r
+               part{\r
+                       name: "left_padding";\r
+                       type:RECT;\r
+                       scale:1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min: 1 0;\r
+                               fixed: 1 0;\r
+                               rel1 { relative: 0.0 0.0; }\r
+                               rel2 { relative: 0.0 1.0; }\r
+                               color: 0 0 0 0;\r
+                               align: 0 0;\r
+                       }\r
+               }\r
+               part{\r
+                       name: "right_padding";\r
+                       type:RECT;\r
+                       scale:1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min: 1 0;\r
+                               fixed: 1 0;\r
+                               rel1 { relative: 1.0 0.0; }\r
+                               rel2 { relative: 1.0 1.0; }\r
+                               color: 0 0 0 0;\r
+                               align: 1.0 0;\r
+                       }\r
+               }\r
+               part { name: "btn_top_padding";\r
+                       type: RECT;\r
+                       scale: 1; //allow scaling\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min : 0 14; //minimum size for gap filler\r
+                               fixed: 0 1;\r
+                               rel1 { relative: 0.0 1.0;  to: "top_padding";}\r
+                               rel2 { relative: 1.0 1.0;  to: "top_padding";}\r
+                               color:  0 0 0 0;\r
+                               align: 0 0;\r
+                       }\r
+               }\r
+               part { name: "button.1";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               fixed: 1 1;\r
+                               align: 0.5 0;\r
+                               min: BUTTON_WIDTH BUTTON_HEIGHT;\r
+                               max: BUTTON_WIDTH BUTTON_HEIGHT;\r
+                               rel1 { relative: 0 1.0; to_y: "btn_top_padding"; }\r
+                       }\r
+               }\r
+               part { name: "button_1_bottom_padding";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min : BUTTON_WIDTH BUTTON_GAP;\r
+                               max : BUTTON_WIDTH BUTTON_GAP;\r
+                               fixed: 1 1;\r
+                               align: 0.5 0;\r
+                               rel1 { relative: 0 1.0; to_y: "button.1"; }\r
+                               rel2 { relative: 1 1.0; to_y: "button.1"; }\r
+                               color: 0 0 0 0;\r
+                       }\r
+               }\r
+               part { name: "button.2";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               fixed: 1 1;\r
+                               align: 0.5 0;\r
+                               min: BUTTON_WIDTH BUTTON_HEIGHT;\r
+                               max: BUTTON_WIDTH BUTTON_HEIGHT;\r
+                               rel1 { relative: 0 1.0; to_y: "button_1_bottom_padding"; }\r
+                       }\r
+               }\r
+               part { name: "bottom_padding";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min : 0 12;\r
+                               max : 0 12;\r
+                               rel1 { relative: 0 1.0; to_y: "button.2"; }\r
+                               rel2 { relative: 1 1.0;}\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 1.0;\r
+                       }\r
+               }\r
+       }//end parts\r
+       #undef BUTTON_WIDTH\r
+       #undef BUTTON_HEIGHT\r
+       #undef BUTTON_GAP\r
+} //end group\r
diff --git a/composer/data/composer_edc/msg-ui-composer-custom.edc b/composer/data/composer_edc/msg-ui-composer-custom.edc
new file mode 100755 (executable)
index 0000000..0582a41
--- /dev/null
@@ -0,0 +1,180 @@
+#define MSGC_DIALOGUE_H 70
+#define MSGC_DIALOGUE_ICON_W 64
+#define MSGC_DIALOGUE_PADDING_W 16
+#define MSGC_DIALOGUE_ENTRY_W 20
+#define MSGC_DIALOGUE_TEXT_W 180
+#define MSGC_DIALOGUE_TEXT_COLOR 249 249 249 255
+#define MSGC_DIALOGUE_TEXT_SIZE        44
+
+group
+{
+       name: "composer/dialogue/custom";
+
+       parts
+       {
+               part
+               {
+                       name: "rect";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 MSGC_DIALOGUE_H;
+                               fixed: 1 1;
+                               color: 0 0 0 0;
+                       }
+               }
+
+               PADDING_RIGHT("padding_right",MSGC_DIALOGUE_PADDING_W);
+
+               part
+               {
+                       name: "padding.text.left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: MSGC_DIALOGUE_PADDING_W 0;
+                               fixed: 1 0;
+                               rel1{
+                                       relative: 0.0 0.0;
+                                       to_x: "elm.text";
+                               }
+                               rel2{
+                                       relative: 0.0 1.0;
+                                       to_x: "elm.text";
+                               }
+
+                               align: 1.0 0.0;
+                               visible: 0;
+                       }
+               }
+
+               part
+               {
+                       name: "padding.entry.left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: MSGC_DIALOGUE_PADDING_W 0;
+                               fixed: 1 0;
+                               rel1{
+                                       relative: 0.0 0.0;
+                                       to_x: "dialogue.swl.entry";
+                               }
+                               rel2{
+                                       relative: 0.0 1.0;
+                                       to_x: "dialogue.swl.entry";
+                               }
+                               align: 1.0 0.0;
+                               visible: 0;
+                       }
+               }
+
+               part
+               {
+                       name: "elm.text";
+                       type: TEXT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: MSGC_DIALOGUE_TEXT_W 0;
+                               fixed: 1 0;
+                               rel1{
+                                       to_x: "padding_right";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2{
+                                       to_x: "padding_right";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 1.0 0.0;
+                               color: MSGC_DIALOGUE_TEXT_COLOR;
+                               text {
+                                       font: "SLP:style=Roman";
+                                       size: MSGC_DIALOGUE_TEXT_SIZE;
+                                       min: 0 1;
+                                       align: 0.0 0.5;
+                                       text: "";
+                               }
+                       }
+               }
+
+               part
+               {
+                       name: "dialogue.swl.entry";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: MSGC_DIALOGUE_ENTRY_W 0;
+                               fixed: 1 0;
+                               rel1 {
+                                       to_x: "padding.text.left";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2
+                               {
+                                       to_x: "padding.text.left";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 1.0 0.5;
+                       }
+               }
+       }
+}
+
+#define MSGC_DATEFIELD_TXT_COLOR 173 170 165 255
+#define MSGC_DATEFIELD_TXT_SIZE 24
+#define MSGC_DATEFIELD_TEXT_H 60
+
+group {
+       name: "composer/datefield";
+       parts {
+               PADDING_LEFT("padding_left",16);
+               part {
+                       name: "text";
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 MSGC_DATEFIELD_TEXT_H;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1 {
+                                       to :"padding_left";
+                                       relative: 1 0;
+                               }
+                               rel2 {
+                                       relative: 1 0;
+                               }
+                               color: MSGC_DATEFIELD_TXT_COLOR;
+                               text {
+                                       font: "SLP:style=Roman";
+                                       size: MSGC_DATEFIELD_TXT_SIZE;
+                                       min:  1 0;
+                                       align: 0.0 0.0;
+                                       text: "Date & Time ";
+                               }
+                       }
+               }
+
+               part {
+                       name: "picker";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0 1; to: "text"; }
+                               rel2 { relative: 1 1; to: "text"; }
+                       }
+               }
+       }
+}
diff --git a/composer/data/composer_edc/msg-ui-composer-data.edc b/composer/data/composer_edc/msg-ui-composer-data.edc
new file mode 100755 (executable)
index 0000000..ed22c7e
--- /dev/null
@@ -0,0 +1,102 @@
+#define IMAGE_PATH                                     ""\r
+#define PREDICT_LIST_H 80\r
+#define SLP_FONT_BOLD   "SLP:style=Bold";\r
+#define SLP_FONT_MEDIUM  "SLP:style=Medium";\r
+#define SLP_FONT_ROMAN   "SLP:style=Roman";\r
+\r
+\r
+#define PADDING_LEFT( param_padding_name ,param_padding_size ) \\r
+       part \\r
+       { \\r
+               name: param_padding_name; \\r
+               type: RECT; \\r
+               scale: 1; \\r
+               mouse_events:  0;\\r
+               description \\r
+               { \\r
+                       state: "default" 0.0; \\r
+                       min: param_padding_size 0; \\r
+                       fixed: 1 0; \\r
+                       visible: 0; \\r
+                       rel1{relative: 0.0 0.0;} \\r
+                       rel2{relative: 0.0 1.0;} \\r
+                       align: 0.0 0.0; \\r
+                       color: 0 55 0 55; \\r
+       } \\r
+}\r
+#define PADDING_TOP( param_padding_name ,param_padding_size ) \\r
+       part \\r
+       { \\r
+               name: param_padding_name; \\r
+               type: RECT; \\r
+               scale: 1; \\r
+               mouse_events:  0;\\r
+               description \\r
+               { \\r
+                       state: "default" 0.0; \\r
+                       min: 0 param_padding_size ; \\r
+                       fixed: 0 1; \\r
+                       visible: 0; \\r
+                       rel1{relative: 0.0 0.0;} \\r
+                       rel2{relative: 1.0 0.0;} \\r
+                       align: 0.0 0.0; \\r
+                       color: 0 55 0 55; \\r
+       } \\r
+}\r
+#define PADDING_BOTTOM( param_padding_name ,param_padding_size ) \\r
+       part \\r
+       { \\r
+               name: param_padding_name; \\r
+               type: RECT; \\r
+               scale: 1; \\r
+               mouse_events:  0;\\r
+               description \\r
+               { \\r
+                       state: "default" 0.0; \\r
+                       min: 0 param_padding_size; \\r
+                       fixed: 0 1; \\r
+                       visible: 0; \\r
+                       rel1{relative: 0.0 1.0;} \\r
+                       rel2{relative: 1.0 1.0;} \\r
+                       align: 0.0 1.0; \\r
+                       color: 0 55 0 55; \\r
+               } \\r
+       }\r
+\r
+\r
+#define PADDING_RIGHT( param_padding_name ,param_padding_size ) \\r
+       part \\r
+       { \\r
+               name: param_padding_name; \\r
+               type: RECT; \\r
+               scale: 1; \\r
+               mouse_events:  0;\\r
+               description \\r
+               { \\r
+                       state: "default" 0.0; \\r
+                       min: param_padding_size 0; \\r
+                       fixed: 1 0; \\r
+                       visible: 0; \\r
+                       rel1{relative: 1.0 0.0;} \\r
+                       rel2{relative: 1.0 1.0;} \\r
+                       align: 1.0 0.0; \\r
+                       color: 0 55 0 55; \\r
+               } \\r
+       }\r
+#define PART_DISCLIP \\r
+       part \\r
+       { \\r
+               name: "disclip"; \\r
+               type: RECT; \\r
+               description \\r
+               { \\r
+                       state: "default" 0.0; \\r
+               } \\r
+               description \\r
+               { \\r
+                       state: "disabled" 0.0; \\r
+                       inherit: "default" 0.0; \\r
+                       color: 255 255 255 64; \\r
+               } \\r
+       }\r
+\r
diff --git a/composer/data/composer_edc/msg-ui-composer-main.edc b/composer/data/composer_edc/msg-ui-composer-main.edc
new file mode 100755 (executable)
index 0000000..ef1e3c6
--- /dev/null
@@ -0,0 +1,163 @@
+group
+{
+       name: "composer/content/full";
+       parts{
+               part{
+                       name: "rect";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events : 0;
+                       description
+                       {
+                               state: "default" 0.0;
+                               color: 0 0 0 0;
+                       }
+               }
+               part{
+                       name : "swl.sel_all";
+                       type : SWALLOW;
+                       scale : 1;
+                       description{
+                               state: "default" 0.0;
+                               fixed : 1 1;
+                               min : 0 0;
+                               align : 0.0 0.0;
+                               rel1 {to: "rect"; relative:0.0 0.0;}
+                               rel2 {to: "rect"; relative:1.0 0.0;}
+                       }
+               }
+               part{
+                       name: "swl.recipient";
+                       type : SWALLOW;
+                       scale : 1;
+                       description{
+                               state: "default" 0.0;
+                               fixed : 1 1;
+                               min : 0 0;
+                               align : 0.0 0.0;
+                               rel1 {to: "rect"; relative:0.0 0.0;}
+                               rel2 {to: "rect"; relative:1.0 0.0;}
+                       }
+               }
+
+               part{
+                       name: "swl.composer.body";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               fixed :1 1;
+                               min : 0 1;
+                               align: 0.0 1.0;
+                               rel1{to: "swl.recipient"; relative: 0.0 1.0;}
+                               rel2{to: "rect"; relative: 1.0 1.0;}
+                       }
+                       description
+                       {
+                               state: "default" 0.1;
+                               fixed :1 1;
+                               min : 0 1;
+                               align: 0.0 1.0;
+                               rel1{to: "rect"; relative: 0.0 1.0;}
+                               rel2{to: "rect"; relative: 1.0 1.0;}
+                       }
+               }
+               part{
+                       name: "swl.bubble.content";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               min: 0 1;
+                               rel1
+                               {
+                                       to: "swl.sel_all"; 
+                                       relative: 0.0 1.0;
+                                       offset: 0 20;
+                               }
+                               rel2
+                               {
+                                       to: "swl.composer.body"; 
+                                       relative: 1.0 0.0;
+                               }
+                       }
+               }
+               part
+               {
+                       name: "swl.bg_predictsearch";
+                       type: SWALLOW;
+                       scale:1;
+                       repeat_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               rel1.to: "swl.predictsearch";
+                               rel2.to: "swl.predictsearch";
+                               color: 0 0 0 50;
+                               visible: 1;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+
+               part
+               {
+                       name: "swl.predictsearch";
+                       type: SWALLOW;
+                       scale:1;
+                       repeat_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1{to: "swl.composer.body"; relative: 0.0 0.0;}
+                               rel2{to: "swl.composer.body"; relative: 1.0 1.0;}
+                               align: 0.5 0.0;
+                               visible: 1;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+               programs
+               {
+                       program {
+                               name:   "hide.predictsearch";
+                               signal: "hide.predictsearch";
+                               source: "*";
+                               action: STATE_SET "hide" 0.0;
+                               target: "swl.predictsearch";
+                               target: "swl.bg_predictsearch";
+                       }
+
+                       program {
+                               name:   "show.predictsearch";
+                               signal: "show.predictsearch";
+                               source: "*";
+                               action: STATE_SET "default" 0.0;
+                               target: "swl.predictsearch";
+                               target: "swl.bg_predictsearch";
+                       }
+                       program {
+                               name:   "change.bubble";
+                               signal: "change.bubble";
+                               source: "*";
+                               action: STATE_SET "default" 0.1;
+                               target: "swl.composer.body";
+                       }
+                       program {
+                               name: "change.composer";
+                               signal: "change.composer";
+                               source: "*";
+                               action: STATE_SET "default" 0.0;
+                               target: "swl.composer.body";
+                       }
+               }
+       }
+}
diff --git a/composer/data/composer_edc/msg-ui-composer-recipient.edc b/composer/data/composer_edc/msg-ui-composer-recipient.edc
new file mode 100755 (executable)
index 0000000..c997d4d
--- /dev/null
@@ -0,0 +1,172 @@
+#include "msg-ui-composer-data.edc"
+
+/**************
+ * RECIPIENT
+ *************/
+#define MSG_COMPOSER_RECIPIENT_TO_FIELD_MIN_H 114
+
+#define MSG_COMPOSER_RECIPIENT_BT_FIELD_MIN_H 114
+
+#define RECIPIENT_FIELD_MIN_H (MSG_COMPOSER_RECIPIENT_TO_FIELD_MIN_H + MSG_COMPOSER_RECIPIENT_BT_FIELD_MIN_H)
+
+/*
+       composer/recipient/to_field
+*/
+group
+{
+       name: "composer/recipient/to_field";
+
+       parts
+       {
+               part
+               {
+                       name: "rect";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events:  1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 MSG_COMPOSER_RECIPIENT_TO_FIELD_MIN_H;
+                               fixed: 1 0 ;
+                               color: 0 255 255 0;
+                       }
+               }
+               part
+               {
+                       name: "bg";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events:  1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               visible: 1;
+                               rel1{ to: "rect"; relative: 0.0 0.0;}
+                               rel2{ to: "rect"; relative: 1.0 1.0;}
+                               color: 255 255 255 0;
+                       }
+               }
+
+               part
+               {
+                       name: "swl.mbe_scroll";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               rel1 {to: "rect";  relative: 0.0 0.0; }
+                               rel2 {to: "rect";  relative: 1.0 1.0; }
+                               align:  0.5 0.0;
+                       }
+               }
+
+               part
+               {
+                       name: "underline";
+                       type: RECT;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 3;
+                               fixed: 1 1;
+                               rel1 {to: "rect";  relative: 0.0 1.0; }
+                               rel2 {to: "rect";  relative: 1.0 1.0; }
+                               align:  0.5 1.0;
+                               color: 0 0 0 50;
+                       }
+               }
+
+
+       }
+
+
+       programs
+       {
+               program
+               {
+               }
+       }
+}
+
+/*
+composer/recipient/bt_field
+*/
+group
+{
+       name:"composer/recipient/bt_field";
+
+       parts
+       {
+               part
+               {
+                       name: "rect";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events:  0;
+                       description
+                       {
+                               state: "default" 0.0;
+                               visible: 1;
+                               min: 0 MSG_COMPOSER_RECIPIENT_BT_FIELD_MIN_H;
+                               max: 9999 MSG_COMPOSER_RECIPIENT_BT_FIELD_MIN_H;
+                               fixed: 1 0;
+                               color: 255 255 255 0;
+                       }
+
+               }
+
+               part
+               {
+                       name: "swl.bt_left";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               visible: 1;
+
+                               rel1 {to: "rect";  relative: 0.05 0.2;}
+                               rel2 {to: "rect";  relative: 0.45 0.8;}
+                       }
+
+               }
+
+               part
+               {
+                       name: "swl.bt_right";
+                       type: SWALLOW;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               visible: 1;
+                               rel1{to: "rect"; relative: 0.55 0.2;}
+                               rel2{to: "rect"; relative: 0.95 0.8;}
+
+                       }
+
+               }
+               part
+               {
+                       name: "underline";
+                       type: RECT;
+                       scale: 1;
+                       description
+                       {
+                               state: "default" 0.0;
+                               min: 0 3;
+                               fixed: 1 1;
+                               rel1 {to: "rect";  relative: 0.0 1.0; }
+                               rel2 {to: "rect";  relative: 1.0 1.0; }
+                               align:  0.5 1.0;
+                               color: 0 0 0 50;
+                       }
+               }
+       }
+}
+
diff --git a/composer/data/composer_edc/white_theme_composer.edc b/composer/data/composer_edc/white_theme_composer.edc
new file mode 100755 (executable)
index 0000000..d93e800
--- /dev/null
@@ -0,0 +1,18 @@
+
+#include "msg-ui-composer-data.edc"
+
+#define IMG_BODY_INPUT_FIELD "M01_search_input_field_bg.png"
+#define BORDER_BODY_INPUT_FIELD 3 3 3 3
+
+#define COLOR_SUBJECT_GUIDE_TEXT 163 157 138 255
+
+collections
+{
+
+#include "msg-ui-composer-main.edc"
+#include "msg-ui-composer-body.edc"
+#include "msg-ui-composer-recipient.edc"
+
+#include "msg-ui-composer-custom.edc"
+
+}
diff --git a/composer/include/msg-ui-composer-body-callback.h b/composer/include/msg-ui-composer-body-callback.h
new file mode 100755 (executable)
index 0000000..969a18f
--- /dev/null
@@ -0,0 +1,27 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://www.tizenopensource.org/license\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+#ifndef MSG_UI_COMPOSER_BODY_CALLBACK_H_\r
+#define MSG_UI_COMPOSER_BODY_CALLBACK_H_\r
+\r
+#include <Elementary.h>\r
+\r
+\r
+void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);\r
+void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);\r
+void msg_ui_composer_body_entry_focused_cb(void *data, Evas_Object *obj, void *event_info);\r
+\r
+#endif /* MSG_UI_COMPOSER_BODY_CALLBACK_H_ */\r
diff --git a/composer/include/msg-ui-composer-body-page.h b/composer/include/msg-ui-composer-body-page.h
new file mode 100755 (executable)
index 0000000..4259caa
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_BODY_PAGE_H_
+#define __MSG_UI_COMPOSER_BODY_PAGE_H_
+
+/* includes*/
+#include "msg-ui-composer-data.h"
+#include <Elementary.h>
+
+/* defines*/
+
+/* enum types*/
+
+/* structures*/
+
+/* function prototypes*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_sms_body(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_sms_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page);
+
+void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd);
+int msg_ui_composer_body_entry_char_count(void *data, const unsigned  char *body_ucs2_text, int ucs2_len, int *char_count);
+
+
+
+#endif                         /* __MSG_UI_COMPOSER_BODY_PAGE_H_ */
diff --git a/composer/include/msg-ui-composer-body.h b/composer/include/msg-ui-composer-body.h
new file mode 100755 (executable)
index 0000000..aeee88f
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_BODY_H_
+#define __MSG_UI_COMPOSER_BODY_H_
+
+/* includes*/
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-body-page.h"
+#include <Elementary.h>
+
+
+/* function prototypes*/
+Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_text(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, const char *body_text, int nPage);
+
+void msg_ui_composer_body_focus_set(MSG_COMPOSER_VIEW_DATA_S *cd, int nPage);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S* cd, int64 *size);
+
+void msg_ui_composer_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_data(MSG_COMPOSER_VIEW_DATA_S *cd);
+#endif/*__MSG_UI_COMPOSER_BODY_H_*/
diff --git a/composer/include/msg-ui-composer-bubble.h b/composer/include/msg-ui-composer-bubble.h
new file mode 100755 (executable)
index 0000000..d48a08d
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_BUBBLE_H__
+#define __MSG_UI_COMPOSER_BUBBLE_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib.h>
+
+#include <MsgStorageTypes.h>
+#include <MsgTransportTypes.h>
+#include <MapiControl.h>
+#include <MapiStorage.h>
+#include <MapiTransport.h>
+#include <MapiMessage.h>
+
+#include <libintl.h>
+#include <bundle.h>
+#include <appcore-efl.h>
+#include <Ecore.h>
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+#include <time.h>
+
+#include "msg-ui-util.h"
+#include "msg-ui-common-utility.h"
+
+#include <contacts-svc.h>
+#include <contacts-ug.h>
+
+#define MSG_BUBBLE_SIM_MSG_ICON                IMGDIR"/07_message_sim.png"
+#define MSG_BUBBLE_ATTACH_ICON         IMGDIR"/Seven_IM_clip_nor.png"
+
+#define MSG_VCONF_KEY_SELECTED_THEME   "db/setting/selected_theme"
+
+/* STYLE for genlist and entry */
+#define MSG_BUBBLE_STYLE_SENT  "sentmessage"
+#define MSG_BUBBLE_STYLE_RECV  "readmessage"
+
+#define MSG_BUBBLE_CONTENT_H (653)
+#define MSG_BUBBLE_IMG_MAX_W (75)  //FIXME :: It should be fixed at Entry.edc
+
+#define MSG_BUBBLE_CONTROLBAR_ITEM_NUM (4)
+
+typedef enum {
+       BUBBLE_NORMAL_VIEW = 0,
+       BUBBLE_EDIT_VIEW,
+       BUBBLE_UNLOAD_VIEW,
+} BubbleViewMode;
+
+typedef enum {
+       BUBBLE_UG_START = 0,
+       BUBBLE_UG_PAUSE,
+       BUBBLE_UG_RESUME,
+       BUBBLE_UG_DESTROY,
+} BubbleUGState;
+
+typedef enum {
+       SCROLL_DEFAULT = 0,
+       SCROLL_FOCUS_IN,
+       SCROLL_FOCUS_OUT,
+       SCROLL_FOCUS_OTHER,
+} BubbleScrollFocus;
+
+typedef enum {
+       WORD_TYPE_NONE = 0x00,
+       WORD_TYPE_URL,
+       WORD_TYPE_URL_WITH_PROTC,
+       WORD_TYPE_NUM,
+       WORD_TYPE_EMAIL
+} BubbleTextType;
+
+typedef enum {
+       MSG_BOX_PACK_START = 0,
+       MSG_BOX_PACK_END,
+       MSG_BOX_PACK_BEFORE,
+       MSG_BOX_PACK_AFTER,
+} MsgBoxPackType;
+
+typedef struct {
+       MSG_MESSAGE_ID_T msgId;
+       int msgType;
+       MSG_STORAGE_ID_T storageId;
+       time_t *msgTime;
+       char displayDate[DEF_BUF_LEN_S];
+       MSG_NETWORK_STATUS_T networkStatus;
+       bool bRead;
+       bool bProtected;
+       int direction;
+       char msgText[DEF_MAX_MSG_TEXT_LEN+1];
+
+       Evas_Object *ly;
+       Evas_Object *entry;
+       Evas_Object *chk;
+       Eina_Bool isCheck;
+
+} MSG_APP_CONV_DATA_S, *PMSG_APP_CONV_DATA_S;
+
+typedef struct {
+       PMSG_APP_CONV_DATA_S add_item;
+       Evas_Object *rel_obj;
+       MsgBoxPackType pack_type;
+}BUBBLE_PACK_INFO;
+
+typedef struct _MSG_BUBBLE_DATA {
+       Evas_Object *layout_main;
+       Evas_Object *scrl;
+       Evas_Object *toolbar;
+       Evas_Object *box;
+
+       Elm_Object_Item *toolbar_item[MSG_BUBBLE_CONTROLBAR_ITEM_NUM];
+
+       BubbleViewMode viewmode;
+       BubbleUGState ug_state;
+
+       Evas_Object *parent_layout;
+       Evas_Object *bubble_layout;
+       Evas_Object *sel_all_ly;
+       Evas_Object *sel_all_box;
+       Evas_Object *noc_ly;
+
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       Evas_Object *progresslabel;
+
+       Evas_Object *select_info;
+       Evas_Object *selectioninfo_layout;
+
+       Eina_List *bubble_list;
+       Eina_List *realized_list;
+       Eina_List *chk_list;
+       Eina_List *added_list;
+
+       Eina_Bool sel_all_checked;
+
+       char *time_12h_ptn;
+       char *time_24h_ptn;
+       char *date_ptn;
+       msg_time_format time_fmt;
+       char locale[DEF_BUF_LEN];
+       int noti_fd;
+
+       Ecore_Animator *load_animator;
+       Ecore_Animator *add_animator;
+       Ecore_Idler *scroll_idler;
+       Ecore_Idler *add_idler;
+       Ecore_Idler *resend_idler;
+       Ecore_Idler *retrieve_idler;
+       Ecore_Idler *conformant_idler;
+       Ecore_Thread *del_thread;
+
+       MSG_HANDLE_T msgHandle;
+       MSG_THREAD_ID_T threadId;
+       MSG_CONTACT_ID_T contactId;
+       char threadAddr[DEF_THREAD_ADDR_LEN+1];
+       char threadName[DEF_THREAD_NAME_LEN+1];
+
+       int bubble_count;
+       int bubble_index;
+       int added_count;
+       int msg_type;                   /* type of the latest message in the selected converstaion list*/
+
+       int check_cnt;
+       int del_index;
+       void *callback_data;
+} MSG_BUBBLE_DATA, *PMSG_BUBBLE_DATA;
+
+
+/* FUNCTIONS */
+PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(MSG_HANDLE_T msgHandle, void *callback_data);
+void msg_ui_bubble_deinit_bubble_data(void *data);
+
+void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b);
+void msg_ui_bubble_start_bubble_list(PMSG_BUBBLE_DATA bubble_data);
+void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data);
+
+Evas_Object *msg_ui_bubble_create_controlbar(Evas_Object *parent, void *user_data);
+Evas_Object *msg_ui_bubble_create_view(Evas_Object *parent, void *user_data);
+void msg_ui_bubble_start_view(PMSG_BUBBLE_DATA bubble_data);
+void msg_ui_bubble_add_normal_control_item(void *user_data);
+
+void msg_ui_bubble_reg_bubble_cb_func(PMSG_BUBBLE_DATA pData);
+PMSG_BUBBLE_DATA msg_ui_bubble_get_bubble_data(void);
+
+void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data);
+Eina_Bool msg_ui_bubble_item_load_cb(void *data);
+void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data);
+void msg_ui_bubble_list_data_update(PMSG_BUBBLE_DATA bubble_data);
+void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg);
+Eina_Bool msg_ui_bubble_item_add_cb(void *data);
+void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg);
+void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg);
+
+void msg_ui_bubble_change_normal_navi_control(PMSG_BUBBLE_DATA pData);
+void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T type, MSG_MSGID_LIST_S *pMsgIdList, void *user_param);
+void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_forward_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_move_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_item_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_list_checked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_timezone_change_cb(void *data);
+void msg_ui_bubble_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_scroll_drag_start_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_launch_voice_call(const char *call_num);
+char *msg_ui_bubble_get_trimmed_number(const char *org_num);
+void msg_ui_bubble_launch_add_to_contact_ug(PMSG_BUBBLE_DATA pData);
+void msg_ui_bubble_launch_contact_list_ug(PMSG_BUBBLE_DATA pData, int type, const char *str);
+void msg_ui_bubble_launch_contact_detail_ug(PMSG_BUBBLE_DATA pData, int ct_id);
+void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg);
+void msg_ui_bubble_show_notify_with_timeout(PMSG_BUBBLE_DATA pData, char *msg, double timeout);
+Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, int count);
+
+void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData);
+void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData);
+void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData);
+void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData);
+
+
+#endif
diff --git a/composer/include/msg-ui-composer-common.h b/composer/include/msg-ui-composer-common.h
new file mode 100755 (executable)
index 0000000..9e0def0
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_COMPOSER_COMMON_H__
+#define __MSG_COMPOSER_COMMON_H__
+
+#include "msg-ui-composer-data.h"
+
+typedef enum {
+       COMPOSER_TICKERNOTI_UNKNOWN             = 0,
+       COMPOSER_TICKERNOTI_COUNT_MAX           = 1,
+       COMPOSER_TICKERNOTI_DUP_RECP            = 2,
+       COMPOSER_TICKERNOTI_INVALID_RECP        = 3,
+       COMPOSER_TICKERNOTI_CHANGED_SMS         = 4,
+} COMPOSER_TICKERNOTI_TYPE_E;
+
+/*layout*/
+char *msg_ui_composer_edj_get(MSG_COMPOSER_VIEW_DATA_S *cd);
+Evas_Object *msg_ui_composer_load_edj(Evas_Object *parent, const char *edj_file, const char *group);
+Evas_Object *msg_ui_composer_layout_create(Evas_Object *parent, bool indicator);
+Evas_Object *msg_ui_composer_conformant_create(Evas_Object *parent_win, Evas_Object *inner);
+Evas_Object *msg_ui_composer_bg_create(Evas_Object *parent);
+
+/*file*/
+int64 msg_composer_get_file_size(const char *path);
+char *msg_common_get_file_ext(const char *a_pszfile_name);
+
+void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+/*focus*/
+Eina_Bool msg_ui_composer_last_focus_load(void *data);
+Evas_Object *msg_ui_composer_last_body_entry_get(void *data);
+void msg_ui_composer_last_focused_entry_set(void *data, Evas_Object *entry);
+Evas_Object *msg_ui_composer_last_focused_entry_get(void *data);
+
+void bundle_send_to_result(void *data, char *key, char *val);
+bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_common_play_vibration();
+
+void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, char **text);
+int msg_ui_composer_convert_UTF8ToUCS2(unsigned char *pDestText, int maxLength, const char *pSrcText, int srcTextLen);
+void msg_ui_composer_common_tickernoti(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_TICKERNOTI_TYPE_E tickertype);
+void msg_ui_composer_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value);
+
+int msg_ui_composer_thread_id_get(MSG_HANDLE_T msg_handle, const char *recipient);
+char *msg_ui_composer_thread_recipient_get(MSG_HANDLE_T msg_handle, int inp_tid);
+
+void msg_ui_composer_evas_object_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info);
+#endif/*__MSG_COMPOSER_COMMON_H__*/
diff --git a/composer/include/msg-ui-composer-core.h b/composer/include/msg-ui-composer-core.h
new file mode 100755 (executable)
index 0000000..d027c8c
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_CORE_H_
+#define __MSG_UI_COMPOSER_CORE_H_
+
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-message.h"
+#include <MsgSettingTypes.h>
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_open_msg_handle(MSG_HANDLE_T *msgHandle);
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_close_msg_handle(MSG_HANDLE_T *msgHandle);
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_create_new_message(msg_message_t *msgInfo);
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_release_message(msg_message_t msgInfo);
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_message(MSG_HANDLE_T msgHandle, msg_message_t msgInfo, int msgID, MSG_SENDINGOPT_S *sendOpt);
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_msg_get_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt);
+COMPOSER_MSG_TYPE_E msg_ui_comp_core_get_msg_type(msg_message_t msg_data);
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_sms_body(msg_message_t msgInfo, char **sms_text);
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_message_type(msg_message_t msgInfo, COMPOSER_MSG_TYPE_E comp_msg_type);
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_add_recipient(msg_message_t msgInfo, char *number, COMPOSER_RECP_TYPE_E recp_type);
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_sms_body(msg_message_t msgInfo, char *body_text);
+
+
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_send_sms(MSG_HANDLE_T msg_handle, MSG_REQUEST_S *req);
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_reg_sent_status_cb(MSG_HANDLE_T msg_handle, void *cbfunc, void *cbdata);
+
+#endif                         /* __MSG_UI_COMPOSER_CORE_H_ */
diff --git a/composer/include/msg-ui-composer-data.h b/composer/include/msg-ui-composer-data.h
new file mode 100755 (executable)
index 0000000..a3211fa
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_DATA_H_
+#define __MSG_UI_COMPOSER_DATA_H_
+
+/***********************
+ *  includes
+ ************************/
+#include <MsgTypes.h>
+#include <MsgMmsTypes.h>
+
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <X11/Xlib.h>
+#include <glib-object.h>
+#include <glib.h>
+
+#include <ui-gadget-module.h>
+
+#include <contacts-svc.h>
+#include <assert.h>
+
+#include "msg-ui-util.h"
+#include "msg-ui-composer-string.h"
+#include "msg-ui-composer-res.h"
+#include "msg-ui-common-utility.h"
+#include "msg-ui-composer-bubble.h"
+
+/*********************
+ * defines
+ ************************/
+
+#if !defined(__TYPEDEF_INT64__)
+#define __TYPEDEF_INT64__
+typedef long long int64;
+#endif
+
+#define TO_FIELD_LABEL_SIZE_MAX        512
+#define COMPARE_STRING_NUM 8
+
+#ifndef MAX_TO_ADDRESS_CNT
+#define MAX_TO_ADDRESS_CNT (10)
+#endif
+
+#define COMPOSER_RECIPIENT_COUNT_MAX   MAX_TO_ADDRESS_CNT
+
+#ifndef MAX_PHONE_NUMBER_LEN
+#define MAX_PHONE_NUMBER_LEN (20)
+#endif
+
+#define COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MAX MAX_PHONE_NUMBER_LEN
+#define COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MIN (3)
+
+#ifndef MAX_ADDRESS_VAL_LEN
+#define MAX_ADDRESS_VAL_LEN (254)
+#endif
+
+#define COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX MAX_ADDRESS_VAL_LEN
+
+#define COMPOSER_TEXT_MAX_CHAR (1530)
+
+#define COMPOSER_MAX_PAGE                      (2)
+#define COMPOSER_FILEPATH_LEN_MAX      (1024)
+#define COMPOSER_FILENAME_LEN_MAX      (256)
+
+#define COMPOSER_COMMON_EXT_MAX_LENGTH         (7)
+#define COMPOSER_COMMON_MIME_MAX_LEN           (64)
+
+#define COMPOSER_BODY_SMS_TEXT_LEN_MAX (1530)
+
+#define COMPOSER_SMS_UNICODE_MAX_LEN   (70)
+#define COMPOSER_SMS_GSM7_MAX_LEN              (160)
+
+#define COMPOSER_CMS_UNICODE_MAX_LEN   (67)
+#define COMPOSER_CMS_GSM7_MAX_LEN              (153)
+
+// temporary 10 pages, it needs to be changed by operator spec.
+#define COMPOSER_CMS_MAX_PAGE                  (10)
+
+#define COMPOSER_TMP_PATH "/tmp"
+
+#define MSGC_1KB       1024
+
+
+
+/*********************
+ * enum types
+ ************************/
+typedef enum {
+       MSG_UG_MODE_FULL_COMPOSER,
+       MSG_UG_MODE_BUBBLE_COMPOSER,
+       MSG_UG_MODE_ONLY_COMPOSER,      /*In this mode Composer should destroy after send message*/
+       MSG_UG_MODE_MAX,
+} MSG_UG_MODE_E;
+
+typedef enum {
+       COMPOSER_RETURN_SUCCESS = 0,
+       COMPOSER_RETURN_FAIL                                            = -1,
+       COMPOSER_RETURN_NULL_POINTER                            = -2,
+       COMPOSER_RETURN_NO_SIM                                          = -3,
+       COMPOSER_RETURN_HANDLE_NOT_EXIST                        = -4,
+       COMPOSER_RETURN_MAX_PAGE                                        = -5,
+       COMPOSER_RETURN_INVALID_MSG_TYPE                        = -6,
+       COMPOSER_RETURN_INVALID_PAGE                            = -7,
+       COMPOSER_RETURN_INVALID_MEDIA_TYPE                      = -8,
+       COMPOSER_RETURN_CREATION_MODE_FAIL                      = -9,
+       COMPOSER_RETURN_ATTACHMENT_ALREADY_EXIST        = -10,
+       COMPOSER_RETURN_LOW_RESOLUTION                          = -11,
+       COMPOSER_RETURN_HIGH_RESOLUTION                         = -12,
+       COMPOSER_RETURN_NONSTANDARD_FILE                        = -13,
+       COMPOSER_RETURN_RECIPIENT_INVALID                       = -14,
+       COMPOSER_RETURN_RECIPIENT_COUNTMAX                      = -15,
+       COMPOSER_RETURN_RECIPIENT_DUPLICATE                     = -16,
+       COMPOSER_RETURN_MSG_SIZE_OVER                           = -17,
+       COMPOSER_RETURN_RESIZE_IMAGE                            = -18,
+       COMPOSER_RETURN_OVERSIZE_FILE                           = -19,
+} COMPOSER_RETURN_TYPE_E;
+
+typedef enum {
+       COMPOSER_MSG_TYPE_INVALID,
+       COMPOSER_MSG_TYPE_SMS,
+} COMPOSER_MSG_TYPE_E;
+
+typedef enum {
+       COMPOSER_RECP_TYPE_UNKOWN,
+       COMPOSER_RECP_TYPE_TO,
+       COMPOSER_RECP_TYPE_CC,
+       COMPOSER_RECP_TYPE_BCC,
+       COMPOSER_RECP_TYPE_FROM,
+       COMPOSER_RECP_TYPE_MAX,
+} COMPOSER_RECP_TYPE_E;
+
+typedef enum {
+       COMPOSER_STATE_TYPE_INVALID = 0,
+       COMPOSER_STATE_TYPE_CREATE,
+       COMPOSER_STATE_TYPE_RUNNING,
+       COMPOSER_STATE_TYPE_PAUSE,
+       COMPOSER_STATE_TYPE_DESTROY,
+       COMPOSER_STATE_TYPE_MAX,
+} COMPOSER_STATE_TYPE_E;
+
+typedef enum {
+       COMPOSER_STATUS_POPUP_BUTTON_NONE = 0,
+       COMPOSER_STATUS_POPUP_BUTTON_OK,
+       COMPOSER_STATUS_POPUP_BUTTON_CLOSE,
+       COMPOSER_STATUS_POPUP_BUTTON_OK_CANCEL,
+       COMPOSER_STATUS_POPUP_BUTTON_MAX,
+} COMPOSER_POPUP_BUTTON_TYPE_E;
+
+typedef enum {
+       COMPOSER_FOCUS_RECIPIENT = 0,
+       COMPOSER_FOCUS_BODY,
+       COMPOSER_FOCUS_MAX,
+} COMPOSER_FOCUS_E;
+
+typedef enum {
+       COMPOSER_RECP_ADDR_INVALID,
+       COMPOSER_RECP_ADDR_VALID_NUMBER,
+       COMPOSER_RECP_ADDR_VALID_EMAIL,
+} COMPOSER_RECP_ADDR_E;
+
+typedef enum {
+       COMPOSER_CHAR_ENCODE_GSM7 = 0,
+       COMPOSER_CHAR_ENCODE_UNICODE,
+       COMPOSER_CHAR_ENCODE_MAX,
+} COMPOSER_CHAR_ENCODE_E;
+
+typedef enum {
+       COMPOSER_PREDICTSEARCH_NONE = 0,
+       COMPOSER_PREDICTSEARCH_NAME,
+       COMPOSER_PREDICTSEARCH_NUMBER,
+       COMPOSER_PREDICTSEARCH_LOG,
+       COMPOSER_PREDICTSEARCH_EMAIL,
+       COMPOSER_PREDICTSEARCH_END,
+} COMPOSER_PREDICTSEARCH_STATE_E;
+
+/******************************
+ * structures
+ *******************************/
+/*
+Used MBE's data && PredictSearch
+*/
+typedef struct _recipient_item_s {
+       COMPOSER_RECP_ADDR_E type;
+       int index;
+       char recipient[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
+       char display_name[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
+       char image_path[COMPOSER_FILEPATH_LEN_MAX+1];
+} RECIPIENT_ITEM_S;
+
+typedef struct _recipient_s {
+       const char *name;
+       void *cd;
+       int mode;
+       Evas_Object *parent;
+       Evas_Object *bx_main;
+       Evas_Object *sc;
+       Evas_Object *ly_to;
+       Evas_Object *mbe;
+       Evas_Object *ly_bt;
+       Evas_Object *popup_change_number;
+
+       Ecore_Idler *scroll_down_idler;
+} RECIPIENT_S;
+
+typedef struct _predictsearch_s {
+       const char *name;
+       void *cd;
+       Evas_Object *parent;
+
+       Evas_Object *glist_ps;
+       char txt_ps_keyword[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
+       char txt_ps_reqkeyword[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
+       Eina_Bool IsShow;
+       Elm_Genlist_Item_Class itc_1line;
+       Elm_Genlist_Item_Class itc_2line;
+
+       Ecore_Idler *idler_ps;
+       Ecore_Timer *timer_ps;
+       COMPOSER_PREDICTSEARCH_STATE_E state;
+       CTSiter *iter_ps;
+       int count;
+} PREDICTSEARCH_S;
+
+typedef struct _text_info {
+       COMPOSER_CHAR_ENCODE_E encode;
+       int char_count;
+} text_info_s;
+
+typedef struct _MSG_COMPOSER_BODY_PAGE_S {
+       Evas_Object *layout;
+       Evas_Object *page_box;
+       Evas_Object *entry;
+       text_info_s text_info;
+} MSG_COMPOSER_BODY_PAGE_S;
+
+typedef struct _MSG_COMPOSER_BODY_S {
+       int page_count;
+       Eina_List *page_list;
+
+       int region_order;
+} MSG_COMPOSER_BODY_S;
+
+typedef struct _MSG_COMPOSER_DATA_S {
+       /*ug data & callback*/
+       struct ui_gadget *ug;
+       struct ug_cbs cbs;
+       struct ui_gadget *loaded_ug;
+
+       /*composer mode & state*/
+       MSG_UG_MODE_E msg_ug_mode;
+       COMPOSER_STATE_TYPE_E state;
+       COMPOSER_MSG_TYPE_E msg_type;
+       bundle *msg_bundle;
+       bool isLoad;
+       bool isFullview;
+       bool isMsgInternal;
+       bool sending_success;
+
+       bool send_button_clicked;
+       bool add_menu_clicked;
+
+       bool destroy_req;
+       bool loaded_aul;
+       bool send_button_is_show;
+
+       int current_theme;
+       int current_edit_entry;
+       int first_focus;
+       char recipient_number[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
+       char *working_path;
+
+       /*message handler*/
+       MSG_HANDLE_T msg_handle;
+
+       /*module data*/
+       MSG_COMPOSER_BODY_S body_data;
+
+       RECIPIENT_ITEM_S recipient_frame;
+
+       RECIPIENT_S *recipient;
+       PREDICTSEARCH_S *predictsearch;
+
+       /*Evas Object*/
+       Evas_Object *main_window;
+       Evas_Object *base;
+       Evas_Object *navi_bar;
+       Evas_Object *back_btn;
+       Elm_Object_Item *toollbar_item_top[4];
+       Elm_Object_Item *navi_it;
+
+       Evas_Object *content_layout;
+       Evas_Object *bg;
+       Evas_Object *ly_body;
+       Evas_Object *ly_recipient;
+       Evas_Object *conform;
+       Evas_Object *popup_conform;
+       Evas_Object *send_button;
+
+       Evas_Object *body_scroll;
+       Evas_Object *body_box;
+       Evas_Object *progress_popup;
+       Evas_Object *popup_end;
+       Eina_List *popup_list;
+
+       Evas_Object *noti;
+       Evas_Object *last_focus_entry;
+       MSG_BUBBLE_DATA *bubble_data; // For bubble data structure
+} MSG_COMPOSER_VIEW_DATA_S;
+
+#endif                         /* __MSG_UI_COMPOSER_DATA_H_ */
diff --git a/composer/include/msg-ui-composer-external.h b/composer/include/msg-ui-composer-external.h
new file mode 100755 (executable)
index 0000000..0729ec8
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_COMPOSER_EXTERNAL_H__
+#define __MSG_COMPOSER_EXTERNAL_H__
+
+#include "msg-ui-composer-data.h"
+
+#define TXT_UG_NAME_LOG                                "phonelog-efl"
+#define TXT_UG_NAME_CONTACT                    "contacts-list-efl"
+
+typedef enum {
+       COMPOSER_EXT_TYPE_LOG,
+       COMPOSER_EXT_TYPE_CONTACTLIST,
+       COMPOSER_EXT_TYPE_MAX = 0xff,
+} COMPOSER_EXT_TYPE_E;
+
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_external_call(MSG_COMPOSER_VIEW_DATA_S *cd,
+                                                                                                               COMPOSER_EXT_TYPE_E ext_type,
+                                                                                                               void *reserved);
+
+struct ui_gadget *msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b);
+struct ui_gadget *msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id);
+struct ui_gadget *msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int type, const char *str);
+
+#endif/*__MSG_COMPOSER_EXTERNAL_H__*/
diff --git a/composer/include/msg-ui-composer-main.h b/composer/include/msg-ui-composer-main.h
new file mode 100755 (executable)
index 0000000..20f0017
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_MAIN_H_
+#define __MSG_UI_COMPOSER_MAIN_H_
+
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-util.h"
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_destroy_request(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_change_bubble_view(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_change_composer_view(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, const char *address, const char *name, int contact_id, int thread_id);
+void msg_ui_composer_editable_set(MSG_COMPOSER_VIEW_DATA_S *cd, Eina_Bool editable);
+void msg_ui_composer_bubble_del_all(void *data, bundle *b);
+void msg_ui_bubble_composer_navi_title_set(void *data);
+#endif/*__MSG_UI_COMPOSER_MAIN_H_*/
diff --git a/composer/include/msg-ui-composer-message-data.h b/composer/include/msg-ui-composer-message-data.h
new file mode 100755 (executable)
index 0000000..9da224a
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 _MSG_UI_COMPOSER_MESSAGE_DATA_H_
+#define _MSG_UI_COMPOSER_MESSAGE_DATA_H_
+
+#include "msg-ui-composer-data.h"
+#include <time.h>
+#include <glib.h>
+
+
+/*********************
+ *
+ *     structures
+ *
+ *************** *******/
+typedef struct _MSG_COMPOSER_SMS_DATA_S {
+       char *body_text;
+       int body_length;
+} MSG_COMP_SMS_DATA_S;
+
+typedef struct _MSG_COMPOSER_MESSAGE_DATA_S {
+       msg_message_t msgInfo;
+
+       GSList *recp_list;
+       COMPOSER_MSG_TYPE_E msg_type;
+       MSG_COMP_SMS_DATA_S sms_data;
+} MSG_COMP_MSG_DATA_S;
+
+#endif                         /* _MSG_UI_COMPOSER_MESSAGE_DATA_H_ */
diff --git a/composer/include/msg-ui-composer-message.h b/composer/include/msg-ui-composer-message.h
new file mode 100755 (executable)
index 0000000..7c7feeb
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_MSG_H_
+#define        __MSG_UI_COMPOSER_MSG_H_
+
+#include "msg-ui-composer-data.h"
+#include <MsgSettingTypes.h>
+
+/******************************
+ * structures
+ *******************************/
+enum __COMPOSER_CONFIG_TYPE_E {
+       COMPOSER_CONFIG_TYPE_GENERAL = MSG_GENERAL_OPT,
+       COMPOSER_CONFIG_TYPE_SMS_SEND = MSG_SMS_SENDOPT,
+       COMPOSER_CONFIG_TYPE_SMSC_LIST = MSG_SMSC_LIST,
+       COMPOSER_CONFIG_TYPE_PUSHMSG = MSG_PUSHMSG_OPT,
+       COMPOSER_CONFIG_TYPE_CBMSG = MSG_CBMSG_OPT,
+};
+
+
+/*****************************
+ *     structures
+ ***************************/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_init();
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_destroy();
+COMPOSER_RETURN_TYPE_E msg_ui_composer_create_new_message();
+COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message();
+
+/* Msg type*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_E msg_type);
+
+/* Recipient*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_add_address(char *number);
+
+/* SMS*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_sms_body(char *body_text);
+
+/* save send*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message();
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_handle);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_loaded_data(void *composer_data);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(MSG_HANDLE_T msg_handle, int msgID);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt, int type);
+
+#endif /*__MSG_UI_COMPOSER_MSG_H_*/
diff --git a/composer/include/msg-ui-composer-popup.h b/composer/include/msg-ui-composer-popup.h
new file mode 100755 (executable)
index 0000000..b2be418
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_POPUP_H_
+#define __MSG_UI_COMPOSER_POPUP_H_
+
+/* includes*/
+#include "msg-ui-composer-data.h"
+#include <Elementary.h>
+
+/* defines*/
+#define COMPOSER_STATUS_POPUP_DEFAULT_TIME     2
+
+/* enum types*/
+typedef enum _msgc_notify_orient
+{
+       MSGC_NOTIFY_ORIENT_TOP          = ELM_NOTIFY_ORIENT_TOP , /**< Notify should appear in the top of parent, default */
+       MSGC_NOTIFY_ORIENT_BOTTOM       = ELM_NOTIFY_ORIENT_BOTTOM, /**< Notify should appear in the bottom of parent */
+       MSGC_NOTIFY_ORIENT_LAST         = ELM_NOTIFY_ORIENT_LAST /**< Sentinel value, @b don't use */
+} MSGC_NOTIFY_ORIENT;
+
+/* function prototypes*/
+Evas_Object *msg_ui_composer_notify_show(Evas_Object *parent, const char *msg, int time, MSGC_NOTIFY_ORIENT orient, bool is_horizon_mode);
+Evas_Object *msg_ui_composer_status_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg, int time);
+Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char * title, Evas_Object * list);
+Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg);
+
+void msg_ui_composer_status_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
+
+Eina_Bool msg_ui_composer_popup_exist(void * data);
+void msg_ui_composer_popup_focus(void * data);
+void msg_ui_composer_popup_delete_all(void *data);
+
+#endif /* __MSG_UI_COMPOSER_POPUP_H_ */
diff --git a/composer/include/msg-ui-composer-predictsearch.h b/composer/include/msg-ui-composer-predictsearch.h
new file mode 100755 (executable)
index 0000000..6367fed
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_PREDICTSEARCH_H_
+#define __MSG_UI_COMPOSER_PREDICTSEARCH_H_
+
+/* includes*/
+#include "msg-ui-composer-data.h"
+#include <Elementary.h>
+
+/* defines*/
+#define COMPOSER_PS_TIMER 0.4
+#define COMPOSER_PSLIST_COUNT_AT_TIME 20
+
+/* enum types*/
+
+/* structures*/
+
+/* function prototypes*/
+Evas_Object *msg_ui_composer_predictsearch_list_create(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_predictsearch_list_delete(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_predictsearch_request(MSG_COMPOSER_VIEW_DATA_S *cd, const char *str);
+void msg_ui_composer_predictsearch_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+#endif                         /* __MSG_UI_COMPOSER_PREDICTSEARCH_H_ */
diff --git a/composer/include/msg-ui-composer-recipient-callback.h b/composer/include/msg-ui-composer-recipient-callback.h
new file mode 100755 (executable)
index 0000000..5a5f9be
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_
+#define __MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_
+
+/* includes*/
+#include "msg-ui-composer-data.h"
+#include <Elementary.h>
+
+
+/*function prototypes*/
+void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_recipient_multibuttonentry_focused_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_recipient_multibuttonentry_unfocused_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_recipient_multibuttonentry_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_recipient_multibuttonentry_item_selected_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_recipient_multibuttonentry_item_added_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_recipient_multibuttonentry_item_deleted_cb(void *data, Evas_Object *obj, void *event_info);
+Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, const char *item_label, void *item_data, void *data);
+#endif/*__MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_*/
diff --git a/composer/include/msg-ui-composer-recipient.h b/composer/include/msg-ui-composer-recipient.h
new file mode 100755 (executable)
index 0000000..abc32d8
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_RECIPIENT_H_
+#define __MSG_UI_COMPOSER_RECIPIENT_H_
+
+/* includes*/
+#include <Elementary.h>
+#include <MsgTypes.h>
+#include "msg-ui-composer-data.h"
+
+
+RECIPIENT_S *msg_ui_composer_recipient_create(Evas_Object *p, int mode, void *data);
+void msg_ui_composer_recipient_delete(RECIPIENT_S *rd);
+void msg_ui_composer_recipient_update(RECIPIENT_S *rd);
+void msg_ui_composer_recipient_clear(RECIPIENT_S *rd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_append(RECIPIENT_S *rd, const char *recipient, int index);
+
+void msg_ui_composer_bt_show(RECIPIENT_S *rd);
+void msg_ui_composer_bt_hide(RECIPIENT_S *rd);
+
+const char *msg_ui_composer_recipient_entry_text_get(RECIPIENT_S *rd);
+void msg_ui_composer_recipient_entry_text_set(RECIPIENT_S *rd, const char *str);
+
+void msg_ui_composer_recipient_focus_set(RECIPIENT_S *rd);
+
+Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_read_data(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient(MSG_COMPOSER_VIEW_DATA_S *cd, const char * recipient);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_duplicate_check(RECIPIENT_S *rd, const char *recipient);
+
+RECIPIENT_ITEM_S *msg_ui_composer_recipient_item_make_by_string(const char *str);
+COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_type_get(const char *recipient);
+
+
+int msg_ui_composer_recipient_count_get(RECIPIENT_S *rd);
+Eina_List *msg_ui_composer_recipient_invalid_recipient_list_get(RECIPIENT_S *rd);
+#endif/* __MSG_UI_COMPOSER_RECIPIENT_H_ */
diff --git a/composer/include/msg-ui-composer-res.h b/composer/include/msg-ui-composer-res.h
new file mode 100755 (executable)
index 0000000..1294582
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_RES_H_
+#define __MSG_UI_COMPOSER_RES_H_
+
+/************************
+ * defines
+ ************************/
+#ifndef PREFIX
+#define PREFIX "/opt/apps/" PKGNAME
+#endif
+
+#ifndef RESDIR
+#define RESDIR PREFIX "/res"
+#endif
+
+#ifndef EDJDIR
+#define EDJDIR  RESDIR "/edje"
+#endif
+
+#ifndef IMGDIR
+#define IMGDIR  RESDIR "/images"
+#endif
+
+#ifndef DATADIR
+#define DATADIR PREFIX "/data"
+#endif
+
+#define MSGC_UI_EDJ_PATH                                       EDJDIR
+#define MSGC_UI_IMG_PATH                                       IMGDIR
+#define MSGC_UI_DAT_PATH                                       DATADIR
+#define MSGC_UI_TMP_PATH                                       "/tmp"
+
+/*edj*/
+#define MSGC_UI_DEFAULT_EDJ                            MSGC_UI_EDJ_PATH "/composer.edj"
+#define MSGC_UI_WHITE_EDJ                                      MSGC_UI_EDJ_PATH "/white_theme_composer.edj"
+
+/*edj group*/
+#define MSGC_EDJ_GRP_SUBJECT_FIELD                     "composer/subject/main"
+#define MSGC_EDJ_GRP_RECIPIENT_TO_FIELD        "composer/recipient/to_field"
+#define MSGC_EDJ_GRP_RECIPIENT_BT_FIELD        "composer/recipient/bt_field"
+#define MSGC_EDJ_GRP_BODY_FIELD                        "composer/body/main"
+#define MSGC_EDJ_GRP_BODY_PAGE                                 "composer/body/page"
+#define MSGC_EDJ_GRP_BODY_SOUND                        "composer/body/media_sound"
+#define MSGC_EDJ_GRP_BODY_MEDIA                        "composer/body/media_default"
+#define MSGC_EDJ_GRP_ATTACHMENT                        "composer/attachment/main"
+#define MSGC_EDJ_GRP_CONTENT_LAYOUT            "composer/content/full"
+#define MSGC_EDJ_GRP_BUBBLE_LAYOUT                     "composer/content/bubble"
+
+/*Image*/
+#define MSGC_IMG_ATTACHMENT_ICON                       MSGC_UI_IMG_PATH "/60_myfiles_file_etc.png"
+#define MSGC_IMG_ATTACHMENT_MSWORD_ICON                MSGC_UI_IMG_PATH "/U01_icon_word.png"
+#define MSGC_IMG_ATTACHMENT_EXCEL_ICON         MSGC_UI_IMG_PATH "/U01_icon_excel.png"
+#define MSGC_IMG_ATTACHMENT_PPT_ICON           MSGC_UI_IMG_PATH "/U01_icon_ppt.png"
+#define MSGC_IMG_ATTACHMENT_PDF_ICON           MSGC_UI_IMG_PATH "/U01_icon_swf.png"
+#define MSGC_IMG_ATTACHMENT_SWF_ICON           MSGC_UI_IMG_PATH "/U01_icon_swf.png"
+#define MSGC_IMG_ATTACHMENT_TXT_ICON           MSGC_UI_IMG_PATH "/U01_icon_text.png"
+#define MSGC_IMG_ATTACHMENT_HTML_ICON          MSGC_UI_IMG_PATH "/U01_icon_html.png"
+#define MSGC_IMG_ATTACHMENT_DEL_ICON           MSGC_UI_IMG_PATH "/M01_icon_minus.png"
+#define MSGC_IMG_ATTACHMENT_DEL_ICON_W         MSGC_UI_IMG_PATH "/white/M01_icon_minus.png"
+
+#define MSGC_IMG_INSERT_ETC_ICON                       MSGC_UI_IMG_PATH "/60_myfiles_file_etc.png"
+#define MSGC_IMG_INSERT_DEL_ICON                       MSGC_UI_IMG_PATH "/M01_icon_minus.png"
+#define MSGC_IMG_INSERT_DEL_ICON_W                     MSGC_UI_IMG_PATH "/white/M01_icon_minus.png"
+
+#define MSGC_IMG_SUBJECT_DEL_ICON                      MSGC_UI_IMG_PATH "/M01_icon_minus.png"
+#define MSGC_IMG_SUBJECT_DEL_ICON_W                    MSGC_UI_IMG_PATH "/white/M01_icon_minus.png"
+
+#endif/* __MSG_UI_COMPOSER_RES_H_ */
diff --git a/composer/include/msg-ui-composer-string.h b/composer/include/msg-ui-composer-string.h
new file mode 100755 (executable)
index 0000000..115311a
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_UI_COMPOSER_STRING_H_
+#define __MSG_UI_COMPOSER_STRING_H_
+
+#define _SYSSTR(_id)                   dgettext("sys_string", _id)
+#define _MSGSTR(_id)                   dgettext("message", _id)
+
+/*Button*/
+#define MSGC_STR_BUTTON_OK                                             _SYSSTR("IDS_COM_SK_OK")
+#define MSGC_STR_BUTTON_CLOSE                                  _SYSSTR("IDS_COM_BODY_CLOSE")
+#define MSGC_STR_BUTTON_CANCEL                                 _SYSSTR("IDS_COM_SK_CANCEL")
+#define MSGC_STR_BUTTON_SEND                                   _SYSSTR("IDS_COM_SK_SEND_ABB")
+
+/*Other module*/
+#define MSGC_STR_SUBJECT                                               _SYSSTR("IDS_COM_BODY_SUBJECT")
+#define MSGC_STR_PREVIEW                                               _MSGSTR("IDS_MSGC_HEADER_PREVIEW")
+#define MSGC_STR_GALLERY                                               _SYSSTR("IDS_COM_BODY_GALLERY")
+#define MSGC_STR_TAKEPHOTO                                             _MSGSTR("IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO")
+#define MSGC_STR_RECVIDEO                                              _MSGSTR("IDS_MSGC_OPT_RECORD_VIDEO")
+#define MSGC_STR_RECSOUND                                              _MSGSTR("IDS_MSGC_OPT_CREATEITEMRECORDSOUND")
+#define MSGC_STR_MYFILE                                                _SYSSTR("IDS_COM_BODY_MY_FILES")
+#define MSGC_STR_CONTACT                                               _SYSSTR("IDS_COM_BODY_CONTACTS")
+#define MSGC_STR_CALENDAR                                              _SYSSTR("IDS_COM_BODY_CALENDAR")
+#define MSGC_STR_MEMO                                                  _SYSSTR("IDS_COM_BODY_MEMO")
+#define MSGC_STR_RECENT                                                _SYSSTR("IDS_COM_BUTTON_RECENT")
+
+/*Title*/
+#define MSGC_STR_ADD                                                   _SYSSTR("IDS_COM_ADD")
+#define MSGC_STR_NEW_MESSAGE                                   _SYSSTR("IDS_COM_POP_NEW_MESSAGE")
+#define MSGC_STR_TO                                                            _MSGSTR("IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO")
+#define MSGC_STR_ADD_RECIPIENT                                 _SYSSTR("IDS_COM_BODY_TAP_TO_ADD_RECIPIENT")
+
+/*Popup*/
+#define MSGC_STR_POP_ATTACHMENT_COUNT_MAX              _MSGSTR("IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS")
+#define MSGC_STR_POP_ATTACHMENT_SIZE_MAX_Q             _MSGSTR("IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q")
+#define MSGC_STR_POP_ATTACHMENT_SIZE_MAX               _MSGSTR("IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB")
+#define MSGC_STR_POP_NOADDRESS                                         _MSGSTR("IDS_MSGC_POP_NO_ADDRESS")
+#define MSGC_STR_POP_NOSIM                                             _MSGSTR("IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX")
+#define MSGC_STR_POP_UNABLE_SEND                               _MSGSTR("IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE")
+#define MSGC_STR_POP_DISCARD_Q                                         _MSGSTR("IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q")
+#define MSGC_STR_POP_PAGE_MAX                                  _MSGSTR("IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED")
+#define MSGC_STR_POP_UNABLE_PLAY_DURING_CALL   _MSGSTR("IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL")
+#define MSGC_STR_POP_RESTRICT                                  _MSGSTR("IDS_MSGF_BODY_CREATIONMODERESTRICTED")
+#define MSGC_STR_POP_FILE_EXIST                                        _MSGSTR("IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS")
+#define MSGC_STR_POP_FILE_IS_FORWARD_LOCK              _MSGSTR("IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED")
+#define MSGC_STR_POP_MDM_RESTICT_MODE                  _MSGSTR("IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES")
+#define MSGC_STR_POP_ADDING            _MSGSTR("IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING")
+
+/*Notify*/
+#define MSGC_STR_NOTI_RECIPIENT_MAX                    _MSGSTR("IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED")
+#define MSGC_STR_NOTI_RECIPIENT_DUP                    _MSGSTR("IDS_MSGC_BODY_DUPLICATED_RECIPIENT")
+#define MSGC_STR_NOTI_RECIPIENT_INVALID                        _MSGSTR("IDS_MSGF_BODY_INVALID_RECIPIENT")
+#define MSGC_STR_NOTI_RECIPIENTS_INVALID               _MSGSTR("IDS_MSGF_BODY_INVALID_RECIPIENTS")
+#define MSGC_STR_NOTI_CHANGE_SMS                               _MSGSTR("IDS_MSGC_POP_CHANGED_TO_SMS")
+
+#define MSGC_STR_PAGE_DURATION                                         _MSGSTR("IDS_MSGF_BODY_SETUP_PAGE_DURATION")
+#define MSGC_STR_SECONDS                                               _SYSSTR("IDS_COM_BODY_SECONDS_LC")
+#define MSGC_STR_2_SECONDS                                             _MSGSTR("IDS_MSGF_OPT_2SEC")
+#define MSGC_STR_5_SECONDS                                             _MSGSTR("IDS_MSGF_OPT_5SEC")
+#define MSGC_STR_10_SECONDS                                            _MSGSTR("IDS_MSGF_OPT_10SEC")
+#define MSGC_STR_CUSTOM_TIME                                   _MSGSTR("IDS_MSGF_BODY_CUSTOM_TIME")
+
+#define MSGC_STR_SCHEDULED_MESSAGE                             _MSGSTR("IDS_MSGC_HEADER_SCHEDULED_MESSAGE")
+
+#endif/* __MSG_UI_COMPOSER_STRING_H_ */
diff --git a/composer/src/bubble/msg-ui-composer-bubble-callback.c b/composer/src/bubble/msg-ui-composer-bubble-callback.c
new file mode 100755 (executable)
index 0000000..6a7e003
--- /dev/null
@@ -0,0 +1,601 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-bubble.h"
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-main.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-external.h"
+
+Evas_Coord g_mouse_down_x = 0, g_mouse_down_y = 0;
+
+static void _bubble_show_normal_mode(void *data)
+{
+       D_ENTER;
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       PMSG_BUBBLE_DATA pData = cd->bubble_data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+       elm_object_part_content_unset(pData->parent_layout, "swl.sel_all");
+       evas_object_hide(pData->sel_all_ly);
+
+       Eina_List *l = NULL;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+
+       if (pData->select_info) {
+               evas_object_del(pData->select_info);
+               pData->select_info = NULL;
+       }
+
+       elm_check_state_set(pData->sel_all_box, EINA_FALSE);
+
+       l = NULL;
+       item_data = NULL;
+       EINA_LIST_FOREACH(pData->realized_list, l, item_data) {
+               if (item_data) {
+                       evas_object_hide(item_data->chk);
+                       if (item_data->isCheck)
+                               elm_check_state_set(item_data->chk, EINA_FALSE);
+                       elm_object_signal_emit(item_data->ly, "elm,state,select,disable", "elm");
+                       evas_object_event_callback_del(item_data->ly, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_bubble_item_mouse_down_cb);
+               }
+       }
+
+       l = NULL;
+       item_data = NULL;
+       EINA_LIST_FOREACH(pData->bubble_list, l, item_data) {
+               if (item_data) {
+                       item_data->isCheck = false;
+               }
+       }
+
+       pData->chk_list = eina_list_free(pData->chk_list);
+
+       msg_ui_bubble_change_normal_navi_control(pData);
+
+       pData->viewmode = BUBBLE_NORMAL_VIEW;
+
+       D_LEAVE;
+}
+
+static void _bubble_add_edit_controlbar(PMSG_BUBBLE_DATA pData)
+{
+       D_ENTER;
+
+       int i;
+
+       for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) {
+               if (pData->toolbar_item[i])
+                       elm_object_item_del(pData->toolbar_item[i]);
+       }
+
+       pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \
+                                                                                                                               msg_ui_bubble_ctlbar_delete_cb, pData->callback_data);
+       pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL);
+       pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL);
+
+       pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_CANCEL, NULL, \
+                                                                                                                               msg_ui_bubble_ctlbar_cancel_cb, pData->callback_data);
+
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE);
+
+       D_LEAVE;
+}
+
+static void _sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA) data;
+
+       pData->sel_all_checked = !pData->sel_all_checked;
+       elm_check_state_pointer_set(pData->sel_all_box, &pData->sel_all_checked);
+
+       msg_ui_bubble_sel_all_clicked_cb(data, NULL, NULL);
+
+       MSG_UI_LEAVE();
+}
+
+static void _bubble_add_navi_select_all_ly(PMSG_BUBBLE_DATA pData)
+{
+       if (!pData->sel_all_ly) {
+               pData->sel_all_ly = elm_layout_add(pData->bubble_layout);
+               elm_layout_theme_set(pData->sel_all_ly, "genlist", "item", "select_all/default");
+               evas_object_size_hint_weight_set(pData->sel_all_ly, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+               evas_object_size_hint_align_set(pData->sel_all_ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_event_callback_add(pData->sel_all_ly, EVAS_CALLBACK_MOUSE_DOWN, _sel_all_ly_mouse_down_cb, pData);
+
+               pData->sel_all_box = elm_check_add(pData->sel_all_ly);
+               elm_check_state_pointer_set(pData->sel_all_box, &pData->sel_all_checked);
+               evas_object_propagate_events_set(pData->sel_all_box, EINA_FALSE);
+               evas_object_smart_callback_add(pData->sel_all_box, "changed", msg_ui_bubble_sel_all_clicked_cb, pData);
+               evas_object_show(pData->sel_all_box);
+
+               elm_object_part_content_set(pData->sel_all_ly, "elm.icon", pData->sel_all_box);
+               elm_object_part_text_set(pData->sel_all_ly, "elm.text", dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
+       }
+
+       evas_object_show(pData->sel_all_ly);
+       elm_object_part_content_set(pData->parent_layout, "swl.sel_all", pData->sel_all_ly);
+}
+
+static void _progress_popup_delete(PMSG_BUBBLE_DATA pData)
+{
+       if (pData->popup) {
+               evas_object_del(pData->popup);
+               pData->popup = NULL;
+       }
+
+       if (pData->select_info) {
+               evas_object_del(pData->select_info);
+               pData->select_info = NULL;
+       }
+}
+
+static void _delete_finish(PMSG_BUBBLE_DATA pData)
+{
+       if (pData->popup)
+               _progress_popup_delete(pData);
+
+       if (pData->del_index + 1 == pData->bubble_count)
+               pData->bubble_count = 0;
+       else {
+               _bubble_show_normal_mode(pData->callback_data);
+               msg_ui_bubble_list_load(pData);
+       }
+
+       pData->del_thread = NULL;
+}
+
+static void _del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !thread || !data || !msg_data);
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA)data;
+       char buf[DEF_BUF_LEN_S] = {0,};
+       int *ret = msg_data;
+
+       D_MSG("Delete message return value =[%d]", *ret);
+       if (*ret == MSG_SUCCESS) {
+               if (pData->progressbar) {
+                       snprintf(buf, sizeof(buf), "%d/%d %s", pData->del_index + 1, pData->check_cnt, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+                       elm_object_text_set(pData->progresslabel, buf);
+                       elm_progressbar_value_set(pData->progressbar, (double) (pData->del_index + 1) / pData->check_cnt);
+               }
+       } else {
+               if (pData->popup)
+                       _progress_popup_delete(pData);
+
+               msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+       }
+
+       if (*ret != MSG_SUCCESS || pData->del_index + 1 == pData->check_cnt)
+               _delete_finish(pData);
+       else
+               pData->del_index++;
+
+       if (ret)
+               free(ret);
+}
+
+static void _del_thread_fn(void *data, Ecore_Thread *thread)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA)data;
+
+       Eina_List *l;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+       EINA_LIST_FOREACH(pData->chk_list, l, item_data) {
+               int *ret = calloc(1, sizeof(int));
+
+               if (item_data) {
+                       D_MSG("del_msg_id = [%d]", item_data->msgId);
+                       *ret = msg_delete_message(pData->msgHandle, item_data->msgId);
+
+                       ecore_thread_feedback(thread, (void *)ret);
+
+                       if (*ret != MSG_SUCCESS)
+                               return;
+               } else {
+                       *ret = MSG_ERR_NULL_POINTER;
+                       ecore_thread_feedback(thread, (void *)ret);
+                       return;
+               }
+       }
+
+}
+
+static void _del_all_item(PMSG_BUBBLE_DATA pData)
+{
+       D_ENTER;
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       err = msg_delete_thread_message_list(pData->msgHandle, pData->threadId);
+
+       if (err == MSG_SUCCESS) {
+               pData->bubble_count = 0;
+               msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+       } else {
+               msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_change_normal_navi_control(PMSG_BUBBLE_DATA pData)
+{
+       if (!pData)
+                       return;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = pData->callback_data;
+
+       msg_ui_bubble_add_normal_control_item(pData);
+
+       if (cd->back_btn) {
+               evas_object_show(cd->back_btn);
+               elm_object_item_part_content_set(cd->navi_it, "prev_btn", cd->back_btn);
+       }
+
+       if (pData->msg_type == MSG_TYPE_SMS_WAPPUSH || pData->msg_type == MSG_TYPE_SMS_CB || pData->msg_type == MSG_TYPE_SMS_SYNCML)
+               msg_ui_composer_editable_set(cd, EINA_FALSE);
+       else
+               msg_ui_composer_editable_set(cd, EINA_TRUE);
+}
+
+void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T type, MSG_MSGID_LIST_S *pMsgIdList, void *user_param)
+{
+       D_ENTER;
+
+       if (!user_param || !pMsgIdList)
+               return;
+
+       PMSG_BUBBLE_DATA BubbleData = user_param;
+
+       if (BubbleData->ug_state == BUBBLE_UG_DESTROY)
+               return;
+
+       if (type == MSG_STORAGE_CHANGE_CONTACT) {
+               msg_ui_bubble_contact_info_update(BubbleData);
+               return;
+       } else if (type == MSG_STORAGE_CHANGE_DELETE) {
+               return;
+       }
+
+       int i;
+       for (i = 0; i < pMsgIdList->nCount; i++) {
+               msg_message_t msg = msg_new_message();
+               MSG_SENDINGOPT_S sendOpt = {0};
+               MSG_ERROR_T err = MSG_SUCCESS;
+
+               err = msg_get_message(BubbleData->msgHandle, pMsgIdList->msgIdList[i], msg, &sendOpt);
+
+               if (err != MSG_SUCCESS) {
+                       msg_release_message(&msg);
+                       return;
+               }
+
+               if (BubbleData->threadId == msg_get_ith_thread_id(msg, 0)) {
+                       switch (type) {
+                               case MSG_STORAGE_CHANGE_INSERT :
+                                       msg_ui_bubble_list_append(BubbleData, msg);
+                                       break;
+
+                               case MSG_STORAGE_CHANGE_UPDATE :
+                                       msg_ui_bubble_item_data_update(BubbleData, msg);
+                                       break;
+
+                               default :
+                                       break;
+                       }
+               }
+
+               msg_release_message(&msg);
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       PMSG_BUBBLE_DATA pData = cd->bubble_data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+       pData->viewmode = BUBBLE_EDIT_VIEW;
+       pData->check_cnt = 0;
+       pData->del_index = 0;
+
+       elm_object_item_part_content_unset(cd->navi_it, "prev_btn");
+       if (cd->back_btn) {
+               evas_object_hide(cd->back_btn);
+       }
+
+       Eina_List *l;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+       EINA_LIST_FOREACH(pData->realized_list, l, item_data) {
+               if (item_data) {
+                       Evas_Object *check = NULL;
+                       if (!item_data->chk) {
+                               check = elm_check_add(item_data->ly);
+                               elm_check_state_pointer_set(check, &item_data->isCheck);
+                               evas_object_data_set(check, "item_data", (const void *)item_data);
+                               evas_object_smart_callback_add(check, "changed", msg_ui_bubble_list_checked_cb, (const void *)pData);
+                               evas_object_propagate_events_set(check, EINA_FALSE);
+                               item_data->chk = check;
+                       }
+                       evas_object_event_callback_add(item_data->ly, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_bubble_item_mouse_down_cb, (const void*)item_data);
+                       elm_object_style_set(check, "default/genlist_edit");
+                       elm_object_part_content_set(item_data->ly, "elm.swallow.select_icon", item_data->chk);
+                       elm_object_signal_emit(item_data->ly, "elm,state,select,enable", "elm");
+               }
+       }
+
+       msg_ui_composer_editable_set(cd, EINA_FALSE);
+
+       _bubble_add_edit_controlbar(pData);
+       _bubble_add_navi_select_all_ly(pData);
+}
+
+void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       PMSG_BUBBLE_DATA pData = cd->bubble_data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+       msg_ui_bubble_launch_voice_call(pData->threadAddr);
+}
+
+void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+
+       PMSG_BUBBLE_DATA pData = cd->bubble_data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+       msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, pData->threadAddr);
+}
+
+void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+
+       PMSG_BUBBLE_DATA pData = cd->bubble_data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+       msg_ui_composer_launch_contact_detail_ug(cd, pData->contactId);
+}
+
+void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       PMSG_BUBBLE_DATA pData = cd->bubble_data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pData->del_thread);
+
+       if (pData->popup) {
+               evas_object_del(pData->popup);
+               pData->popup = NULL;
+       }
+
+       if (pData->sel_all_checked)
+               _del_all_item(pData);
+       else {
+               pData->popup = msg_ui_bubble_show_notify_with_progressbar(pData, pData->check_cnt);
+               pData->del_thread = ecore_thread_feedback_run(_del_thread_fn, _del_thread_feedback_fn, NULL, NULL, (void *)pData, EINA_TRUE);
+       }
+}
+
+
+void msg_ui_bubble_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       PMSG_BUBBLE_DATA pData = cd->bubble_data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+       _bubble_show_normal_mode(data);
+
+       if (pData->added_list)
+               pData->add_animator = ecore_animator_add(msg_ui_bubble_item_add_cb, (const void *) pData);
+}
+
+void msg_ui_bubble_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA) data;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+
+       D_MSG("pData->sel_all_checked = %d", pData->sel_all_checked);
+
+       if (pData->sel_all_checked) {
+               pData->check_cnt = pData->bubble_count;
+               pData->chk_list = eina_list_clone(pData->bubble_list);
+       } else {
+               pData->check_cnt = 0;
+               pData->chk_list = eina_list_free(pData->chk_list);
+       }
+
+       Eina_List *l;
+       EINA_LIST_FOREACH(pData->bubble_list, l, item_data) {
+               if (item_data) {
+                       item_data->isCheck = pData->sel_all_checked;
+               }
+       }
+
+       EINA_LIST_FOREACH(pData->realized_list, l, item_data) {
+               if (item_data) {
+                       elm_check_state_set(item_data->chk, item_data->isCheck);
+               }
+       }
+
+       msg_ui_bubble_show_select_info(pData);
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_bubble_item_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !event_info);
+
+       Evas_Coord x, y;
+       Evas_Event_Mouse_Down *ev = event_info;
+
+       PMSG_APP_CONV_DATA_S item_data = (PMSG_APP_CONV_DATA_S)data;
+
+       x = ev->canvas.x;
+       y = ev->canvas.y;
+
+       if (abs(x - g_mouse_down_x) > 20 || abs(y - g_mouse_down_y) > 20) {
+               goto RESET_EVAS_COORD;
+       }
+
+       if (elm_check_state_get(item_data->chk) == EINA_TRUE)
+               elm_check_state_set(item_data->chk, EINA_FALSE);
+       else
+               elm_check_state_set(item_data->chk, EINA_TRUE);
+
+       msg_ui_bubble_list_checked_cb((void *)msg_ui_bubble_get_bubble_data(), item_data->chk, NULL);
+
+RESET_EVAS_COORD:
+       evas_object_event_callback_del(item_data->ly, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_item_mouse_up_cb);
+       g_mouse_down_x = 0;
+       g_mouse_down_y = 0;
+}
+
+void msg_ui_bubble_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !event_info);
+
+       PMSG_APP_CONV_DATA_S item_data = (PMSG_APP_CONV_DATA_S)data;
+
+       Evas_Event_Mouse_Down *ev = event_info;
+
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+               return;
+
+       g_mouse_down_x = ev->canvas.x;
+       g_mouse_down_y = ev->canvas.y;
+
+       evas_object_event_callback_add(item_data->ly, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_item_mouse_up_cb, (const void*)item_data);
+}
+
+void msg_ui_bubble_list_checked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA) data;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+
+       item_data = evas_object_data_get(obj, "item_data");
+
+       if (item_data->isCheck) {
+               pData->check_cnt++;
+               if (!eina_list_data_find(pData->chk_list, item_data))
+                       pData->chk_list = eina_list_append(pData->chk_list, item_data);
+       } else {
+               pData->check_cnt--;
+               pData->chk_list = eina_list_remove(pData->chk_list, item_data);
+       }
+
+       if (pData->bubble_count == pData->check_cnt)
+               elm_check_state_set(pData->sel_all_box, EINA_TRUE);
+       else
+               elm_check_state_set(pData->sel_all_box, EINA_FALSE);
+
+       msg_ui_bubble_show_select_info(pData);
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_bubble_timezone_change_cb(void *data)
+{
+       D_ENTER;
+
+       PMSG_BUBBLE_DATA BubbleData = (PMSG_BUBBLE_DATA)data;
+
+       char *timezone_id = NULL;
+       UChar utimezone_id[DEF_BUF_LEN] = {0,};
+       UErrorCode status = U_ZERO_ERROR;
+
+       timezone_id = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
+
+       if (!timezone_id)
+               return;
+
+       u_uastrcpy(utimezone_id, timezone_id);
+
+       ucal_setDefaultTimeZone(utimezone_id, &status);
+
+       if (U_FAILURE(status))
+               return;
+
+       msg_ui_bubble_get_locale(BubbleData);
+       msg_ui_bubble_get_time_format(BubbleData);
+       BubbleData->time_12h_ptn = msg_common_get_date_best_pattern(BubbleData->locale, MSG_UI_TIME_PATTERN_12H);
+       BubbleData->time_24h_ptn = msg_common_get_date_best_pattern(BubbleData->locale, MSG_UI_TIME_PATTERN_24H);
+       BubbleData->date_ptn = msg_common_get_date_best_pattern(BubbleData->locale, UDAT_YEAR_NUM_MONTH_DAY);
+
+       msg_ui_bubble_list_data_update(BubbleData);
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA)data;
+
+       evas_object_smart_callback_del(obj, "scroll,drag,start", msg_ui_bubble_scroll_drag_start_cb);
+
+       if (!pData->load_animator)
+               pData->load_animator = ecore_animator_add(msg_ui_bubble_item_load_cb, data);
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_scroll_drag_start_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA)data;
+
+       evas_object_smart_callback_add(obj, "edge,top", msg_ui_bubble_scroll_edge_top_cb, (void *)pData);
+
+       D_LEAVE;
+}
+
diff --git a/composer/src/bubble/msg-ui-composer-bubble-list.c b/composer/src/bubble/msg-ui-composer-bubble-list.c
new file mode 100755 (executable)
index 0000000..dfaf67d
--- /dev/null
@@ -0,0 +1,1019 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-bubble.h"
+#include "appsvc.h"
+#include "msg-ui-composer-external.h"
+#include "msg-ui-composer-main.h"
+
+bool g_isVisible = false;
+bool g_isFirstLoading = true;
+
+#define MSG_BUBBLE_BLOCK_COUNT         (20)
+
+static void __anchor_click_cb(void *data, Evas_Object *obj, void *event_info);
+static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info);
+
+static char *__msg_ui_get_display_date(time_t *msg_t)
+{
+       struct tm msg_time, cur_time;
+       time_t cur_t;
+       char msg_date_buf[DEF_BUF_LEN] = { '0', };
+       char *date_str = NULL;
+       int diffday = 0, msg_day = 0, cur_day = 0;
+
+       PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data();
+
+       cur_t = (time_t) time(NULL);
+
+       localtime_r(msg_t, &msg_time);
+       localtime_r(&cur_t, &cur_time);
+
+       msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4;
+       cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4;
+
+       diffday = cur_day - msg_day;
+
+       if (diffday == 0)
+               snprintf(msg_date_buf, sizeof(msg_date_buf), "%s", dgettext("sys_string", "IDS_COM_BODY_TODAY"));
+       else if (diffday == 1)
+               snprintf(msg_date_buf, sizeof(msg_date_buf), "%s", dgettext("sys_string", "IDS_COM_BODY_YESTERDAY"));
+       else {
+               date_str = msg_common_get_formatted_date(bubble_data->locale, bubble_data->date_ptn, msg_t);
+               if (date_str) {
+                       strncpy(msg_date_buf, date_str, sizeof(msg_date_buf) - 1);
+                       free(date_str);
+               }
+       }
+
+       return strdup(msg_date_buf);
+
+}
+
+static char *__msg_ui_get_display_time(time_t *msg_t)
+{
+       if (!msg_t)
+               return NULL;
+
+       char buf[DEF_BUF_LEN] = { 0 };
+       char *str_time = NULL;
+
+       PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data();
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !bubble_data, NULL);
+
+       if (bubble_data->time_fmt == MSG_TIME_FORMAT_24H)
+               str_time = msg_common_get_formatted_date(bubble_data->locale, bubble_data->time_24h_ptn, msg_t);
+       else
+               str_time = msg_common_get_formatted_date(bubble_data->locale, bubble_data->time_12h_ptn, msg_t); /* MSG_TIME_FORMAT_12H */
+
+       snprintf(buf, sizeof(buf), "%s", str_time);
+
+       if (str_time)
+               free(str_time);
+
+       return strdup(buf);
+
+}
+
+static void __msg_bubble_add_content(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S conv_data)
+{
+
+       char *token_line = NULL, *token_words = NULL;
+       char *remain_l = NULL, *remain_w = NULL;
+       char tmp_buf[DEF_BUF_LEN_L] = { 0, };
+       bool isMsgText = false;
+
+       Eina_Strbuf *msg_data = eina_strbuf_new();
+
+       eina_strbuf_append(msg_data, "<font_size=32>");
+
+       /* Message Text */
+       strncpy(tmp_buf, conv_data->msgText, strlen(conv_data->msgText));
+
+       token_line = strtok_r(tmp_buf, "\n", &remain_l);
+
+       while (token_line) {
+               token_words = strtok_r(token_line, " ", &remain_w);
+
+               if (isMsgText == false)
+                       isMsgText = true;
+               while (token_words) {
+                       char *tmp_str = elm_entry_utf8_to_markup(token_words);
+
+                       eina_strbuf_append(msg_data, "<color=#4D3A17FF>");
+                       eina_strbuf_append(msg_data, tmp_str);
+
+                       token_words = strtok_r(NULL, " ", &remain_w);
+                       if (token_words)
+                               eina_strbuf_append(msg_data, " ");
+
+                       if (tmp_str)
+                               free(tmp_str);
+               }
+
+               token_line = strtok_r(NULL, "\n", &remain_l);
+               if (token_line)
+                       eina_strbuf_append(msg_data, "<br>");
+       }
+
+       /* Message time / Status */
+       eina_strbuf_append(msg_data, "<font_size=24>");
+
+       if (isMsgText)
+               eina_strbuf_append(msg_data, "<br>");
+
+       if (conv_data->networkStatus != MSG_NETWORK_SENDING) {
+               PMSG_APP_CONV_DATA_S prev_data = NULL;
+               Eina_List *cur_list = NULL, *prev_list = NULL;
+               char *display_time = NULL;
+
+               display_time = __msg_ui_get_display_time(conv_data->msgTime);
+
+               cur_list = eina_list_data_find_list(bubble_data->bubble_list, (const void *)conv_data);
+               if (cur_list)
+                       prev_list = cur_list->prev;
+
+               prev_data = (PMSG_APP_CONV_DATA_S)eina_list_nth(prev_list, 0);
+
+               if(!prev_data || g_strcmp0(prev_data->displayDate, conv_data->displayDate) != 0)
+                       eina_strbuf_append_printf(msg_data, "<color=#8F783FFF>%s %s", conv_data->displayDate, display_time);
+               else
+                       eina_strbuf_append_printf(msg_data, "<color=#8F783FFF>%s", display_time);
+
+               if (display_time)
+                       free(display_time);
+       }
+
+       switch (conv_data->networkStatus) {
+               case MSG_NETWORK_SEND_FAIL:
+                       eina_strbuf_append(msg_data, " <color=#FF2020FF>");
+                       eina_strbuf_append(msg_data, dgettext("sys_string", "IDS_COM_POP_SENDING_FAILED"));
+                       break;
+               case MSG_NETWORK_SENDING:
+                       eina_strbuf_append(msg_data, "<color=#00A200FF>");
+                       eina_strbuf_append(msg_data, dgettext("sys_string", "IDS_COM_POP_SENDING"));
+                       break;
+               default:
+                       break;
+       }
+
+       if (conv_data->direction == MSG_DIRECTION_TYPE_MO && conv_data->networkStatus == MSG_NETWORK_SEND_FAIL) {
+               eina_strbuf_append_printf(msg_data,
+                               "<br><font_size=32><color=#0500D5FF><align=center><a href=resend.%d><underline=on underline_color=#0500D5FF>(%s)<underline=off></a></font_size></align>",
+                               conv_data->msgId, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_SK_RESEND"));
+       }
+
+       if (conv_data->msgType == MSG_TYPE_SMS && conv_data->storageId == MSG_STORAGE_SIM) {
+               eina_strbuf_append_printf(msg_data, "<item size=25x25 vsize=full href=file://%s></item>", MSG_BUBBLE_SIM_MSG_ICON);
+       } else if (conv_data->msgType == MSG_TYPE_SMS_SYNCML) {
+               eina_strbuf_append(msg_data, "<br><font_size=8><br></font_size>");
+               eina_strbuf_append_printf(msg_data,
+                               "<font_size=32><color=#0500D5FF><align=center><a href=install.%d><underline=on underline_color=#0500D5FF>(%s)</a><underline=off></font_size></align>",
+                               conv_data->msgId, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_INSTALL"));
+       }
+
+       elm_entry_entry_set(conv_data->entry, eina_strbuf_string_get(msg_data));
+       eina_strbuf_free(msg_data);
+}
+
+static void __add_bubble_item(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S conv_data, MsgBoxPackType type, Evas_Object *obj)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data || !conv_data);
+       if (type == MSG_BOX_PACK_BEFORE || type == MSG_BOX_PACK_AFTER) {
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !obj);
+       }
+
+       Evas_Object *layout = elm_layout_add(bubble_data->box);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       Evas_Object *entry = elm_entry_add(bubble_data->box);
+
+       if (conv_data->direction == MSG_DIRECTION_TYPE_MO) {
+               elm_layout_theme_set(layout, "layout", "bubble", "sentmessage/default");
+               elm_object_style_set(entry, MSG_BUBBLE_STYLE_SENT);
+       } else {
+               elm_layout_theme_set(layout, "layout", "bubble", "readmessage/default");
+               elm_object_style_set(entry, MSG_BUBBLE_STYLE_RECV);
+       }
+
+       elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+       elm_entry_editable_set(entry, EINA_FALSE);
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_NO_IMAGE);
+
+       conv_data->entry = entry;
+       conv_data->ly = layout;
+
+       msg_ui_bubble_fill_bubble_contents(bubble_data, conv_data);
+
+       evas_object_data_set(entry, "conv_data", conv_data);
+
+       evas_object_smart_callback_add(entry, "anchor,clicked", __anchor_click_cb, (const void*)bubble_data);
+       evas_object_smart_callback_add(entry, "longpressed", __longpressed_cb, (const void*)bubble_data);
+
+       elm_object_part_content_set(layout, "elm.icon", entry);
+       evas_object_show(layout);
+
+       switch (type) {
+               case MSG_BOX_PACK_START :
+                       elm_box_pack_start(bubble_data->box, layout);
+                       break;
+               case MSG_BOX_PACK_END :
+                       elm_box_pack_end(bubble_data->box, layout);
+                       break;
+               case MSG_BOX_PACK_BEFORE :
+                       elm_box_pack_before(bubble_data->box, layout, obj);
+                       break;
+               case MSG_BOX_PACK_AFTER :
+                       elm_box_pack_after(bubble_data->box, layout, obj);
+                       break;
+               default :
+                       break;
+       }
+
+       if (bubble_data->viewmode == BUBBLE_EDIT_VIEW) {
+               Evas_Object *check = NULL;
+               if (!conv_data->chk) {
+                       check = elm_check_add(conv_data->ly);
+                       elm_check_state_pointer_set(check, &conv_data->isCheck);
+                       evas_object_data_set(check, "item_data", (const void *)conv_data);
+                       evas_object_smart_callback_add(check, "changed", msg_ui_bubble_list_checked_cb, (const void *)bubble_data);
+                       evas_object_propagate_events_set(check, EINA_FALSE);
+                       conv_data->chk = check;
+               }
+               evas_object_event_callback_add(conv_data->ly, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_bubble_item_mouse_down_cb, (const void*)conv_data);
+               elm_object_style_set(check, "default/genlist_edit");
+               elm_object_part_content_set(conv_data->ly, "elm.swallow.select_icon", conv_data->chk);
+               elm_object_signal_emit(conv_data->ly, "elm,state,select,enable", "elm");
+
+               if (conv_data->isCheck) {
+                       elm_check_state_set(conv_data->chk, conv_data->isCheck);
+               }
+       }
+
+}
+
+static void __msg_url_clicked_cb(char *content)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, content == NULL);
+
+       D_MSG("url=%s", content);
+
+       bundle *b = bundle_create();
+       appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
+       appsvc_set_uri(b, content);
+       appsvc_run_service(b, 0, NULL, NULL);
+
+       bundle_free(b);
+       D_LEAVE;
+}
+
+static void __msg_install_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, bubble_data == NULL);
+
+       D_MSG("syncml message operation, msg id = [%d]", msg_id);
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       err = msg_syncml_message_operation(bubble_data->msgHandle, (MSG_MESSAGE_ID_T) msg_id);
+       if (err != MSG_SUCCESS)
+               D_MSG("msg_syncml_message_operation failed.");
+
+       D_LEAVE;
+}
+
+Eina_Bool __resend_idler_cb(void *data)
+{
+       PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data();
+
+       msg_message_t failed_msg = msg_new_message();
+       MSG_SENDINGOPT_S sendOpt = { 0, };
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       int msg_id = (int)data;
+       D_MSG("Re-send message, msg id = [%d]", msg_id);
+
+       err = msg_get_message(bubble_data->msgHandle, msg_id, failed_msg, &sendOpt);
+
+       if (err != MSG_SUCCESS) {
+               D_MSG("msg_get_message is failed.");
+               return EINA_FALSE;
+       }
+
+       MSG_REQUEST_S req = { 0, failed_msg, sendOpt };
+
+       if (msg_is_sms(failed_msg))
+               err = msg_sms_send_message(bubble_data->msgHandle, &req);
+
+       if (err != MSG_SUCCESS) {
+               D_MSG("Send_message is failed.");
+               msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DETAILSSENDINGFAILED"));
+       }
+
+       msg_release_message(&failed_msg);
+
+       bubble_data->resend_idler = NULL;
+
+       return EINA_FALSE;
+}
+
+static void __msg_resend_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, bubble_data == NULL);
+       PMSG_APP_CONV_DATA_S conv_data = NULL;
+
+       Eina_List *l;
+       EINA_LIST_FOREACH(bubble_data->bubble_list, l, conv_data) {
+               if (conv_data) {
+                       if (msg_id == conv_data->msgId) {
+                               conv_data->networkStatus = MSG_NETWORK_SENDING;
+                               msg_ui_bubble_fill_bubble_contents(bubble_data, conv_data);
+                               break;
+                       }
+               }
+       }
+
+       if (!bubble_data->resend_idler)
+               bubble_data->resend_idler = ecore_idler_add(__resend_idler_cb, (void *)msg_id);
+
+       D_LEAVE;
+}
+
+
+static void __popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA)data;
+
+       if (pData->popup) {
+               evas_object_del(pData->popup);
+               pData->popup = NULL;
+       }
+}
+
+static void __anchor_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj || !event_info);
+
+       PMSG_BUBBLE_DATA bubble_data = data;
+       Elm_Entry_Anchor_Info *ac_info = NULL;
+
+       if(bubble_data->viewmode != BUBBLE_NORMAL_VIEW)
+               return;
+
+       char *token = NULL, *tok_r = NULL;
+       char type[DEF_BUF_LEN] = { 0, };
+
+       ac_info = (Elm_Entry_Anchor_Info *) event_info;
+       strncpy(type, ac_info->name, DEF_BUF_LEN - 1);
+
+       token = strtok_r(type, ".", &tok_r);
+
+       elm_entry_anchor_hover_end(obj);
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, tok_r == NULL);
+
+       if (g_strcmp0(token, "url") == 0) {
+               __msg_url_clicked_cb(tok_r);
+       } else if (g_strcmp0(token, "install") == 0) {
+               __msg_install_clicked_cb(bubble_data, atoi(tok_r));
+       } else if (g_strcmp0(token, "resend") == 0) {
+               __msg_resend_clicked_cb(bubble_data, atoi(tok_r));
+       }
+
+       D_LEAVE;
+}
+
+static void __msg_copy_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+       PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+
+       if (bubble_data->popup) {
+               evas_object_del(bubble_data->popup);
+               bubble_data->popup = NULL;
+       }
+
+       if (!conv_data) {
+               D_EMSG("conv_data is NULL");
+               return;
+       }
+
+       char *text = elm_entry_markup_to_utf8(elm_entry_entry_get(conv_data->entry));
+
+       if (text) {
+               elm_cnp_selection_set(conv_data->entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, text, strlen(text));
+               g_free(text);
+       }
+
+       D_LEAVE;
+}
+
+static void __msg_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+       PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(bubble_data->popup, "conv_data");
+       MSG_MESSAGE_ID_T msg_id;
+       int err;
+
+       if (bubble_data->popup) {
+               evas_object_del(bubble_data->popup);
+               bubble_data->popup = NULL;
+       }
+
+       if (!conv_data) {
+               msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+               return;
+       }
+
+       /** remove thread, if only one bubble exist */
+       if (bubble_data->bubble_count == 1) {
+               bubble_data->bubble_count = 0;
+               err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId);
+       } else {
+               msg_id = conv_data->msgId;
+               err = msg_delete_message(bubble_data->msgHandle, msg_id);
+               msg_ui_bubble_list_load(bubble_data);
+       }
+
+       if (err != MSG_SUCCESS) {
+               msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+       } else {
+               msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+       }
+
+       return;
+}
+
+static void __msg_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+
+       if (bubble_data->popup) {
+               evas_object_del(bubble_data->popup);
+               bubble_data->popup = NULL;
+       }
+}
+
+
+static void __msg_delete_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+       PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+
+       if (bubble_data->popup) {
+               evas_object_del(bubble_data->popup);
+               bubble_data->popup = NULL;
+       }
+
+       if (!conv_data) {
+               D_EMSG("conv_data is NULL");
+               return;
+       }
+
+       Evas_Object *popup = elm_popup_add(cd->main_window);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DELETE_Q"));
+
+       Evas_Object *btn_ok = elm_button_add(popup);
+       elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
+       elm_object_part_content_set(popup, "button1", btn_ok);
+       evas_object_smart_callback_add(btn_ok, "clicked", __msg_delete_ok_clicked_cb, bubble_data);
+
+       Evas_Object *btn_cancel = elm_button_add(popup);
+       elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button2", btn_cancel);
+       evas_object_smart_callback_add(btn_cancel, "clicked", __msg_delete_cancel_clicked_cb, bubble_data);
+
+       evas_object_data_set(popup, "conv_data", conv_data);
+       evas_object_show(popup);
+
+       bubble_data->popup = popup;
+
+       D_LEAVE;
+}
+
+static void __msg_forward_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+       PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+
+       if (bubble_data->popup) {
+               evas_object_del(bubble_data->popup);
+               bubble_data->popup = NULL;
+       }
+
+       if (!conv_data) {
+               D_EMSG("conv_data is NULL");
+               return;
+       }
+
+       char buf[DEF_BUF_LEN_S] = { 0, };
+       bundle *b = NULL;
+       b = bundle_create();
+       if (b) {
+               snprintf(buf, sizeof(buf), "%d", conv_data->msgId);
+               bundle_add(b, MSG_BUNDLE_KEY_FORWARD, buf);
+               msg_ui_composer_launch_composer_create(cd, b);
+               bundle_free(b);
+       }
+
+       D_LEAVE;
+}
+
+static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+
+       Evas_Object *popup = NULL;
+       Evas_Object *list = NULL;
+       char title[DEF_THREAD_ADDR_LEN+1] = {0,};
+       int length = 0;
+
+       PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+
+       /** create popup */
+       popup = elm_popup_add(cd->main_window);
+       if (!popup) {
+               D_EMSG("elm_popup_add returns NULL");
+               return;
+       }
+
+       elm_object_style_set(popup, "menustyle");
+
+       /** set popup title */
+       /** Sender: contents ... ex> "01012341234: Hello......" */
+       if (bubble_data->contactId > 0) {
+               if (bubble_data->threadName[0] != '\0')
+                       strncpy(title, bubble_data->threadName, DEF_THREAD_ADDR_LEN);
+               else
+                       strncpy(title,dgettext("sys_string", "IDS_COM_BODY_NO_NAME"), DEF_THREAD_ADDR_LEN);
+       } else {
+               if (bubble_data->threadAddr[0] != '\0')
+                       strncpy(title, bubble_data->threadAddr, DEF_THREAD_ADDR_LEN);
+               else
+                       strncpy(title, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"), DEF_THREAD_ADDR_LEN);
+       }
+
+       length = DEF_THREAD_ADDR_LEN - strlen(title);
+       strncat(title, ": ", 2);
+       length = length + 2;
+       strncat(title, conv_data->msgText, length);
+
+       /** create menu list */
+       list = elm_list_add(cd->main_window);
+       if (!list)
+               return;
+
+       evas_object_data_set(list, "conv_data", conv_data);
+
+       elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_COPY"), NULL, NULL, __msg_copy_clicked_cb, bubble_data);
+       elm_list_item_append(list, dgettext("sys_string", "IDS_COM_SK_DELETE"), NULL, NULL, __msg_delete_clicked_cb, bubble_data);
+       elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), NULL, NULL, __msg_forward_clicked_cb, bubble_data);
+
+       elm_list_go(list);
+
+       elm_object_part_text_set(popup,"title,text",title);
+       elm_object_content_set(popup, list);
+
+       Evas_Object * btn1 = elm_button_add(popup);
+       elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
+       elm_object_part_content_set(popup, "button1", btn1);
+       bubble_data->popup = popup;
+
+       evas_object_show(popup);
+
+       evas_object_smart_callback_add(btn1, "clicked", __popup_close_clicked_cb, bubble_data);
+
+       D_LEAVE;
+}
+
+
+static void __set_msg_data_by_conv_data(PMSG_APP_CONV_DATA_S conv_data, msg_message_t msgInfo)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !conv_data || !msgInfo);
+
+       const char *msg_body = NULL;
+       char *msg_date = NULL;
+
+       conv_data->msgId = msg_get_message_id(msgInfo);
+       conv_data->msgType = msg_get_message_type(msgInfo);
+       conv_data->storageId = msg_get_storage_id(msgInfo);
+
+       if (conv_data->msgTime == NULL)
+               conv_data->msgTime = (time_t *) calloc(1, sizeof(time_t));
+
+       if (conv_data->msgTime) {
+               bzero(conv_data->msgTime,sizeof(time_t));
+               memcpy(conv_data->msgTime, msg_get_time(msgInfo), sizeof(time_t));
+               msg_date = __msg_ui_get_display_date(conv_data->msgTime);
+               snprintf(conv_data->displayDate, sizeof(conv_data->displayDate), "%s", msg_date);
+               if (msg_date)
+                       free(msg_date);
+       }
+
+       conv_data->networkStatus = msg_get_network_status(msgInfo);
+       conv_data->bRead = msg_is_read(msgInfo);
+       conv_data->bProtected = msg_is_protected(msgInfo);
+       conv_data->direction = msg_get_direction_info(msgInfo);
+
+       msg_body = msg_sms_get_message_body(msgInfo);
+
+       bzero(conv_data->msgText, sizeof(conv_data->msgText));
+
+       if (msg_body)
+               strncpy(conv_data->msgText, msg_body, DEF_MAX_MSG_TEXT_LEN);
+}
+
+static int __calc_scroller_geometry(PMSG_BUBBLE_DATA bubble_data)
+{
+       Evas_Coord sw, sh;
+
+       elm_scroller_child_size_get(bubble_data->scrl, &sw, &sh);
+
+       return sh;
+}
+
+static Eina_Bool __unfreeze_scroller_cb(void *data)
+{
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA) data;
+
+       elm_scroller_gravity_set(bubble_data->scrl, 0.0, 0.0);
+       if (g_isFirstLoading) {
+               elm_scroller_region_show(bubble_data->scrl, 0, __calc_scroller_geometry(bubble_data), 0, 0);
+               g_isFirstLoading = false;
+       }
+       evas_object_show(bubble_data->scrl);
+
+       bubble_data->scroll_idler = NULL;
+
+       evas_object_smart_callback_add(bubble_data->scrl, "edge,top", msg_ui_bubble_scroll_edge_top_cb, data);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data)
+{
+       D_ENTER;
+
+       if (!bubble_data || !item_data) return;
+
+       __msg_bubble_add_content(bubble_data, item_data);
+}
+
+Eina_Bool msg_ui_bubble_item_load_cb(void *data)
+{
+       D_ENTER;
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !data, EINA_FALSE);
+
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA) data;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+       double scr_g;
+
+       bool cb_cancel = false;
+
+       evas_object_smart_callback_del(bubble_data->scrl, "edge,top", msg_ui_bubble_scroll_edge_top_cb);
+
+       if (bubble_data->added_count%(MSG_BUBBLE_BLOCK_COUNT+1) == MSG_BUBBLE_BLOCK_COUNT || bubble_data->bubble_index < 0) {
+               cb_cancel = true;
+       } else {
+               if (bubble_data->bubble_list) {
+                       item_data = (PMSG_APP_CONV_DATA_S) eina_list_nth(bubble_data->bubble_list, bubble_data->bubble_index);
+                       if (item_data == NULL)
+                               cb_cancel = true;
+
+               } else {
+                       cb_cancel = true;
+               }
+       }
+
+       if (cb_cancel == false) {
+               if (!g_isVisible) {
+                       if (__calc_scroller_geometry(bubble_data) > MSG_BUBBLE_CONTENT_H) {
+                               evas_object_show(bubble_data->scrl);
+                               g_isVisible = true;
+                       } else
+                               evas_object_hide(bubble_data->scrl);
+               }
+
+               elm_scroller_gravity_get(bubble_data->scrl, NULL, &scr_g);
+               if(!scr_g)
+                       elm_scroller_gravity_set(bubble_data->scrl, 0.0, 1.0);
+
+               __add_bubble_item(bubble_data, item_data, MSG_BOX_PACK_START, NULL);
+               bubble_data->realized_list = eina_list_append(bubble_data->realized_list, item_data);
+
+               bubble_data->bubble_index--;
+               bubble_data->added_count++;
+       }
+
+       if (cb_cancel == true ||bubble_data->bubble_index < 0) {
+               D_MSG("Scroller pointer = [%p]", bubble_data->scrl);
+               elm_scroller_gravity_get(bubble_data->scrl, NULL, &scr_g);
+               if (scr_g == 1.0 && !bubble_data->scroll_idler)
+                       bubble_data->scroll_idler = ecore_idler_add(__unfreeze_scroller_cb, (const void *)bubble_data);
+
+               bubble_data->load_animator = NULL;
+               bubble_data->added_count = 0;
+
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       D_LEAVE;
+
+       return ECORE_CALLBACK_RENEW;
+
+}
+
+void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data);
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+       MSG_LIST_S msg_list;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+       int i;
+
+       err = msg_get_conversation_view_list(bubble_data->msgHandle, bubble_data->threadId, &msg_list);
+       if (err != MSG_SUCCESS)
+               return;
+
+       msg_ui_bubble_start_bubble_list(bubble_data);
+       g_isVisible = false;
+       g_isFirstLoading = true;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Bubble count = %d", msg_list.nCount);
+
+       bubble_data->bubble_count = msg_list.nCount;
+
+       if (bubble_data->bubble_count <= 0) {
+               msg_release_message_list(&msg_list);
+               return;
+       }
+
+       for (i = 0; i < bubble_data->bubble_count; i++) {
+               item_data = (PMSG_APP_CONV_DATA_S) calloc(1, sizeof(MSG_APP_CONV_DATA_S));
+               __set_msg_data_by_conv_data(item_data, msg_list.msgInfo[i]);
+
+               bubble_data->bubble_list = eina_list_append(bubble_data->bubble_list, (const void *)item_data);
+
+               if (i == (bubble_data->bubble_count-1)) {
+                       bubble_data->msg_type = item_data->msgType;
+                       if (bubble_data->msg_type == MSG_TYPE_SMS_WAPPUSH || bubble_data->msg_type == MSG_TYPE_SMS_CB || bubble_data->msg_type == MSG_TYPE_SMS_SYNCML)
+                               msg_ui_composer_editable_set(cd, EINA_FALSE);
+                       else
+                               msg_ui_composer_editable_set(cd, EINA_TRUE);
+
+               }
+       }
+
+       msg_release_message_list(&msg_list);
+
+       bubble_data->bubble_index = bubble_data->bubble_count - 1; // bubble_index : Message index to append on box.
+       bubble_data->load_animator = ecore_animator_add(msg_ui_bubble_item_load_cb, (const void *)bubble_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+}
+
+void msg_ui_bubble_list_data_update(PMSG_BUBBLE_DATA bubble_data)
+{
+       MSG_UI_ENTER();
+
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+
+       Eina_List *l = NULL;
+       EINA_LIST_FOREACH (bubble_data->bubble_list, l, item_data) {
+               if (item_data) {
+                       msg_ui_bubble_fill_bubble_contents(bubble_data, item_data);
+               }
+       }
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg)
+{
+       MSG_UI_ENTER();
+
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+
+       Eina_List *l = NULL;
+       EINA_LIST_FOREACH (bubble_data->bubble_list, l, item_data) {
+               if (item_data) {
+                       if (item_data->msgId == msg_get_message_id(msg)) {
+
+                               if (bubble_data->ug_state != BUBBLE_UG_PAUSE)
+                                       msg_update_read_status(bubble_data->msgHandle, msg_get_message_id(msg), true);
+
+                               __set_msg_data_by_conv_data(item_data, msg);
+                               msg_ui_bubble_fill_bubble_contents(bubble_data, item_data);
+
+                               break;
+                       }
+               }
+       }
+
+       MSG_UI_LEAVE();
+}
+
+static Eina_Bool __add_item_finish_cb(void *data)
+{
+       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA) data;
+
+       elm_scroller_region_show(bubble_data->scrl, 0, __calc_scroller_geometry(bubble_data), 0, 0);
+
+       bubble_data->added_list = eina_list_free(bubble_data->added_list);
+
+       bubble_data->add_idler = NULL;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+Eina_Bool msg_ui_bubble_item_add_cb(void *data)
+{
+       D_ENTER;
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !data, EINA_FALSE);
+
+       PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data();
+       BUBBLE_PACK_INFO *pack_info = NULL;
+
+       bool cb_cancel = false;
+
+       if (bubble_data->added_list) {
+               pack_info = (BUBBLE_PACK_INFO *) eina_list_nth(bubble_data->added_list, 0);
+               if (pack_info == NULL)
+                       cb_cancel = true;
+               else
+                       msg_update_read_status(bubble_data->msgHandle, pack_info->add_item->msgId, true);
+
+       } else {
+               cb_cancel = true;
+       }
+
+       if (cb_cancel == true) {
+               if (!bubble_data->add_idler)
+                       bubble_data->add_idler = ecore_idler_add(__add_item_finish_cb, (const void *)bubble_data);
+
+               bubble_data->add_animator = NULL;
+
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       __add_bubble_item(bubble_data, pack_info->add_item, pack_info->pack_type, pack_info->rel_obj);
+
+       bubble_data->realized_list = eina_list_append(bubble_data->realized_list, pack_info->add_item);
+
+       bubble_data->added_list = eina_list_remove(bubble_data->added_list, pack_info);
+
+       bubble_data->bubble_count++;
+
+       if (pack_info)
+               free(pack_info);
+
+       return ECORE_CALLBACK_RENEW;
+
+}
+
+void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data);
+
+       Eina_List *l = NULL;
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+       EINA_LIST_FOREACH(bubble_data->bubble_list, l, item_data) {
+               if (item_data && item_data->msgId == msg_get_message_id(msg))
+                       return;
+       }
+
+       PMSG_APP_CONV_DATA_S conv_data = NULL;
+       conv_data = (PMSG_APP_CONV_DATA_S) calloc(1, sizeof(MSG_APP_CONV_DATA_S));
+       __set_msg_data_by_conv_data(conv_data, msg);
+
+       BUBBLE_PACK_INFO *pack_info = (BUBBLE_PACK_INFO *)calloc(1, sizeof(BUBBLE_PACK_INFO));
+       pack_info->add_item = conv_data;
+       pack_info->rel_obj = NULL;
+       pack_info->pack_type = MSG_BOX_PACK_END;
+
+       bubble_data->added_list = eina_list_append(bubble_data->added_list, (const void *)pack_info);
+       bubble_data->bubble_list = eina_list_append(bubble_data->bubble_list, (const void *)conv_data);
+
+       if (bubble_data->viewmode == BUBBLE_EDIT_VIEW || bubble_data->ug_state == BUBBLE_UG_PAUSE)
+               return;
+
+       if (bubble_data->add_animator)
+               return;
+
+       bubble_data->add_animator = ecore_animator_add(msg_ui_bubble_item_add_cb, (const void *) bubble_data);
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg)
+{
+       MSG_UI_ENTER();
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data);
+
+       PMSG_APP_CONV_DATA_S prev_data = NULL;
+       PMSG_APP_CONV_DATA_S insert_data = NULL;
+       BUBBLE_PACK_INFO *add_pack_info = NULL;
+
+       Eina_List *l;
+       EINA_LIST_FOREACH(bubble_data->added_list, l, add_pack_info) {
+               if (add_pack_info) {
+                       if (add_pack_info->add_item->msgId == msg_get_message_id(msg)) {
+                               bubble_data->added_list = eina_list_remove(bubble_data->added_list, (const void *)add_pack_info);
+                               free(add_pack_info);
+                               break;
+                       }
+               }
+       }
+
+       EINA_LIST_FOREACH(bubble_data->bubble_list, l, prev_data) {
+               if (prev_data) {
+                       if (prev_data->msgId == msg_get_message_id(msg)) {
+                               if (eina_list_data_find(bubble_data->realized_list, (const void *)prev_data)) {
+                                       elm_box_unpack(bubble_data->box, prev_data->ly);
+                                       evas_object_hide(prev_data->ly);
+                                       evas_object_del(prev_data->ly);
+
+                                       bubble_data->realized_list = eina_list_remove(bubble_data->realized_list, (const void *)prev_data);
+                               }
+
+                               bubble_data->bubble_list = eina_list_remove(bubble_data->bubble_list, (const void *)prev_data);
+
+                               if (prev_data) {
+                                       if (prev_data->msgTime)
+                                               free(prev_data->msgTime);
+                                       free(prev_data);
+                               }
+                               break;
+                       }
+               }
+       }
+
+       insert_data = (PMSG_APP_CONV_DATA_S) calloc(1, sizeof(MSG_APP_CONV_DATA_S));
+       __set_msg_data_by_conv_data(insert_data, msg);
+
+       BUBBLE_PACK_INFO *pack_info = (BUBBLE_PACK_INFO *)calloc(1, sizeof(BUBBLE_PACK_INFO));
+       pack_info->add_item = insert_data;
+       pack_info->rel_obj = NULL;
+       pack_info->pack_type = MSG_BOX_PACK_END;
+
+       bubble_data->bubble_list = eina_list_append(bubble_data->bubble_list, (const void *)insert_data);
+       bubble_data->added_list = eina_list_append(bubble_data->added_list, (const void *)pack_info);
+
+
+       if (bubble_data->viewmode == BUBBLE_EDIT_VIEW || bubble_data->ug_state == BUBBLE_UG_PAUSE)
+               return;
+
+       if (bubble_data->add_animator)
+               return;
+
+       bubble_data->add_animator = ecore_animator_add(msg_ui_bubble_item_add_cb, (const void *) bubble_data);
+
+       MSG_UI_LEAVE();
+}
+
diff --git a/composer/src/bubble/msg-ui-composer-bubble-main.c b/composer/src/bubble/msg-ui-composer-bubble-main.c
new file mode 100755 (executable)
index 0000000..7f4c019
--- /dev/null
@@ -0,0 +1,421 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-bubble.h"
+
+PMSG_BUBBLE_DATA g_bubble_data;
+
+static int _parse_bundle_data(PMSG_BUBBLE_DATA bubble_data, bundle *data)
+{
+       D_ENTER;
+
+       if (!data)
+               return -1;
+
+       const char *thread_id = NULL;
+       const char *contact_id = NULL;
+
+       thread_id = bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_ID);
+       bubble_data->threadId = thread_id?(MSG_THREAD_ID_T)atoi(thread_id):0;
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread ID from bundle data=%d", bubble_data->threadId);
+
+       snprintf(bubble_data->threadAddr, DEF_THREAD_ADDR_LEN, "%s", bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_ADDRESS));
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Adress from bundle data=%s", bubble_data->threadAddr);
+
+       snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_NAME));
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Name from bundle data=%s", bubble_data->threadName);
+
+       contact_id = bundle_get_val(data, MSG_BUNDLE_KEY_CONTACT_ID);
+       bubble_data->contactId = contact_id? atoi(contact_id):0;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "contact ID from bundle data=%d", bubble_data->contactId);
+
+       D_LEAVE;
+       return 0;
+}
+
+static int _parse_bundle_with_msg_id(PMSG_BUBBLE_DATA bubble_data, int msgId)
+{
+       D_ENTER;
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+       msg_message_t msgInfo;
+       MSG_SENDINGOPT_S sendOpt = { 0, };
+
+       msgInfo = msg_new_message();
+
+       D_MSG("Message ID from bundle = %d", msgId);
+
+       err = msg_get_message(bubble_data->msgHandle, msgId, msgInfo, &sendOpt);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS, -1);
+
+       D_MSG("Address count = %d", msg_get_address_count(msgInfo));
+
+       bubble_data->threadId = msg_get_ith_thread_id(msgInfo, 0);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread ID from bundle data=%d", bubble_data->threadId);
+
+       snprintf(bubble_data->threadAddr, DEF_THREAD_ADDR_LEN, "%s", msg_get_ith_address(msgInfo, 0));
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Adress from bundle data=%s", bubble_data->threadAddr);
+
+       snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", msg_get_ith_name(msgInfo, 0));
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Name from bundle data=%s", bubble_data->threadName);
+
+       if (msg_get_ith_contact_id(msgInfo, 0))
+               bubble_data->contactId = msg_get_ith_contact_id(msgInfo, 0);
+       else
+               bubble_data->contactId = 0;
+
+       msg_release_message(&msgInfo);
+
+       D_LEAVE;
+
+       return 0;
+}
+
+
+PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(MSG_HANDLE_T msgHandle, void *callback_data)
+{
+       D_ENTER;
+
+       PMSG_BUBBLE_DATA bubble_data = NULL;
+
+       bubble_data = (PMSG_BUBBLE_DATA)calloc(1, sizeof(MSG_BUBBLE_DATA));
+
+       g_bubble_data = bubble_data;
+
+       bubble_data->msgHandle = msgHandle;
+
+       bubble_data->viewmode = BUBBLE_NORMAL_VIEW;
+       bubble_data->ug_state = BUBBLE_UG_START;
+
+       if (callback_data)
+               bubble_data->callback_data = callback_data;
+
+       D_LEAVE;
+       return bubble_data;
+}
+
+void msg_ui_bubble_deinit_bubble_data(void *data)
+{
+       D_ENTER;
+
+       if (!data)
+               return;
+
+       PMSG_BUBBLE_DATA bubble_data = data;
+
+       evas_object_smart_callback_del(bubble_data->scrl, "edge,top", msg_ui_bubble_scroll_edge_top_cb);
+
+       msg_ui_bubble_init_bubble_list(bubble_data);
+
+       if (bubble_data->date_ptn) {
+               free(bubble_data->date_ptn);
+               bubble_data->date_ptn = NULL;
+       }
+
+       if (bubble_data->time_12h_ptn) {
+               free(bubble_data->time_12h_ptn);
+               bubble_data->time_12h_ptn = NULL;
+       }
+
+       if (bubble_data->time_24h_ptn) {
+               free(bubble_data->time_24h_ptn);
+               bubble_data->time_24h_ptn = NULL;
+       }
+
+       if (bubble_data->del_thread) {
+               if (ecore_thread_cancel(bubble_data->del_thread) == EINA_FALSE) {
+                       D_MSG("ecore_thread_cancel is done.");
+               } else {
+                       D_MSG("ecore_thread_cancel is failed.");
+               }
+
+               bubble_data->del_thread = NULL;
+       }
+
+       if (bubble_data->resend_idler) {
+               ecore_idler_del(bubble_data->resend_idler);
+               bubble_data->resend_idler = NULL;
+       }
+
+       if (bubble_data->retrieve_idler) {
+               ecore_idler_del(bubble_data->retrieve_idler);
+               bubble_data->retrieve_idler = NULL;
+       }
+
+       if (bubble_data->add_idler) {
+               ecore_idler_del(bubble_data->add_idler);
+               bubble_data->add_idler = NULL;
+       }
+
+       if (bubble_data->scroll_idler) {
+               ecore_idler_del(bubble_data->scroll_idler);
+               bubble_data->scroll_idler = NULL;
+       }
+
+       if (bubble_data->bubble_layout) {
+               evas_object_del(bubble_data->bubble_layout);
+               bubble_data->bubble_layout = NULL;
+       }
+
+       if (bubble_data->noti_fd) {
+               if (heynoti_unsubscribe(bubble_data->noti_fd, "setting_time_changed", msg_ui_bubble_timezone_change_cb) == -1) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_unsubscribe() is failed !!");
+               }
+               heynoti_close(bubble_data->noti_fd);
+       }
+
+       free(bubble_data);
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b)
+{
+       if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_MSG_ID) == 0) { /* From logs */
+               int msg_id = 0;
+               const char *msg_id_str = bundle_get_val(b, MSG_BUNDLE_KEY_MSG_ID);
+
+               if (!msg_id_str)
+                       return;
+
+               msg_id = atoi(msg_id_str);
+               _parse_bundle_with_msg_id(bubble_data, msg_id);
+
+       } else
+               _parse_bundle_data(bubble_data, b);
+}
+
+void msg_ui_bubble_start_bubble_list(PMSG_BUBBLE_DATA bubble_data)
+{
+       D_ENTER;
+
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, bubble_data == NULL, "PMSG_BUBBLE_DATA is NULL");
+
+       msg_ui_bubble_init_bubble_list(bubble_data);
+
+       bubble_data->box = elm_box_add(bubble_data->bubble_layout);
+       evas_object_size_hint_weight_set(bubble_data->box, EVAS_HINT_EXPAND, 0.0);
+       elm_object_content_set(bubble_data->scrl, bubble_data->box);
+
+       if (bubble_data->viewmode == BUBBLE_EDIT_VIEW) {
+               msg_ui_bubble_change_normal_navi_control(bubble_data);
+       }
+
+       bubble_data->viewmode = BUBBLE_NORMAL_VIEW;
+
+       /* To avoid a fluctuation of bubble list on split view. */
+       elm_scroller_region_show(bubble_data->scrl, 0, 0, 0, 0);
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data)
+{
+       D_ENTER;
+
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, bubble_data == NULL, "PMSG_BUBBLE_DATA is NULL");
+
+       PMSG_APP_CONV_DATA_S item_data = NULL;
+       BUBBLE_PACK_INFO *pack_info = NULL;
+
+       bubble_data->bubble_count = 0;
+       bubble_data->bubble_index = 0;
+       bubble_data->added_count = 0;
+       bubble_data->check_cnt = 0;
+
+       if (bubble_data->load_animator) {
+               ecore_animator_del(bubble_data->load_animator);
+               bubble_data->load_animator = NULL;
+       }
+
+       if (bubble_data->add_animator) {
+               ecore_animator_del(bubble_data->add_animator);
+               bubble_data->add_animator = NULL;
+       }
+
+       if (bubble_data->box) {
+               elm_object_content_unset(bubble_data->scrl);
+               evas_object_del(bubble_data->box);
+       }
+
+       EINA_LIST_FREE(bubble_data->bubble_list, item_data) {
+               if (item_data) {
+                       if (item_data->msgTime)
+                               free(item_data->msgTime);
+                       free(item_data);
+               }
+       }
+
+       EINA_LIST_FREE(bubble_data->added_list, pack_info) {
+               if (pack_info)
+                       free(pack_info);
+       }
+
+       bubble_data->realized_list = eina_list_free(bubble_data->realized_list);
+       bubble_data->chk_list = eina_list_free(bubble_data->chk_list);
+
+       D_LEAVE;
+}
+
+Evas_Object *msg_ui_bubble_create_controlbar(Evas_Object *parent, void *user_data)
+{
+       if (!parent || !user_data)
+               return NULL;
+
+       PMSG_BUBBLE_DATA bubble_data = user_data;
+
+       Evas_Object *toolbar = NULL;
+
+       toolbar = elm_toolbar_add(parent);
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_object_style_set(toolbar, "toolbar");
+       bubble_data->toolbar = toolbar;
+
+       return toolbar;
+}
+
+Evas_Object *msg_ui_bubble_create_view(Evas_Object *parent, void *user_data)
+{
+       if (!parent || !user_data)
+               return NULL;
+
+       PMSG_BUBBLE_DATA bubble_data = user_data;
+
+       Evas_Object *bubble_layout = NULL;
+       Evas_Object *scroller = NULL;
+
+       bubble_layout = elm_layout_add(parent);
+       elm_layout_theme_set(bubble_layout, "layout", "application", "noindicator");
+       evas_object_size_hint_weight_set(bubble_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_fill_set(bubble_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(bubble_layout);
+
+       scroller = elm_scroller_add(parent);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       elm_object_part_content_set(bubble_layout, "elm.swallow.content", scroller);
+       evas_object_smart_callback_add(scroller, "scroll,drag,start", msg_ui_bubble_scroll_drag_start_cb, user_data);
+
+       bubble_data->parent_layout = parent;
+       bubble_data->bubble_layout = bubble_layout;
+       bubble_data->scrl = scroller;
+
+       return bubble_layout;
+}
+
+void msg_ui_bubble_start_view(PMSG_BUBBLE_DATA bubble_data)
+{
+       if (!bubble_data)
+               return;
+
+       msg_ui_bubble_reg_bubble_cb_func(bubble_data);
+       msg_ui_bubble_get_locale(bubble_data);
+       msg_ui_bubble_get_time_format(bubble_data);
+       bubble_data->time_12h_ptn = msg_common_get_date_best_pattern(bubble_data->locale, MSG_UI_TIME_PATTERN_12H);
+       bubble_data->time_24h_ptn = msg_common_get_date_best_pattern(bubble_data->locale, MSG_UI_TIME_PATTERN_24H);
+       bubble_data->date_ptn = msg_common_get_date_best_pattern(bubble_data->locale, UDAT_YEAR_NUM_MONTH_DAY);
+
+       bubble_data->noti_fd = heynoti_init();
+       if (bubble_data->noti_fd == -1) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_init() is failed!!");
+       }
+       else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_init() is success : fd = %d\n", bubble_data->noti_fd);
+
+               if (heynoti_subscribe(bubble_data->noti_fd, "setting_time_changed", msg_ui_bubble_timezone_change_cb, (void *)bubble_data) == -1) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_subscribe(setting_time_changed) is failed!!");
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_subscribe(setting_time_changed) is success !!");
+               }
+
+               if (heynoti_attach_handler(bubble_data->noti_fd) == -1) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_attach_handler() is failed !!");
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_attach_handler() is success.");
+               }
+       }
+       msg_ui_bubble_list_load(bubble_data);
+}
+
+void msg_ui_bubble_add_normal_control_item(void *user_data)
+{
+       D_ENTER;
+
+       if (!user_data)
+               return;
+
+       int i;
+
+       PMSG_BUBBLE_DATA bubble_data = user_data;
+
+       for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) {
+               if (bubble_data->toolbar_item[i])
+                       elm_object_item_del(bubble_data->toolbar_item[i]);
+       }
+
+       bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_EDIT, NULL, \
+                                                                                                                               msg_ui_bubble_ctlbar_edit_cb, bubble_data->callback_data);
+
+       bubble_data->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_VOICE_CALL, NULL, \
+                                                                                                                               msg_ui_bubble_ctlbar_call_cb, bubble_data->callback_data);
+       if (bubble_data->contactId <= 0) {
+               bubble_data->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_ADD_TO_CONTACT, NULL, \
+                                                                                                               msg_ui_bubble_ctlbar_add_to_contact_cb, bubble_data->callback_data);
+       } else {
+               bubble_data->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT_DETAIL, NULL, \
+                                                                                                               msg_ui_bubble_ctlbar_view_ct_detail_cb, bubble_data->callback_data);
+       }
+
+       if (bubble_data->threadId <= 0) {
+               for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) {
+                       if (bubble_data->toolbar_item[i])
+                               elm_object_item_disabled_set(bubble_data->toolbar_item[i], EINA_TRUE);
+               }
+       } else {
+               if (bubble_data->msg_type == MSG_TYPE_SMS_WAPPUSH ||
+                       bubble_data->msg_type == MSG_TYPE_SMS_CB ||
+                       bubble_data->msg_type == MSG_TYPE_SMS_SYNCML) {
+                       elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); /** voice call */
+                       elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); /** add/update contact */
+               }
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_bubble_reg_bubble_cb_func(PMSG_BUBBLE_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pData == NULL, "PMSG_BUBBLE_DATA is NULL");
+
+       msg_reg_storage_change_callback(pData->msgHandle, &msg_ui_bubble_msg_storage_change_cb, (void *)pData);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+PMSG_BUBBLE_DATA msg_ui_bubble_get_bubble_data(void)
+{
+
+       if (g_bubble_data)
+               return g_bubble_data;
+       else
+               return NULL;
+
+}
+
diff --git a/composer/src/bubble/msg-ui-composer-bubble-util.c b/composer/src/bubble/msg-ui-composer-bubble-util.c
new file mode 100755 (executable)
index 0000000..54c9669
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-bubble.h"
+#include "msg-ui-composer-main.h"
+#include <regex.h>
+#include "appsvc.h"
+
+void msg_ui_bubble_launch_voice_call(const char *call_num)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !call_num);
+
+       char *num_str = msg_ui_bubble_get_trimmed_number(call_num);
+
+       bundle *b = bundle_create();
+
+       char telnum[255] = {0,};
+
+       appsvc_set_operation(b, APPSVC_OPERATION_CALL);
+       snprintf(telnum, sizeof(telnum), "tel:%s", num_str);     /* Number to make a call */
+       appsvc_set_uri(b, telnum);
+       appsvc_run_service(b, 0, NULL, NULL);
+
+       if (num_str)
+               free(num_str);
+
+       bundle_free(b);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+char *msg_ui_bubble_get_trimmed_number(const char *org_num)
+{
+       char num_str[DEF_BUF_LEN_L] = { 0, };
+       int i = 0, idx = 0;
+
+       if (org_num[0] == '+') {
+               num_str[0] = '+';
+               i++;
+               idx++;
+       }
+
+       while (org_num[i] && i < strlen(org_num)) {
+               if (g_ascii_isdigit(org_num[i])) {
+                       num_str[idx] = org_num[i];
+                       idx++;
+               }
+               i++;
+       }
+
+       return strdup(num_str);
+}
+
+static void __popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_BUBBLE_DATA bubbleData = (PMSG_BUBBLE_DATA) data;
+
+       if (bubbleData->popup) {
+               evas_object_del(bubbleData->popup);
+               bubbleData->popup = NULL;
+       }
+
+       if (bubbleData->select_info) {
+               evas_object_del(bubbleData->select_info);
+               bubbleData->select_info = NULL;
+       }
+
+       if (bubbleData->bubble_count == 0) {
+               bundle *b = bundle_create();
+               if (b) {
+                       char buf[DEF_BUF_LEN_S] = {0,};
+                       bundle_add(b, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL);
+                       snprintf(buf, sizeof(buf), "%d", bubbleData->threadId);
+                       bundle_add(b, MSG_BUNDLE_KEY_THREAD_ID, buf);
+
+                       msg_ui_composer_bubble_del_all(bubbleData->callback_data, b);
+
+                       bundle_free(b);
+               }
+       }
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !bubbleData, "PMSG_BUBBLE_DATA is NULL");
+
+       Evas_Object *popup = NULL;
+
+       if (bubbleData->popup) {
+               evas_object_del(bubbleData->popup);
+               bubbleData->popup = NULL;
+       }
+
+       popup = elm_popup_add(bubbleData->bubble_layout);
+       bubbleData->popup = popup;
+
+       evas_object_size_hint_weight_set(bubbleData->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(bubbleData->popup, msg);
+
+       evas_object_smart_callback_add(bubbleData->popup, "timeout", __popup_response_cb, bubbleData);
+
+       elm_popup_timeout_set(bubbleData->popup, 1.0);
+       evas_object_show(bubbleData->popup);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_bubble_show_notify_with_timeout(PMSG_BUBBLE_DATA bubbleData, char *msg, double timeout)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !bubbleData, "PMSG_BUBBLE_DATA is NULL");
+
+       Evas_Object *popup = NULL;
+
+       if (bubbleData->popup) {
+               evas_object_del(bubbleData->popup);
+               bubbleData->popup = NULL;
+       }
+
+       popup = elm_popup_add(bubbleData->bubble_layout);
+       bubbleData->popup = popup;
+
+       evas_object_size_hint_weight_set(bubbleData->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(bubbleData->popup, msg);
+
+       evas_object_smart_callback_add(bubbleData->popup, "timeout", __popup_response_cb, bubbleData);
+
+       elm_popup_timeout_set(bubbleData->popup, timeout);
+       evas_object_show(bubbleData->popup);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, int count)
+{
+       D_ENTER;
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !pData, NULL);
+
+       Evas_Object *popup, *progressbar, *box, *label;
+       char buf[DEF_BUF_LEN_S] = { 0, };
+
+       popup = elm_popup_add(pData->bubble_layout);
+
+       label = elm_label_add(popup);
+       snprintf(buf, sizeof(buf), "0/%d %s", count, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+       elm_object_text_set(label, buf);
+       evas_object_show(label);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_progress");
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(progressbar, 0.0);
+       evas_object_show(progressbar);
+
+       box = elm_box_add(popup);
+       elm_box_pack_end(box, label);
+       elm_box_pack_end(box, progressbar);
+       evas_object_show(box);
+
+       elm_object_content_set(popup, box);
+
+       evas_object_show(popup);
+
+       pData->progressbar = progressbar;
+       pData->progresslabel = label;
+
+       D_LEAVE;
+       return popup;
+}
+
+void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData);
+
+       if (!pData->select_info) {
+               pData->select_info = elm_notify_add(ug_get_window());
+               elm_notify_orient_set(pData->select_info, ELM_NOTIFY_ORIENT_BOTTOM);
+
+               pData->selectioninfo_layout = elm_layout_add(pData->select_info);
+               elm_object_content_set(pData->select_info, pData->selectioninfo_layout);
+       }
+
+       elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64");
+
+       if (pData->check_cnt <= 0) {
+               evas_object_hide(pData->select_info);
+               elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+       } else {
+               char text[128] = { '0', };
+               if (pData->check_cnt == 1)
+                       snprintf(text, sizeof(text), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_1_MESSAGE_SELECTED"));
+               else
+                       snprintf(text, sizeof(text), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"), pData->check_cnt);
+
+               edje_object_part_text_set(_EDJ(pData->selectioninfo_layout), "elm.text", text);
+               evas_object_show(pData->select_info);
+
+               elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE);
+       }
+}
+
+void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData)
+{
+       D_ENTER;
+
+       PMSG_APP_CONV_DATA_S conv_data = NULL;
+       MSG_ERROR_T err = MSG_SUCCESS;;
+       int index;
+
+       if (!pData->bubble_list)
+               return;
+
+       conv_data = (PMSG_APP_CONV_DATA_S)eina_list_nth(pData->bubble_list, 0);
+       if (!conv_data)
+               return;
+
+       msg_message_t msg = msg_new_message();
+       MSG_SENDINGOPT_S sendOpt = {0};
+
+       err = msg_get_message(pData->msgHandle, conv_data->msgId, msg, &sendOpt);
+
+       if (err != MSG_SUCCESS)
+               goto CONTACT_UPDATE_LEAVE;
+
+       index = msg_get_ith_contact_id(msg, 0);
+
+       if (index > 0) {
+               const char *display_name = NULL;
+               display_name = msg_get_ith_name(msg, 0);
+               bzero(pData->threadName, sizeof(pData->threadName));
+               if (display_name)
+                       snprintf(pData->threadName, DEF_THREAD_NAME_LEN, "%s", display_name);
+
+               pData->contactId = index;
+
+               if (pData->toolbar_item[CONTROLBAR_ITEM_4] && pData->viewmode != BUBBLE_EDIT_VIEW) {
+                       elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_4]);
+                       pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT_DETAIL, NULL, \
+                                                                                                               msg_ui_bubble_ctlbar_view_ct_detail_cb, pData->callback_data);
+               }
+       } else {
+               if (pData->contactId) {
+                       if (pData->threadAddr[0] != '\0') {
+                               if (pData->toolbar_item[CONTROLBAR_ITEM_4] && pData->viewmode != BUBBLE_EDIT_VIEW) {
+                                       elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_4]);
+                                       pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_ADD_TO_CONTACT, NULL, \
+                                                                                                                                                               msg_ui_bubble_ctlbar_add_to_contact_cb, pData->callback_data);
+                               }
+                       }
+
+                       bzero(pData->threadName, sizeof(pData->threadName));
+                       pData->contactId = 0;
+               }
+       }
+
+       msg_ui_bubble_composer_navi_title_set(pData->callback_data);
+
+CONTACT_UPDATE_LEAVE :
+       msg_release_message(&msg);
+       D_LEAVE;
+       return;
+}
+
+void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData)
+{
+       int r;
+       enum appcore_time_format timeformat;
+
+       r = appcore_get_timeformat(&timeformat);
+       if (r == MSG_UI_RET_ERR)
+               timeformat = APPCORE_TIME_FORMAT_UNKNOWN;
+
+       if (timeformat == APPCORE_TIME_FORMAT_24)
+               pData->time_fmt = MSG_TIME_FORMAT_24H;
+       else
+               pData->time_fmt = MSG_TIME_FORMAT_12H;
+
+       D_MSG("%s", pData->time_fmt == MSG_TIME_FORMAT_24H ? "TIME FORMAT = 24h" : "TIME FORMAT = 12h");
+}
+
+void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData)
+{
+       const char *locale;
+
+       locale = msg_common_get_default_locale();
+
+       if (locale) {
+               strncpy(pData->locale, locale, sizeof(pData->locale) - 1);
+       }
+
+       D_MSG("Locale = %s", pData->locale);
+}
+
diff --git a/composer/src/core/msg-ui-composer-core.c b/composer/src/core/msg-ui-composer-core.c
new file mode 100755 (executable)
index 0000000..2f5dc05
--- /dev/null
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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.
+ */
+
+/* includes*/
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-message.h"
+
+#include <MsgTypes.h>
+#include <MsgMmsTypes.h>
+#include <MapiStorage.h>
+#include <MapiTransport.h>
+#include <MapiControl.h>
+#include <MapiMessage.h>
+#include <MapiSetting.h>
+#include <MsgStorageTypes.h>
+#include <MsgSettingTypes.h>
+
+/* defines*/
+
+/* function definitions*/
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_open_msg_handle(MSG_HANDLE_T *msgHandle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msgHandle == NULL)
+               return COMPOSER_RETURN_FAIL;
+
+       if (msg_open_msg_handle(msgHandle) != 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] open msg handle error");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_close_msg_handle(MSG_HANDLE_T *msgHandle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msgHandle == NULL)
+               return COMPOSER_RETURN_FAIL;
+
+       if (msg_close_msg_handle(msgHandle)) {
+\rMSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] close msg handle error");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_create_new_message(msg_message_t *msgInfo)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       *msgInfo = msg_new_message();
+
+       if (*msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_new_message error !!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_release_message(msg_message_t msgInfo)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       if (msg_release_message(&msgInfo) != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_release_message error !!!");
+               return COMPOSER_RETURN_SUCCESS;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_message(MSG_HANDLE_T msgHandle, msg_message_t msgInfo, int msgID, MSG_SENDINGOPT_S *sendOpt)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!msgHandle || !msgInfo) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Message handle or Message info is NOT exist..");
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       err = msg_get_message(msgHandle, (MSG_MESSAGE_ID_T) msgID, msgInfo, sendOpt);
+
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] msg_get_message error [%d]", err);
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_MSG_TYPE_E msg_ui_comp_core_get_msg_type(msg_message_t msgInfo)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!msgInfo) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg data is NULL");
+               return COMPOSER_MSG_TYPE_INVALID;
+       }
+
+       int msg_type = msg_get_message_type(msgInfo);
+       COMPOSER_MSG_TYPE_E composer_msg_type = COMPOSER_MSG_TYPE_INVALID;
+
+       switch (msg_type) {
+       case MSG_TYPE_SMS:
+               composer_msg_type = COMPOSER_MSG_TYPE_SMS;
+               break;
+       default:
+               composer_msg_type = COMPOSER_MSG_TYPE_INVALID;
+               break;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return composer_msg_type;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_sms_body(msg_message_t msgInfo, char **sms_text)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!msgInfo) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Message info is NULL");
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       *sms_text = (char *)msg_sms_get_message_body(msgInfo);
+
+       if (*sms_text == NULL || strlen(*sms_text) == 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No SMS body text");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_add_recipient(msg_message_t msgInfo, char *number, COMPOSER_RECP_TYPE_E recp_type)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_RECIPIENT_TYPE_T recipient_type = MSG_RECIPIENTS_TYPE_UNKNOWN;
+
+       if (number == NULL || msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] number or msgInfo is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       switch (recp_type) {
+       case COMPOSER_RECP_TYPE_TO:
+
+               recipient_type = MSG_RECIPIENTS_TYPE_TO;
+               break;
+       case COMPOSER_RECP_TYPE_CC:
+
+               recipient_type = MSG_RECIPIENTS_TYPE_CC;
+               break;
+       case COMPOSER_RECP_TYPE_BCC:
+               recipient_type = MSG_RECIPIENTS_TYPE_CC;
+               break;
+       default:
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid recipient type");
+               return COMPOSER_RETURN_FAIL;
+
+       }
+
+       if (msg_add_address(msgInfo, number, recipient_type) != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_add_address error !!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_message_type(msg_message_t msgInfo, COMPOSER_MSG_TYPE_E comp_msg_type)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msgInfo == NULL)
+               return COMPOSER_RETURN_FAIL;
+
+       MSG_MESSAGE_TYPE_T msgType = MSG_TYPE_INVALID;
+
+       switch (comp_msg_type) {
+       case COMPOSER_MSG_TYPE_SMS:
+               msgType = MSG_TYPE_SMS;
+               break;
+       default:
+               msgType = MSG_TYPE_INVALID;
+               break;
+       }
+
+       if (msg_set_message_type(msgInfo, msgType) != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_set_message_type error !!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_sms_body(msg_message_t msgInfo, char *body_text)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo or body_text is NULL !!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       if (body_text == NULL) {
+               msg_sms_set_message_body(msgInfo, NULL, 0);
+       } else {
+               if (msg_sms_set_message_body(msgInfo, body_text, strlen(body_text)) != MSG_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_sms_set_message_body error ");
+                       return COMPOSER_RETURN_FAIL;
+\r}
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_msg_get_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_handle == NULL || opt == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_handle or opt is NULL");
+               return COMPOSER_RETURN_HANDLE_NOT_EXIST;
+       }
+
+       if (msg_get_config(msg_handle, opt) != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_get_config failed !!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_reg_sent_status_cb(MSG_HANDLE_T msg_handle, void *cbfunc, void *cbdata)
+{
+       if (msg_handle == NULL || cbfunc == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid arguments");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       if (msg_reg_sent_status_callback(msg_handle, cbfunc, cbdata) != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_reg_sent_status_callback error !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_comp_core_send_sms(MSG_HANDLE_T msg_handle, MSG_REQUEST_S *req)
+{
+       if (msg_handle == NULL || req == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid arguments");
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_handle : [%x], req [%x]", msg_handle, req);
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       err = msg_sms_send_message(msg_handle, req);
+
+       if (err == MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending success");
+               return COMPOSER_RETURN_SUCCESS;
+       } else if (err == MSG_ERR_INVALID_PARAMETER) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : INVALID_PARAM ", err);
+               return COMPOSER_RETURN_NULL_POINTER;
+       } else if (err == MSG_ERR_NO_SIM) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : NO SIM", err);
+               return COMPOSER_RETURN_NO_SIM;
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d]", err);
+               return COMPOSER_RETURN_FAIL;
+       }
+}
+
+
diff --git a/composer/src/external/msg-ui-composer-external.c b/composer/src/external/msg-ui-composer-external.c
new file mode 100755 (executable)
index 0000000..bfecead
--- /dev/null
@@ -0,0 +1,451 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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*/
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-external.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-body.h"
+#include "msg-ui-composer-recipient.h"
+#include <appsvc.h>
+#include <ui-gadget.h>
+#include <Ecore_X.h>
+
+#include <contacts-svc.h>
+#include <contacts-ug.h>
+
+
+static void __msg_ui_composer_external_closed(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       if (cd->loaded_aul || cd->state == COMPOSER_STATE_TYPE_RUNNING) {
+               if(!msg_ui_composer_popup_exist(cd)) {
+                       msg_ui_composer_last_focus_load(cd);
+               }
+       }
+
+       D_LEAVE;
+}
+
+static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *priv)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+
+       bool bMaxCount = false;
+       bool bInvalidNum = false;
+       bool bDup = false;
+
+       if (!ug || !priv || !result) {
+               D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result);
+               return;
+       }
+
+       cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       D_MSG_RETM_IF(cd->recipient == NULL, "Recipient Data is NULL");
+
+       int *list;
+       int len;
+       int i;
+       char *encoded_str;
+
+       encoded_str = (char *)bundle_get_val(result, MSG_BUNDLE_KEY_GET_SEL_LIST);
+       list = (int *)g_base64_decode(encoded_str, (gsize *)&len);
+
+       for (i = 0; i < len / sizeof(int); i++) {
+
+               if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) {
+                       bMaxCount = true;
+                       break;
+               }
+
+               CTSvalue *plog = NULL;
+               int ret = contacts_svc_get_phonelog(list[i], &plog);
+               if (ret == CTS_SUCCESS) {
+                       const char *number = contacts_svc_value_get_str(plog, CTS_PLOG_VAL_NUMBER_STR);
+                       if (number) {
+                               if (msg_ui_composer_recipient_duplicate_check(cd->recipient, number) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
+                                       bDup = true;
+                                       contacts_svc_value_free(plog);
+                                       continue;
+                               }
+
+                               if (msg_ui_composer_recipient_vaild_check(number) == EINA_FALSE) {
+                                       bInvalidNum = true;
+                               }
+
+                               int contact_id = contacts_svc_value_get_int(plog, CTS_PLOG_VAL_RELATED_ID_INT);
+
+                               msg_ui_composer_recipient_append(cd->recipient, number, contact_id);
+                       }
+
+                       contacts_svc_value_free(plog);
+               }
+       }
+
+       D_MSG("bMaxCount = %d, bInvalidNum = %d, bDup = %d", bMaxCount, bInvalidNum, bDup);
+       if (bMaxCount) {
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX);
+       } else if (bInvalidNum) {
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP);
+       } else if (bDup) {
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+       }
+
+       g_free(list);
+       D_LEAVE;
+}
+
+static void __ug_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+       Evas_Object *base;
+
+       if (!ug || !priv) {
+               D_MSG("");
+               return;
+       }
+
+       cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       base = ug_get_layout(ug);
+
+       if (!base) {
+               ug_destroy(ug);
+               D_MSG("");
+               return;
+       }
+
+       switch (mode) {
+       case UG_MODE_FULLVIEW:
+
+               evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               elm_win_resize_object_add(ug_get_window(), base);
+               evas_object_show(base);
+               break;
+       case UG_MODE_FRAMEVIEW:
+               break;
+       default:
+               break;
+       }
+
+       D_LEAVE;
+}
+
+static void __ug_closed_cb(struct ui_gadget *ug, void *priv)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+
+       if (cd->loaded_ug) {
+               ug_destroy(cd->loaded_ug);
+               cd->loaded_ug = NULL;
+       }
+
+       __msg_ui_composer_external_closed(cd);
+
+       D_LEAVE;
+}
+
+/*
+* Create External UG
+*/
+struct ui_gadget * msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+
+       struct ui_gadget *ug;
+       struct ug_cbs cbs = { 0, };
+
+       bundle *kb = bundle_create();
+
+       if (!kb)
+               return NULL;
+
+       char contactId[DEF_BUF_LEN_S] = { 0, };
+       char buf[DEF_BUF_LEN_D] = { 0, };
+
+       snprintf(contactId, sizeof(contactId), "%d", ct_id);
+       snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL);
+
+       bundle_add(kb, CT_UG_BUNDLE_TYPE, buf);
+       bundle_add(kb, CT_UG_BUNDLE_ID, contactId);
+
+       cbs.layout_cb = __ug_layout_cb;
+       cbs.result_cb = NULL;
+       cbs.destroy_cb = __ug_closed_cb;
+       cbs.priv = cd;
+
+       ug = ug_create(cd->ug, UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, kb, &cbs);
+       cd->loaded_ug = ug;
+       bundle_free(kb);
+
+       D_LEAVE;
+       return ug;
+}
+
+struct ui_gadget * msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int type, const char *str)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+       struct ui_gadget *ug;
+       struct ug_cbs cbs = { 0, };
+
+       bundle *kb = bundle_create();
+
+       if (!kb)
+               return NULL;
+
+       char buf[DEF_BUF_LEN_D] = { 0, };
+
+       if (type == CT_UG_REQUEST_UPDATE_WITH_EMAIL) {
+               snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_EMAIL);
+               bundle_add(kb, CT_UG_BUNDLE_TYPE, buf);
+               bundle_add(kb, CT_UG_BUNDLE_EMAIL, str);
+       } else if (type == CT_UG_REQUEST_UPDATE_WITH_NUM) {
+               snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM);
+               bundle_add(kb, CT_UG_BUNDLE_TYPE, buf);
+               bundle_add(kb, CT_UG_BUNDLE_NUM, str);
+       }
+       else {
+               bundle_free(kb);
+               return NULL;
+       }
+
+       cbs.layout_cb = __ug_layout_cb;
+       cbs.result_cb = NULL;
+       cbs.destroy_cb = __ug_closed_cb;
+       cbs.priv = cd;
+
+       ug = ug_create(cd->ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, kb, &cbs);
+       bundle_free(kb);
+       cd->loaded_ug = ug;
+
+       D_LEAVE;
+       return ug;
+}
+
+struct ui_gadget *ug_calllog_create(void *data)
+{
+       D_ENTER;
+
+       struct ui_gadget *ug;
+       struct ug_cbs cbs = { 0, };
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       bundle *kb = bundle_create();
+
+       cbs.layout_cb = __ug_layout_cb;
+       cbs.result_cb = __ug_calllog_return_cb;
+       cbs.destroy_cb = __ug_closed_cb;
+       cbs.priv = data;
+       ug = ug_create(cd->ug, TXT_UG_NAME_LOG, UG_MODE_FULLVIEW, kb, &cbs);
+
+       bundle_free(kb);
+
+       return ug;
+}
+
+static void __ug_contacts_checklist_result_cb(struct ui_gadget *ug, bundle *result, void *priv)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(!ug,"ug data is NULL");
+       D_MSG_RETM_IF(!result,"bundle result data is NULL");
+       D_MSG_RETM_IF(!priv,"priv data is NULL");
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       D_MSG_RETM_IF(cd->recipient == NULL,"Recipient data is NULL");
+
+       int contact_index;
+       int *num_id_list = NULL;
+       int len, i;
+
+       const char *number_str;
+       const char *bundle_val;
+
+       bool bMaxCount = false;
+       bool bInvalidNum = false;
+       bool bDup = false;
+
+       bundle_val = bundle_get_val(result, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST);
+       D_MSG_RETM_IF(!bundle_val,"bundle_val data is NULL");
+
+       num_id_list = (int *)g_base64_decode(bundle_val, (gsize *)&len);
+       D_MSG_RETM_IF(!num_id_list,"number_id list is NULL");
+
+       for (i = 0; i < len / sizeof(int); i++) {
+
+               if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) {
+                       bMaxCount = true;
+                       break;
+               }
+
+               CTSvalue *value = NULL;
+               contact_index = contacts_svc_get_contact_value(CTS_GET_NUMBER_VALUE, num_id_list[i], &value);
+               if (contact_index <= 0 ) {
+                       D_EMSG("Fail to get contact value");
+                       continue;
+               }
+
+               number_str = contacts_svc_value_get_str(value, CTS_NUM_VAL_NUMBER_STR);
+               D_MSG("selected number_id = %d, contact_id = %d, number = %s", num_id_list[i], contact_index, number_str);
+
+               if (number_str) {
+                       if (msg_ui_composer_recipient_duplicate_check(cd->recipient, number_str) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
+                               bDup = true;
+                               contacts_svc_value_free(value);
+                               continue;
+                       }
+
+                       if (msg_ui_composer_recipient_vaild_check(number_str) == EINA_FALSE) {
+                               bInvalidNum = true;
+                       }
+
+                       msg_ui_composer_recipient_append(cd->recipient, number_str, contact_index);
+
+               } else {
+                       D_EMSG("contact index[%d] is unuseable !!", contact_index);
+               }
+
+               contacts_svc_value_free(value);
+       }
+
+       D_MSG("bMaxCount = %d, bInvalidNum = %d, bDup = %d", bMaxCount, bInvalidNum, bDup);
+       if (bMaxCount) {
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX);
+       } else if (bInvalidNum) {
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP);
+       } else if (bDup) {
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+       }
+
+       g_free(num_id_list);
+
+       D_LEAVE;
+}
+
+struct ui_gadget *ug_contact_checklist_create(void *data)
+{
+       D_ENTER;
+
+       struct ui_gadget *ug;
+       struct ug_cbs cbs = {0,};
+
+       bundle *b;
+
+       b = bundle_create();
+       if (!b)
+               return NULL;
+
+       char contact_ug[DEF_BUF_LEN] = { 0, };
+
+       snprintf(contact_ug, sizeof(contact_ug)-1, "%d", CT_UG_REQUEST_CHECK_FOR_NUMBER);
+       bundle_add(b, MSG_BUNDLE_KEY_TYPE, contact_ug);
+       bundle_add(b, MSG_BUNDLE_KEY_REQUEST_TYPE, MSG_BUNDLE_VALUE_CONTACT_CHECK_LIST);
+
+       cbs.layout_cb = __ug_layout_cb;
+       cbs.result_cb = __ug_contacts_checklist_result_cb;
+       cbs.destroy_cb = __ug_closed_cb;
+       cbs.priv = data;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       ug = ug_create(cd->ug, TXT_UG_NAME_CONTACT, UG_MODE_FULLVIEW, b, &cbs);
+
+       bundle_free(b);
+
+       D_LEAVE;
+       return ug;
+}
+
+struct ui_gadget *msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+
+       struct ui_gadget *ug;
+       struct ug_cbs cbs;
+
+       cbs.layout_cb = __ug_layout_cb;
+       cbs.result_cb = NULL;
+       cbs.destroy_cb = __ug_closed_cb;
+       cbs.priv = cd;
+
+       ug = ug_create(cd->ug, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, b, &cbs);
+       cd->loaded_ug = ug;
+       D_LEAVE;
+       return ug;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_external_ug_call(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_EXT_TYPE_E ext_type, void *reserved)
+{
+       D_ENTER;
+
+       COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+       struct ui_gadget *external_ug = NULL;
+
+       switch (ext_type) {
+       case COMPOSER_EXT_TYPE_LOG:
+               external_ug = ug_calllog_create(cd);
+               break;
+
+       case COMPOSER_EXT_TYPE_CONTACTLIST:
+               external_ug = ug_contact_checklist_create(cd);
+               break;
+       default:
+               D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type);
+               ret = COMPOSER_RETURN_FAIL;
+               break;
+       }
+
+       if (external_ug) {
+               cd->loaded_ug = external_ug;
+               elm_object_focus_set(msg_ui_composer_last_focused_entry_get(cd), EINA_FALSE);
+       }
+
+       D_LEAVE;
+       return ret;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_external_call(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_EXT_TYPE_E ext_type, void *reserved)
+{
+       D_ENTER;
+
+       COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+       D_MSG("Launch external call type[%d]",ext_type);
+
+       switch (ext_type) {
+       case COMPOSER_EXT_TYPE_LOG:
+       case COMPOSER_EXT_TYPE_CONTACTLIST:
+               ret = msg_ui_composer_external_ug_call(cd, ext_type, reserved);
+               break;
+       default:
+               D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type);
+               ret = COMPOSER_RETURN_FAIL;
+               break;
+       }
+
+       D_LEAVE;
+       return ret;
+}
+
diff --git a/composer/src/gadget/msg-ui-composer-gadget.c b/composer/src/gadget/msg-ui-composer-gadget.c
new file mode 100755 (executable)
index 0000000..1e840c5
--- /dev/null
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-data.h"
+#include "msg-ui-composer-main.h"
+#include "msg-ui-composer-core.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-recipient.h"
+#include <Ecore_X.h>
+
+#ifndef UG_MODULE_API
+#define UG_MODULE_API  __attribute__ ((visibility("default")))
+#endif
+
+static void __base_layout_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       if (!pcomp_data)
+               return;
+
+       msg_ui_composer_destroy(pcomp_data);
+
+       D_LEAVE;
+}
+
+static void *__msg_ui_composer_on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *pcomp_data;
+
+       if (ug == NULL || priv == NULL) {
+               D_EMSG("[ASSERT] ug = %p, priv = %p", ug, priv);
+               return NULL;
+       }
+
+       bindtextdomain("message", LOCALEDIR);
+
+       pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       pcomp_data->ug = ug;
+
+       pcomp_data->main_window = ug_get_window();
+
+       if (pcomp_data->main_window == NULL) {
+               D_EMSG("[ASSERT] main window is NULL");
+               return NULL;
+       }
+
+       pcomp_data->base = msg_ui_composer_layout_create(pcomp_data->main_window, true);
+       if (pcomp_data->base == NULL) {
+               return NULL;
+       }
+
+       pcomp_data->bg = msg_ui_composer_bg_create(pcomp_data->base);
+       elm_object_part_content_set(pcomp_data->base, "elm.swallow.bg", pcomp_data->bg);
+       elm_object_style_set(pcomp_data->bg, "edit_mode");
+
+       if (g_strcmp0(bundle_get_val(data, MSG_BUNDLE_KEY_FROM), MSG_BUNDLE_VALUE_INTERNAL) == 0) {
+               pcomp_data->isMsgInternal = true;
+       } else {
+               pcomp_data->isMsgInternal = false;
+       }
+
+       if (bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_ID) || bundle_get_val(data, MSG_BUNDLE_KEY_MSG_ID)) {
+               pcomp_data->msg_ug_mode = MSG_UG_MODE_BUBBLE_COMPOSER;
+       } else {
+               if (pcomp_data->isMsgInternal == true) {
+                       pcomp_data->msg_ug_mode = MSG_UG_MODE_FULL_COMPOSER;
+               } else {
+                       pcomp_data->msg_ug_mode = MSG_UG_MODE_ONLY_COMPOSER;
+               }
+       }
+
+       D_MSG("UG MODE %d[Internal = %d]", pcomp_data->msg_ug_mode, pcomp_data->isMsgInternal);
+
+       pcomp_data->isFullview = true;
+
+       evas_object_event_callback_add(pcomp_data->base, EVAS_CALLBACK_DEL, __base_layout_delete_cb, pcomp_data);
+
+       if (msg_ui_composer_init(pcomp_data) != COMPOSER_RETURN_SUCCESS) {
+               D_EMSG("msg_ui_composer_init error");
+               return NULL;
+       }
+
+       if (msg_ui_composer_create(pcomp_data) != COMPOSER_RETURN_SUCCESS) {
+               D_EMSG("creating main layout failed");
+               return NULL;
+       }
+
+       return pcomp_data->base;
+}
+
+static void __msg_ui_composer_on_start(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+
+       msg_ui_composer_start(pcomp_data, data);
+
+       D_LEAVE;
+}
+
+static void __msg_ui_composer_on_pause(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       D_MSG_RETM_IF(cd == NULL, "Composer data is NULL");
+       D_MSG_RETM_IF(cd->state == COMPOSER_STATE_TYPE_DESTROY, "Composer state is already Destroy");
+
+       cd->state = COMPOSER_STATE_TYPE_PAUSE;
+
+       if (cd->bubble_data)
+               cd->bubble_data->ug_state = BUBBLE_UG_PAUSE;
+
+       D_LEAVE;
+}
+
+static void __msg_ui_composer_on_resume(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       D_MSG_RETM_IF(cd == NULL, "Composer data is NULL");
+       D_MSG_RETM_IF(cd->state == COMPOSER_STATE_TYPE_DESTROY, "Composer state is already Destroy");
+
+       cd->state = COMPOSER_STATE_TYPE_RUNNING;
+       cd->loaded_aul = FALSE;
+
+       if (cd->bubble_data)
+               cd->bubble_data->ug_state = BUBBLE_UG_START;
+
+       if (cd->recipient)
+               msg_ui_composer_recipient_update(cd->recipient);
+
+       D_LEAVE;
+}
+
+static void __msg_ui_composer_on_destroy(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       D_MSG_RETM_IF(cd == NULL, "Composer data is NULL");
+       D_MSG_RETM_IF(cd->state == COMPOSER_STATE_TYPE_DESTROY, "Composer state is already Destroy");
+
+       cd->state = COMPOSER_STATE_TYPE_DESTROY;
+
+       if (cd->bubble_data)
+               cd->bubble_data->ug_state = BUBBLE_UG_DESTROY;
+
+       msg_ui_bubble_deinit_bubble_data(cd->bubble_data);
+
+       if (cd->base) {
+               evas_object_del(cd->base);
+               cd->base = NULL;
+       }
+
+       D_LEAVE;
+}
+
+static void __msg_ui_composer_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+       if (msg) {
+               if (bundle_get_val(msg, MSG_BUNDLE_KEY_THREAD_ID) || bundle_get_val(msg, MSG_BUNDLE_KEY_MSG_ID)) {
+                       if (pcomp_data->msg_bundle) {
+                               bundle_free(pcomp_data->msg_bundle);
+                       }
+
+                       pcomp_data->msg_bundle = bundle_dup(msg);
+                       msg_ui_composer_reset_request(pcomp_data);
+
+               } else {
+                       msg_ui_composer_reset(pcomp_data, msg);
+               }
+       }
+
+       D_LEAVE;
+}
+
+
+static void __msg_ui_composer_on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv)
+{
+       D_ENTER;
+       switch (event) {
+       case UG_EVENT_LOW_MEMORY:
+               break;
+       case UG_EVENT_LOW_BATTERY:
+               break;
+       case UG_EVENT_LANG_CHANGE:
+               break;
+       default:
+               break;
+       }
+}
+
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+       if (ops == NULL) {
+               D_EMSG("[ERROR] OPS is null");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       MSG_COMPOSER_VIEW_DATA_S *pcomp_data = NULL;
+       pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)calloc(1, sizeof(MSG_COMPOSER_VIEW_DATA_S));
+
+       if (!pcomp_data) {
+               D_EMSG("[ERROR] pcomp_data calloc failed");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       ops->create = __msg_ui_composer_on_create;
+       ops->start = __msg_ui_composer_on_start;
+       ops->pause = __msg_ui_composer_on_pause;
+       ops->resume = __msg_ui_composer_on_resume;
+       ops->destroy = __msg_ui_composer_on_destroy;
+       ops->message = __msg_ui_composer_on_message;
+       ops->event = __msg_ui_composer_on_event;
+       ops->key_event = NULL;
+       ops->priv = (void *)pcomp_data;
+       ops->opt = UG_OPT_INDICATOR_PORTRAIT_ONLY;
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+       if (ops == NULL) {
+               D_EMSG( "[ERROR] OPS is null");
+               return;
+       }
+
+       MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)ops->priv;
+
+       if (pcomp_data) {
+               free(pcomp_data);
+               ops->priv = NULL;
+       }
+
+       D_LEAVE;
+}
diff --git a/composer/src/message/msg-ui-composer-message.c b/composer/src/message/msg-ui-composer-message.c
new file mode 100755 (executable)
index 0000000..c58160d
--- /dev/null
@@ -0,0 +1,393 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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.
+ */
+
+/* includes*/
+#include "msg-ui-composer-core.h"
+#include "msg-ui-composer-body.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-message-data.h"
+#include "msg-ui-composer-common.h"
+
+#include <MapiMessage.h>
+#include <MapiTransport.h>
+#include <glib-object.h>
+#include <glib.h>
+#include <MsgSettingTypes.h>
+
+
+/* globals */
+static MSG_COMP_MSG_DATA_S *msg_data = NULL;
+
+/* function defines*/
+
+/****************************************************
+ *
+ *     UI HANDLING
+ *
+ *****************************************************/
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_init()
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data != NULL)
+               free(msg_data);
+
+       msg_data = (MSG_COMP_MSG_DATA_S *) calloc(1, sizeof(MSG_COMP_MSG_DATA_S));
+
+       if (msg_data == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data calloc error");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       memset(msg_data, 0x00, sizeof(MSG_COMP_MSG_DATA_S));
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_destroy()
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] msg_data is already NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+       /* free recipient data */
+       if (msg_data->recp_list != NULL) {
+               g_slist_foreach(msg_data->recp_list, (GFunc) free, NULL);
+               g_slist_free(msg_data->recp_list);
+               msg_data->recp_list = NULL;
+       }
+       /* free sms data. */
+       if (msg_data->sms_data.body_text != NULL) {
+               free(msg_data->sms_data.body_text);
+               msg_data->sms_data.body_text = NULL;
+       }
+
+       free(msg_data);
+       msg_data = NULL;
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_add_address(char *number)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (number == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] argument [number] is NULL !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       char *address = strdup(number);
+       msg_data->recp_list = g_slist_append(msg_data->recp_list, (void *)address);
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_E msg_type)
+{
+       if (!msg_data) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL // need to init");
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       msg_data->msg_type = msg_type;
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_sms_body(char *body_text)
+{
+       if (body_text == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] argument [body_text] is NULL !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       msg_data->sms_data.body_text = strdup(body_text);
+       msg_data->sms_data.body_length = strlen(body_text);
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+
+/*****************************************************
+ *
+ *      Framework message Handling
+ *
+ *******************************************************/
+
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_set_recipient()
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data == NULL || msg_data->msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       int count = g_slist_length(msg_data->recp_list);
+       int i = 0;
+
+       for (i = 0; i < count; i++) {
+               char *address = (char *)g_slist_nth_data(msg_data->recp_list, i);
+               if (msg_ui_comp_core_add_recipient(msg_data->msgInfo, address, COMPOSER_RECP_TYPE_TO) != COMPOSER_RETURN_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] ADD RECIPIENT error");
+                       return COMPOSER_RETURN_FAIL;
+               }
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_create_new_message()
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data->msgInfo != NULL) {
+               msg_ui_comp_core_release_message(msg_data->msgInfo);
+               msg_data->msgInfo = NULL;
+       }
+
+       if (msg_ui_comp_core_create_new_message(&msg_data->msgInfo)
+           != COMPOSER_RETURN_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_ui_comp_core_create_new_message is NULL !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message()
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data->msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is already destroyed !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       if (msg_ui_comp_core_release_message(msg_data->msgInfo)
+           != COMPOSER_RETURN_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is already destroyed !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt, int type)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_handle == NULL || opt == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message handle or option data is NULL");
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+
+       switch (type) {
+       case COMPOSER_CONFIG_TYPE_GENERAL:
+               memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_GENERAL_OPT_S));
+               opt->type = MSG_GENERAL_OPT;
+               break;
+       case COMPOSER_CONFIG_TYPE_SMS_SEND:
+               memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_SMS_SENDOPT_S));
+               opt->type = MSG_SMS_SENDOPT;
+               break;
+       case COMPOSER_CONFIG_TYPE_SMSC_LIST:
+               memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_SMSC_LIST_S));
+               opt->type = MSG_SMSC_LIST;
+               break;
+       case COMPOSER_CONFIG_TYPE_PUSHMSG:
+               memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_PUSHMSG_OPT_S));
+               opt->type = MSG_PUSHMSG_OPT;
+               break;
+       case COMPOSER_CONFIG_TYPE_CBMSG:
+               memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_CBMSG_OPT_S));
+               opt->type = MSG_CBMSG_OPT;
+               break;
+       default:
+               ret = COMPOSER_RETURN_FAIL;
+               break;
+       }
+
+       if (msg_ui_comp_core_msg_get_config(msg_handle, opt)
+           != COMPOSER_RETURN_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] getting message option failed.");
+               ret = COMPOSER_RETURN_FAIL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return ret;
+}
+
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_sms_message(MSG_HANDLE_T msg_handle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data == NULL || msg_data->msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+       /* set message type to SMS */
+       if (msg_ui_comp_core_set_message_type(msg_data->msgInfo, COMPOSER_MSG_TYPE_SMS)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_message_type error !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+       /* set message body text */
+       if (msg_ui_comp_core_set_sms_body(msg_data->msgInfo, msg_data->sms_data.body_text)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_sms_body error !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+       /* set recipient */
+       if (__msg_ui_composer_set_recipient(msg_data) != COMPOSER_RETURN_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]__msg_ui_composer_set_recipient error !!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(MSG_HANDLE_T msg_handle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data == NULL || msg_data->msgInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message is not initialized");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+       MSG_REQUEST_S req = { 0 };
+
+       req.msg = msg_data->msgInfo;
+       req.sendOpt.bSetting = false;
+
+       if (msg_is_sms(req.msg)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] try to send sms");
+               ret = msg_ui_comp_core_send_sms(msg_handle, &req);
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] error message type");
+               msg_ui_comp_core_release_message(msg_data->msgInfo);
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       return ret;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_handle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not send message,,, msg_data is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+
+       /* 1. create a new message (create msg_message_t) */
+       if(msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS){
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       /* 2. make message */
+       if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) {
+               if (__msg_ui_composer_make_sms_message(msg_handle) != COMPOSER_RETURN_SUCCESS)
+                       ret =  COMPOSER_RETURN_FAIL;
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type");
+               ret = COMPOSER_RETURN_FAIL;
+       }
+
+       /*3. send message */
+       if(ret != COMPOSER_RETURN_FAIL) {
+               ret = __msg_ui_composer_send(msg_handle);
+       }
+       /*4. release message */
+       msg_ui_comp_core_release_message(msg_data->msgInfo);
+       msg_data->msgInfo = NULL;
+
+       return ret;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(MSG_HANDLE_T msg_handle, int msgID)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!msg_handle) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_handle is NULL");
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       msg_message_t load_msg = NULL;
+
+       MSG_SENDINGOPT_S sendOpt = { 0, };
+
+       /* create new message */
+       if (msg_ui_comp_core_create_new_message(&load_msg)
+           != COMPOSER_RETURN_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] message create message failed.");
+               return COMPOSER_RETURN_FAIL;
+       }
+       /* load message */
+       if (msg_ui_comp_core_get_message(msg_handle, load_msg, msgID, &sendOpt)
+           != COMPOSER_RETURN_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] msg_get_message failed");
+               return COMPOSER_RETURN_FAIL;
+       }
+       /* load "FROM" address */
+
+       /* load message type */
+       COMPOSER_MSG_TYPE_E msg_type = msg_ui_comp_core_get_msg_type(load_msg);
+
+       msg_data->msg_type = msg_type;
+
+       if (msg_type == COMPOSER_MSG_TYPE_SMS) {
+
+               char *body_text = NULL;
+               msg_ui_comp_core_get_sms_body(load_msg, &body_text);
+
+               if (body_text && strlen(body_text) > 0) {
+                       msg_data->sms_data.body_text = strdup(body_text);
+                       msg_data->sms_data.body_length = strlen(body_text);
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid message type");
+               msg_ui_comp_core_release_message(load_msg);
+               return COMPOSER_RETURN_INVALID_MSG_TYPE;
+       }
+
+       msg_ui_comp_core_release_message(load_msg);
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_loaded_data(void *composer_data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) {
+               msg_ui_composer_body_set_loaded_text(composer_data, msg_data->sms_data.body_text, 0);
+               return COMPOSER_RETURN_SUCCESS;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return COMPOSER_RETURN_SUCCESS;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-body-callback.c b/composer/src/ui-composer/msg-ui-composer-body-callback.c
new file mode 100755 (executable)
index 0000000..d1d030b
--- /dev/null
@@ -0,0 +1,286 @@
+/*\r
+ * Copyright 2012  Samsung Electronics Co., Ltd\r
+ *\r
+ * Licensed under the Flora License, Version 1.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://www.tizenopensource.org/license\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+ /* includes */\r
+#include "msg-ui-composer-body.h"\r
+#include "msg-ui-composer-recipient.h"\r
+#include "msg-ui-composer-main.h"\r
+#include "msg-ui-composer-body-page.h"\r
+#include "msg-ui-composer-body-callback.h"\r
+#include "msg-ui-composer-common.h"\r
+\r
+#include "msg-ui-composer-message.h"\r
+#include "msg-ui-composer-popup.h"\r
+#include "msg-ui-composer-util.h"\r
+#include "msg-ui-composer-external.h"\r
+\r
+\r
+/*==================================================================================================\r
+*                                                              FUNCTION IMPLEMENTATIONS\r
+*==================================================================================================*/\r
+static void __nosim_popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)\r
+{\r
+       D_ENTER;\r
+\r
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;\r
+       D_MSG_RETM_IF(cd == NULL, "Composer data is NULL");\r
+\r
+       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER) {\r
+               msg_ui_composer_change_bubble_view(cd);\r
+       } else if (cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {\r
+               ug_destroy_me(cd->ug);\r
+       } else {\r
+               elm_object_disabled_set(cd->send_button, EINA_FALSE);\r
+       }\r
+       msg_ui_composer_clear(cd);\r
+       D_LEAVE;\r
+}\r
+\r
+void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)\r
+{\r
+       D_ENTER;\r
+       D_MSG_RETM_IF(data == NULL, "Composer Data is NULL");\r
+\r
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;\r
+\r
+       if (cd->send_button)\r
+               elm_object_disabled_set(cd->send_button, EINA_TRUE);\r
+\r
+       /*Check recipient available sending*/\r
+       RECIPIENT_S *rd = cd->recipient;\r
+       if (rd) {\r
+               /*add recipient, if entry text exist*/\r
+               Evas_Object *entry = elm_multibuttonentry_entry_get(rd->mbe);\r
+               char *entry_txt = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));\r
+               if (entry_txt) {\r
+                       if (strlen(entry_txt) > 0) {\r
+                               if (NULL == elm_multibuttonentry_item_append(rd->mbe, entry_txt, NULL, NULL)) {\r
+                                       g_free(entry_txt);\r
+                                       goto error_return;\r
+                               }\r
+                       }\r
+                       g_free(entry_txt);\r
+               }\r
+\r
+               /*check recipient count is zero*/\r
+               if (msg_ui_composer_recipient_count_get(rd) == 0) {\r
+                       D_EMSG("there is no recipient");\r
+                       msg_ui_composer_status_popup_show(cd, "there is no recipient", COMPOSER_STATUS_POPUP_DEFAULT_TIME); // FIXME :: should change msg from STMS\r
+               }\r
+\r
+               /*check invalid recipient*/\r
+               Eina_List * invalid_list = msg_ui_composer_recipient_invalid_recipient_list_get(rd);\r
+               if (invalid_list) {\r
+                       RECIPIENT_ITEM_S *r_item;\r
+                       char *ret = NULL;\r
+                       char *err_msg = NULL;\r
+                       int inval_count = 0;\r
+\r
+                       EINA_LIST_FREE(invalid_list, r_item) {\r
+                               if (r_item) {\r
+                                       if (inval_count == 0) {\r
+                                               ret = g_strconcat(r_item->display_name, NULL);\r
+                                       } else {\r
+                                               ret = g_strconcat(ret, ", ", r_item->display_name, NULL);\r
+                                       }\r
+\r
+                                       D_MSG("invalid display name %s type %d", r_item->display_name, r_item->type);\r
+\r
+                                       inval_count++;\r
+                               }\r
+                       }\r
+\r
+                       D_MSG("ret name %s ", ret);\r
+\r
+                       if (inval_count > 1){\r
+                               err_msg = g_strconcat(MSGC_STR_NOTI_RECIPIENTS_INVALID,"(", ret, ")", NULL);\r
+                       } else {\r
+                               err_msg = g_strconcat(MSGC_STR_NOTI_RECIPIENT_INVALID,"(", ret, ")", NULL);\r
+                       }\r
+\r
+                       if (err_msg != NULL) {\r
+                               Evas_Object *popup = msg_ui_composer_status_popup_show(cd, err_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME);\r
+                               Evas_Object * btn1 = elm_button_add(popup);\r
+                               elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);\r
+                               elm_object_part_content_set(popup, "button1", btn1);\r
+                               evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);\r
+                               g_free(err_msg);\r
+                       }\r
+\r
+                       if (ret != NULL)\r
+                               g_free(ret);\r
+\r
+                       goto error_return;\r
+               }\r
+       }\r
+\r
+\r
+       /*Make message*/\r
+       msg_ui_composer_message_init();\r
+\r
+       if (msg_ui_composer_recipient_read_data(cd) != COMPOSER_RETURN_SUCCESS) {\r
+               D_EMSG("Make recipient data Error");\r
+               goto error_return;\r
+       }\r
+\r
+       if (__msg_ui_composer_body_read_data(cd) != COMPOSER_RETURN_SUCCESS) {\r
+               D_EMSG("Make body data Error");\r
+               goto error_return;\r
+       }\r
+\r
+       /*Send message*/\r
+       COMPOSER_RETURN_TYPE_E ret = msg_ui_composer_message_make_and_send(cd->msg_handle);\r
+\r
+       if (ret == COMPOSER_RETURN_SUCCESS) {\r
+               D_MSG("Send Success");\r
+\r
+               if (cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {\r
+                       ug_destroy_me(cd->ug);\r
+               } else if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER) {\r
+\r
+                       RECIPIENT_ITEM_S r_item = {0,};\r
+\r
+                       if (cd->recipient) {\r
+                               Elm_Object_Item *mbe_item = elm_multibuttonentry_first_item_get(cd->recipient->mbe);\r
+                               if (mbe_item) {\r
+                                       RECIPIENT_ITEM_S *recipient_item = elm_object_item_data_get(mbe_item);\r
+                                       if (recipient_item) {\r
+                                               memcpy(&r_item, recipient_item, sizeof(RECIPIENT_ITEM_S));\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       msg_ui_composer_change_bubble_view(cd);\r
+                       int tid = msg_ui_composer_thread_id_get(cd->msg_handle, r_item.recipient);\r
+                       if (tid <= 0) {\r
+                               D_EMSG("Can not find thread id!!");\r
+                               ug_destroy_me(cd->ug);\r
+                               return;\r
+                       }\r
+\r
+                       char *recipient = msg_ui_composer_thread_recipient_get(cd->msg_handle, tid);\r
+                       if (recipient == NULL) {\r
+                               D_EMSG("Can not find thread address!!");\r
+                               ug_destroy_me(cd->ug);\r
+                               return;\r
+                       }\r
+\r
+                       msg_ui_composer_recipient_set_recipient(cd, recipient);\r
+                       msg_ui_composer_bubble_data_set(cd, recipient, r_item.display_name, r_item.index, tid);\r
+                       msg_ui_bubble_start_view(cd->bubble_data);\r
+\r
+                       msg_ui_bubble_composer_navi_title_set((void *)cd);\r
+                       msg_ui_bubble_add_normal_control_item(cd->bubble_data);\r
+\r
+                       g_free(recipient);\r
+                       msg_ui_composer_clear(cd);\r
+               } else {\r
+                       msg_ui_composer_clear(cd);\r
+               }\r
+\r
+       } else {\r
+\r
+               if (ret == COMPOSER_RETURN_NO_SIM) {\r
+                       D_MSG("Send Fail : NO SIM");\r
+                       Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_NOSIM, COMPOSER_STATUS_POPUP_DEFAULT_TIME);\r
+                       Evas_Object * btn1 = elm_button_add(popup);\r
+                       elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);\r
+                       elm_object_part_content_set(popup, "button1", btn1);\r
+                       evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);\r
+                       evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __nosim_popup_delete_cb, cd);\r
+               } else {\r
+                       D_MSG("Send Fail : Unable Send");\r
+                       msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_UNABLE_SEND, COMPOSER_STATUS_POPUP_DEFAULT_TIME);\r
+               }\r
+\r
+               goto error_return;\r
+       }\r
+\r
+       msg_ui_composer_message_destroy();\r
+       D_LEAVE;\r
+       return;\r
+\r
+error_return:\r
+       msg_ui_composer_message_destroy();\r
+\r
+       if (cd->send_button)\r
+               elm_object_disabled_set(cd->send_button, EINA_FALSE);\r
+\r
+       D_LEAVE;\r
+}\r
+\r
+void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)\r
+{\r
+       D_ENTER;\r
+       D_MSG_RETM_IF(data == NULL, "Composer Data is NULL");\r
+       D_MSG_RETM_IF(obj == NULL, "entry obj is NULL");\r
+\r
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;\r
+       MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;\r
+\r
+       page_data = evas_object_data_get(obj, "page_data");\r
+       if (page_data == NULL)\r
+               return;\r
+\r
+       char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));\r
+       if (body_text == NULL)\r
+               return;\r
+\r
+       int text_len = strlen(body_text);\r
+       if (text_len <= 0) {\r
+               page_data->text_info.encode = COMPOSER_CHAR_ENCODE_UNICODE;\r
+               page_data->text_info.char_count = 0;\r
+       } else {\r
+               unsigned char ucs2_text[4000] = {0,};\r
+               int ucs2_len = msg_ui_composer_convert_UTF8ToUCS2(ucs2_text, sizeof(ucs2_text), body_text, text_len);\r
+               page_data->text_info.encode = msg_ui_composer_body_entry_char_count(cd, ucs2_text, ucs2_len, &page_data->text_info.char_count);\r
+       }\r
+       g_free(body_text);\r
+\r
+       msg_ui_composer_body_info_area_update(cd);\r
+\r
+       if (msg_ui_composer_common_is_send_possible(cd)) {\r
+               elm_object_disabled_set(cd->send_button, EINA_FALSE);\r
+               edje_object_signal_emit(_EDJ(cd->ly_body), "body_contract","*"); // FIXME :: check status for signal emit\r
+       } else {\r
+               elm_object_disabled_set(cd->send_button, EINA_TRUE);\r
+       }\r
+\r
+       D_LEAVE;\r
+}\r
+\r
+void msg_ui_composer_body_entry_focused_cb(void *data, Evas_Object *obj, void *event_info)\r
+{\r
+       D_ENTER;\r
+\r
+       if (!data) {\r
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT} data is NULL");\r
+               return;\r
+       }\r
+\r
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;\r
+\r
+       if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {\r
+\r
+               cd->current_edit_entry = 0;\r
+       } else {\r
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] message composer invalid message type");\r
+       }\r
+\r
+       msg_ui_composer_last_focused_entry_set(data, obj);\r
+       D_LEAVE;\r
+}\r
+\r
diff --git a/composer/src/ui-composer/msg-ui-composer-body-page.c b/composer/src/ui-composer/msg-ui-composer-body-page.c
new file mode 100755 (executable)
index 0000000..156e87a
--- /dev/null
@@ -0,0 +1,436 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-body.h"
+#include "msg-ui-composer-body-page.h"
+#include "msg-ui-composer-body-callback.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-recipient.h"
+
+/*==================================================================================================
+                                     STRUCTURES
+==================================================================================================*/
+/* ETSI GSM 03.38 GSM 7 bit Default Alphabet Table -> UCS2*/
+static const unsigned short g_GSM7BitToUCS2[] =
+{
+       /* @ */
+       0x0040, 0x00A3, 0x0024, 0x00A5, 0x00E8, 0x00E9, 0x00F9, 0x00EC, 0x00F2, 0x00C7, 0x000A, 0x00D8, 0x00F8, 0x000D, 0x00C5, 0x00E5,
+       /* ��*/
+       0x0394, 0x005F, 0x03A6, 0x0393, 0x039B, 0x03A9, 0x03A0, 0x03A8, 0x03A3, 0x0398, 0x039E, 0x001B, 0x00C6, 0x00E6, 0x00DF, 0x00C9,
+       /* SP */
+       0x0020, 0x0021, 0x0022, 0x0023, 0x00A4, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       /* 0 */
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+       /* ��*/
+       0x00A1, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+       /* P */
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x00C4, 0x00D6, 0x00D1, 0x00DC, 0x00A7,
+       /* ��*/
+       0x00BF, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       /* p */
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x00E4, 0x00F6, 0x00F1, 0x00FC, 0x00E0
+};
+
+/*GSM 7 bit Default Alphabet Extension Table -> UCS2*/
+static const unsigned short g_GSM7BitExtToUCS2[] =
+{
+       /* 0x0020 -> (SP) for invalid code*/                                                                                             /* Page Break */
+       0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x000C, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+                                                                       /* ^ */
+       0x0020, 0x0020, 0x0020, 0x0020, 0x005E, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x001B, 0x0020, 0x0020, 0x0020, 0x0020,
+                                                                                                                               /* { */ /* } */                                           /* \ */
+       0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x007B, 0x007D, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x005C,
+                                                                                                                                                       /* [ */ /* ~ */ /* ] */
+       0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x005B, 0x007E, 0x005D, 0x0020,
+       /* | */
+       0x007C, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+       0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+                                                                               /* ��*/
+       0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x20AC, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+       0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020
+};
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_sms_body(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       if (!cd) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer view data is NULL ");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+       MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+
+       Evas_Object *entry = NULL;
+
+       page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, 0);
+       if (!page_data) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page data is not exist");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       entry = page_data->entry;
+       if (!entry) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] sms entry is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       char *entry_text = g_strdup(elm_entry_entry_get(entry));
+       char *sms_text = NULL;
+       int sms_length = 0;
+
+       if (entry_text) {
+               convert_ps_to_br(entry_text);
+               sms_text = elm_entry_markup_to_utf8(entry_text);
+               if (sms_text == NULL)
+                       return COMPOSER_RETURN_FAIL;
+
+               sms_length = strlen(sms_text);
+
+               if (sms_length > 0) {
+                       msg_ui_composer_message_set_sms_body(sms_text);
+               }
+
+               if (sms_text)
+                       g_free(sms_text);
+
+               g_free(entry_text);
+       } else {
+
+               sms_length = 0;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+int msg_ui_composer_body_entry_char_count(void *data, const unsigned char *body_ucs2_text, int ucs2_len, int *char_count)
+{
+       D_ENTER;
+
+       if (!data || !body_ucs2_text) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] parameter is NULL POINTER !!!!");
+               return -1;
+       }
+
+       int src_len = ucs2_len;
+       int count = 0;
+       int dst_char_encode = COMPOSER_CHAR_ENCODE_MAX;
+       int i = 0;
+
+       unsigned char upperByte, lowerByte;
+       unsigned short eachChar;
+
+       for(i=0; i<src_len; i++) {
+
+               bool is_def_table = false;
+               bool is_ext_table = false;
+
+               upperByte = body_ucs2_text[i++];
+               lowerByte = body_ucs2_text[i];
+
+               eachChar = (upperByte << 8) & 0xFF00;
+               eachChar = eachChar | lowerByte;
+
+               /* in the UTF8, "Enter (Line Feed)" expressed as a "PS"
+                but in the UNICODE_GSM7 pair table, "Enter" expressed as a "LF (0x0a)"
+                so we need to change PS (0x2029_UNICODE) to LF (0x000A_GSM7)
+               */
+               if (eachChar == 0x2029) {/*PS*/
+                       eachChar = 0x000A; /* change LF*/
+               }
+
+               int j=0;
+
+               /* found char on default table*/
+               for(j=0; j<(sizeof(g_GSM7BitToUCS2)/sizeof(short)); j++) {
+                       if (eachChar == g_GSM7BitToUCS2[j]) {
+                               count++;
+                               is_def_table = true;
+                               break;
+                       }
+               }
+
+               /* found char on default ext table*/
+               if (is_def_table == false) {
+                       for(j=0; j<(sizeof(g_GSM7BitExtToUCS2)/sizeof(short)); j++) {
+                               if (eachChar == g_GSM7BitExtToUCS2[j] && eachChar != 0x0020) {
+                                       count += 2;
+                                       is_ext_table = true;
+                                       break;
+                               }
+                       }
+               }
+
+               if (is_def_table || is_ext_table) {
+                       dst_char_encode = COMPOSER_CHAR_ENCODE_GSM7;
+                       continue;
+               } else {
+                       dst_char_encode = COMPOSER_CHAR_ENCODE_UNICODE;
+                       break;
+               }
+
+       }
+
+       if (dst_char_encode == COMPOSER_CHAR_ENCODE_GSM7) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] dst_char_encode is COMPOSER_CHAR_ENCODE_GSM7");
+               // gsm7 char set
+               *char_count = count;
+       } else {
+               // unicode char set
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] dst_char_encode = COMPOSER_CHAR_ENCODE_UNICODE");
+               *char_count = ucs2_len / 2;
+       }
+
+
+       D_LEAVE;
+       return dst_char_encode;
+}
+
+void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+       char count_str[DEF_BUF_LEN] = {0,};
+
+       if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
+               MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, 0);
+
+               int char_encode = page_data->text_info.encode;
+               int char_count = page_data->text_info.char_count;
+
+               int cms_page = 0;
+               int cms_max_count = 0;
+               int max_count = 0;
+
+               if (char_count == 0) {
+                       edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");
+                       return;
+               }
+
+               if (char_encode == COMPOSER_CHAR_ENCODE_UNICODE) {
+                       if (char_count > COMPOSER_SMS_UNICODE_MAX_LEN) {
+                               cms_page = char_count / COMPOSER_CMS_UNICODE_MAX_LEN;
+                               if (cms_page >= COMPOSER_CMS_MAX_PAGE)
+                                       max_count = COMPOSER_CMS_UNICODE_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
+                               else
+                                       max_count = COMPOSER_CMS_UNICODE_MAX_LEN * (cms_page+1);
+
+                       } else {
+                               max_count = COMPOSER_SMS_UNICODE_MAX_LEN;
+                       }
+                       cms_max_count = COMPOSER_CMS_UNICODE_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
+               } else if (char_encode == COMPOSER_CHAR_ENCODE_GSM7) {
+                       if (char_count > COMPOSER_SMS_GSM7_MAX_LEN){
+                               cms_page = char_count / COMPOSER_CMS_GSM7_MAX_LEN;
+                               if (cms_page >= COMPOSER_CMS_MAX_PAGE)
+                                       max_count = COMPOSER_CMS_GSM7_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
+                               else
+                                       max_count = COMPOSER_CMS_GSM7_MAX_LEN * (cms_page+1);
+                       } else {
+                               max_count = COMPOSER_SMS_GSM7_MAX_LEN;
+                       }
+                       cms_max_count = COMPOSER_CMS_GSM7_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
+               } else {
+                       D_EMSG("Unknown character encode");
+                       return;
+               }
+
+               snprintf(count_str, sizeof(count_str), "%d/%d", char_count, max_count);
+               edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", count_str);
+
+       }
+
+       D_LEAVE;
+}
+
+static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent)
+{
+       D_ENTER;
+
+       if (!cd || !parent) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid paremeter ");
+               return NULL;
+       }
+
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+       MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;;
+
+       Evas_Object *layout = NULL;
+       Evas_Object *page_box = NULL;
+       Evas_Object *entry = NULL;
+       Elm_Entry_Filter_Limit_Size limit_filter;
+
+       page_data = (MSG_COMPOSER_BODY_PAGE_S *)calloc(1, sizeof(MSG_COMPOSER_BODY_PAGE_S));
+       if (!page_data) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT calloc error]");
+               return NULL;
+       }
+
+       layout = elm_layout_add(parent);
+       if (!layout) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] elm_layout_add error !!");
+               g_free(page_data);
+               return NULL;
+       }
+
+       elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_BODY_PAGE);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout);
+
+       page_box = elm_box_add(layout);
+       if (!page_box) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] elm_box_add error !!");
+               g_free(page_data);
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(page_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(page_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_show(page_box);
+
+       entry = elm_entry_add(page_box);
+       if (!entry) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] elm_box_add error !!");
+               g_free(page_data);
+               return NULL;
+       }
+       evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_NO_IMAGE);
+
+       /* add filter for removing markups*/
+       elm_entry_markup_filter_append(entry, msg_composer_entry_filter_remove_markup, cd);
+
+       /* set entry max character count*/
+       limit_filter.max_char_count = COMPOSER_TEXT_MAX_CHAR;
+       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter);
+
+       Ecore_IMF_Context *entry_ctx = elm_entry_imf_context_get(entry);
+       ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)entry_ctx, ECORE_IMF_INPUT_PANEL_STATE_EVENT, msg_ui_composer_entry_imf_state_cb, cd);
+
+       evas_object_show(entry);
+       evas_object_data_set(entry,"page_data", page_data);
+
+       evas_object_smart_callback_add(entry, "focused", msg_ui_composer_body_entry_focused_cb, cd);
+       evas_object_smart_callback_add(entry, "changed", msg_ui_composer_body_entry_changed_cb, cd);
+       evas_object_smart_callback_add(entry, "preedit,changed", msg_ui_composer_body_entry_changed_cb, cd);
+
+       elm_box_pack_end(page_box, entry);
+
+       elm_object_part_content_set(layout, "swl.page", page_box);
+
+       page_data->entry = entry;
+       page_data->page_box = page_box;
+       page_data->layout = layout;
+       body_data->page_list = eina_list_append(body_data->page_list, (void *)page_data);
+
+       D_LEAVE;
+       return layout;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       if (!cd) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+
+       Evas_Object *main_box = cd->body_box;
+       Evas_Object *new_page = NULL;
+
+       if (body_data->page_count >= COMPOSER_MAX_PAGE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] COMPOSER_MAX_PAGE_REACHED");
+               msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_PAGE_MAX, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       if (!main_box) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer body box is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       new_page = __msg_ui_composer_body_page_create(cd, main_box);
+       if (!new_page) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page create error");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       elm_box_pack_end(main_box, new_page);
+       body_data->page_count++;
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page)
+{
+       D_ENTER;
+
+       if (!cd || !remove_page) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] comoser data or page data is NOT exist");
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+       MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+       Eina_List *page_list = body_data->page_list;
+       int page_count = body_data->page_count;
+
+       if (page_count == 1) { // in case of only one page exist
+               page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0);
+               elm_entry_entry_set(page_data->entry, "");
+
+               if (cd->ly_body)
+               {
+                       Evas_Object* entry = msg_ui_composer_last_focused_entry_get(cd);
+                       if (entry) {
+                               if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+                                       RECIPIENT_S *r = cd->recipient;
+                                       if (r && r->mbe) {
+                                               if (entry == r->mbe) {
+                                                       entry = elm_multibuttonentry_entry_get(r->mbe);
+                                               }
+                                       }
+                               }
+
+                               Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(entry);
+                               Ecore_IMF_Input_Panel_State state =  ecore_imf_context_input_panel_state_get(imf_context);
+                               if (state == ECORE_IMF_INPUT_PANEL_STATE_HIDE && (msg_ui_composer_common_is_send_possible(cd) == false))
+                                       edje_object_signal_emit(_EDJ(cd->ly_body), "body_expand", "*");
+                       }
+               }
+               /* focus change to the first page */
+               cd->current_edit_entry = 0;
+               msg_ui_composer_last_focused_entry_set(cd, page_data->entry);
+       } else {
+               D_EMSG("Invalid page count !!");
+       }
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
diff --git a/composer/src/ui-composer/msg-ui-composer-body.c b/composer/src/ui-composer/msg-ui-composer-body.c
new file mode 100755 (executable)
index 0000000..86cb4ca
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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.
+ */
+
+/* includes */
+
+#include "msg-ui-composer-body.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-main.h"
+#include "msg-ui-composer-body-page.h"
+#include "msg-ui-composer-common.h"
+
+#include "msg-ui-composer-external.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-body-callback.h"
+
+/* functions*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S* cd, int64 *size)
+{
+       D_ENTER;
+
+       int64 inserted_size = 0;
+       int64 attached_size = 0;
+       int64 total_size = 0;
+
+       D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER,"Composer Data is Invalid");
+       D_MSG_RETVM_IF(size == NULL, COMPOSER_RETURN_NULL_POINTER,"size parameter is Invalid");
+
+       D_MSG("inserted_size(%lld) + attached_size(%lld)", inserted_size, attached_size);
+       total_size = inserted_size + attached_size;
+       *size = total_size;
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+static Evas_Object *__msg_ui_composer_body_create_main_field(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent)
+{
+       D_ENTER;
+
+       if (!cd)
+               return NULL;
+
+       Evas_Object *scroller = NULL;
+       Evas_Object *box = NULL;
+
+       scroller = elm_scroller_add(parent);
+       if (!scroller) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] scroller create error");
+               return NULL;
+       }
+
+       elm_object_focus_allow_set(scroller, EINA_FALSE);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+
+       if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+               elm_scroller_content_min_limit(scroller, 0, 1);
+               evas_object_size_hint_max_set(scroller, 9999, 250);
+       }
+
+       evas_object_show(scroller);
+
+       box = elm_box_add(parent);
+       elm_object_focus_allow_set(box, EINA_FALSE);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_show(box);
+       elm_object_content_set(scroller, box);
+
+       Evas_Object *bx_content = elm_box_add(parent);
+       evas_object_size_hint_weight_set(bx_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(bx_content, EVAS_HINT_FILL, 1.0);
+       evas_object_show(bx_content);
+
+       elm_box_pack_end(box, bx_content);
+
+       cd->body_box = bx_content;
+       cd->body_scroll = scroller;
+
+       D_LEAVE;
+       return scroller;
+}
+
+COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_data(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] message type SMS!!");
+
+               msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_SMS);
+
+               if (msg_ui_composer_body_read_sms_body(cd) != COMPOSER_RETURN_SUCCESS)
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ERROR] error read sms body text!!");
+       } else {
+
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type!!");
+               msg_ui_composer_message_destroy();
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+static Evas_Object *__msg_ui_composer_body_create_send_button(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent)
+{
+       D_ENTER;
+
+       if (!cd)
+               return NULL;
+
+       Evas_Object *button = NULL;
+
+       button = elm_button_add(parent);
+       if (!button) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] send button create error !!");
+               return NULL;
+       }
+
+       elm_object_style_set(button, "style2");
+       elm_object_focus_allow_set(button, EINA_FALSE);
+       evas_object_size_hint_weight_set(button, 0.0, 0.0);
+       evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_object_text_set(button, MSGC_STR_BUTTON_SEND);
+       evas_object_show(button);
+
+       evas_object_smart_callback_add(button, "clicked", msg_ui_composer_body_send_btn_clicked_cb, cd);
+
+       D_LEAVE;
+
+       return button;
+}
+
+static Evas_Object *__msg_ui_compsoer_body_layout_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent)
+{
+       Evas_Object *layout = NULL;
+
+       layout = msg_ui_composer_load_edj(parent, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_BODY_FIELD);
+
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_show(layout);
+
+       if (!layout) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] create layout error");
+               return NULL;
+       }
+
+       return layout;
+}
+
+Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent)
+{
+       D_ENTER;
+
+       if (!cd || !parent) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data or parent data is NULL");
+               return NULL;
+       }
+
+       Evas_Object *layout = NULL;
+       Evas_Object *main_field = NULL;
+
+       layout = __msg_ui_compsoer_body_layout_create(cd, parent);
+       if (!layout) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] layout create error !!");
+               return NULL;
+       }
+
+       main_field = __msg_ui_composer_body_create_main_field(cd, parent);
+       if (!main_field) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] main_field create error !!");
+               return NULL;
+       }
+
+       if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
+               elm_box_clear(cd->body_box);
+               msg_ui_composer_body_add_page(cd);
+       } else {
+
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type");
+               return NULL;
+       }
+
+       cd->send_button = __msg_ui_composer_body_create_send_button(cd, parent);
+       if (!cd->send_button) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] button create error !!");
+               return NULL;
+       }
+
+       elm_object_disabled_set(cd->send_button, EINA_TRUE);
+       elm_object_part_content_set(layout, "body.swl.main", main_field);
+       elm_object_part_content_set(layout, "body.swl.send_button", cd->send_button);
+
+       D_LEAVE;
+       return layout;
+}
+
+void msg_ui_composer_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+       int page_count = body_data->page_count;
+       MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+       int i = 0;
+       Eina_List *page_list = body_data->page_list;
+
+       for (i = page_count - 1; i >= 0; i--) {
+               page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+               msg_ui_composer_body_remove_page(cd, page_data->layout);
+       }
+
+       cd->current_edit_entry = 0;
+       cd->msg_type = COMPOSER_MSG_TYPE_SMS;
+
+       D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_text(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, const char *body_text, int nPage)
+{
+       D_ENTER;
+
+       if (!pcomp_data) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+               return COMPOSER_RETURN_NULL_POINTER;
+       }
+
+       if (pcomp_data->body_data.page_count < nPage + 1)
+               msg_ui_composer_body_add_page(pcomp_data);
+
+       Eina_List *pagelist = pcomp_data->body_data.page_list;
+       MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(pagelist, nPage);
+       Evas_Object *entry = page_data->entry;
+
+       char * markup_text = elm_entry_utf8_to_markup(body_text);
+
+       elm_entry_entry_set(entry, markup_text);
+
+       g_free(markup_text);
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_data_init(MSG_COMPOSER_VIEW_DATA_S *pcomp_data)
+{
+       D_ENTER;
+       if (!pcomp_data) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL;");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       MSG_COMPOSER_BODY_S *body_data = &pcomp_data->body_data;
+       Eina_List *page_list = body_data->page_list;
+
+       body_data->page_count = 0;
+
+       if (page_list) {
+               Eina_List *iter;
+               MSG_COMPOSER_BODY_PAGE_S *pData;
+
+               EINA_LIST_FOREACH(page_list, iter, pData) {
+                       if (pData)
+                               free(pData);
+               }
+               free(page_list);
+               page_list = NULL;
+       }
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+void msg_ui_composer_body_focus_set(MSG_COMPOSER_VIEW_DATA_S *cd, int nPage)
+{
+       D_ENTER;
+       if (!cd)
+               return;
+       if (nPage < 0)
+               return;
+
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+       if (!body_data)
+               return;
+
+       MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, nPage);
+
+       if (page_data) {
+               D_MSG("Focus to Page[%d]", nPage);
+               elm_object_focus_set(page_data->entry, EINA_TRUE);
+       } else {
+               D_MSG("There is not exist Page[%d]", nPage);
+       }
+
+       D_LEAVE;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-common.c b/composer/src/ui-composer/msg-ui-composer-common.c
new file mode 100755 (executable)
index 0000000..4603077
--- /dev/null
@@ -0,0 +1,497 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 <Elementary.h>
+#include <utilX.h>
+#include <Ecore_X.h>
+
+#include <devman_haptic.h>
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-body.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-bubble.h"
+#include "msg-ui-composer-main.h"
+
+/* vib feedback apply when message type change*/
+static bool bVibrating;
+static int dev_handle;
+
+char *msg_ui_composer_edj_get(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       if (cd->current_theme == MSG_UI_THEME_WHITE)
+               return MSGC_UI_WHITE_EDJ;
+
+       return MSGC_UI_DEFAULT_EDJ;     /*black*/
+}
+
+Evas_Object *msg_ui_composer_load_edj(Evas_Object *parent, const char *edj_file, const char *group)
+{
+       Evas_Object *layout;
+       layout = elm_layout_add(parent);
+
+       elm_layout_file_set(layout, edj_file, group);
+       return layout;
+}
+
+Evas_Object *msg_ui_composer_layout_create(Evas_Object *parent, bool indicator)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(parent == NULL, NULL, "parent object  == NULL");
+
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       if (layout == NULL) {
+               D_EMSG("[ASSERT] elm_layout_add failed!!");
+               return NULL;
+       }
+
+       if (indicator == true)
+               elm_layout_theme_set(layout, "layout", "application", "default");
+       else
+               elm_layout_theme_set(layout, "layout", "application", "noindicator");
+
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout);
+       D_LEAVE;
+       return layout;
+}
+
+Evas_Object *msg_ui_composer_conformant_create(Evas_Object *parent_win, Evas_Object *inner)
+{
+       D_ENTER;
+       Evas_Object *conform;
+       D_MSG_RETVM_IF(!parent_win, NULL,"Inputted Paremeter Window is Invalid");
+       D_MSG_RETVM_IF(!inner, NULL,"Inputted Paremeter Content is Invalid");
+
+       conform = elm_conformant_add(parent_win);
+       D_MSG_RETVM_IF(!conform, NULL,"Fail to Create conformant object");
+
+       elm_win_conformant_set(parent_win, EINA_TRUE);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_win_resize_object_add(parent_win, conform);
+       evas_object_show(conform);
+
+       elm_object_content_set(conform, inner);
+       D_LEAVE;
+       return conform;
+}
+
+Evas_Object *msg_ui_composer_bg_create(Evas_Object *parent)
+{
+       D_MSG_RETVM_IF(parent == NULL, NULL, "parent object  == NULL");
+    Evas_Object *bg = elm_bg_add(parent);
+    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_show(bg);
+    return bg;
+}
+
+int64 msg_composer_get_file_size(const char *path)
+{
+       return ecore_file_size(path);
+}
+
+char *msg_common_get_file_ext(const char *a_pszfile_name)
+{
+       if (a_pszfile_name != NULL) {
+               int nlen = strlen(a_pszfile_name);
+               char *psztemp = (char *)a_pszfile_name + nlen;
+
+               while (nlen--) {
+                       psztemp--;
+                       if (*psztemp == '.') {
+                               psztemp++;
+                               break;
+                       }
+               }
+               return psztemp;
+       }
+
+       return NULL;
+}
+
+void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       /*Clear recipient */
+       if (cd->recipient)
+               msg_ui_composer_recipient_clear(cd->recipient);
+
+       msg_ui_composer_body_clear(cd);
+
+       D_LEAVE;
+}
+
+Eina_Bool msg_ui_composer_last_focus_load(void *data)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       if(!cd) return EINA_FALSE;
+
+       if (cd->last_focus_entry == NULL) {
+               D_MSG("NO ENTRY FOCUS");
+               return EINA_FALSE;
+       }
+
+       elm_object_focus_set(cd->last_focus_entry, EINA_TRUE);
+       D_MSG("### Focused Entry Load = %p",cd->last_focus_entry);
+       D_LEAVE;
+       return EINA_FALSE;
+}
+
+void msg_ui_composer_last_focused_entry_set(void *data, Evas_Object *entry)
+{
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+       cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       cd->last_focus_entry = entry;
+}
+
+Evas_Object *msg_ui_composer_last_focused_entry_get(void *data)
+{
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+       cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       if (!cd) return NULL;
+
+       return cd->last_focus_entry;
+}
+
+Evas_Object *msg_ui_composer_last_body_entry_get(void *data)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       MSG_COMPOSER_BODY_PAGE_S *page_data = eina_list_nth(cd->body_data.page_list, cd->current_edit_entry);
+       D_MSG("cd->current_edit_entry = %d", cd->current_edit_entry);
+
+       if (page_data && page_data->entry) {
+               return page_data->entry;
+       } else {
+               D_MSG("No Entry Saved");
+               return NULL;
+       }
+
+       D_LEAVE;
+       return NULL;
+}
+
+void bundle_send_to_result(void *data, char *key, char *val)
+{
+       D_ENTER;
+       D_MSG("key = %s, val = %s", key, val);
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       bundle *b;
+       b = bundle_create();
+       bundle_add(b, key, val);
+
+       ug_send_result(cd->ug, b);
+
+       bundle_free(b);
+
+       D_LEAVE;
+}
+
+int msg_ui_composer_thread_id_get(MSG_HANDLE_T msg_handle, const char *recipient)
+{
+       char tmp_recipient[DEF_BUF_LEN] = {0,};
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_SORT_RULE_S sortRule = {0, };
+       MSG_THREAD_VIEW_LIST_S peerList = {0,};
+       int row;
+       char thread_addr_r[DEF_THREAD_ADDR_LEN] = {0};
+
+       sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
+       sortRule.bAscending = false;
+
+       strncpy(tmp_recipient, recipient, sizeof(tmp_recipient)-1);
+       D_MSG("recipient = %s:%s, tmp recipient = %s", recipient, strdup(recipient), tmp_recipient);
+       g_strreverse(tmp_recipient);
+       D_MSG("tmp_recipient = %s", tmp_recipient);
+       err = msg_get_thread_view_list(msg_handle, &sortRule, &peerList);
+       for (row = 0; row < peerList.nCount; row++) {
+               if (strlen(msg_thread_view_get_address(peerList.msgThreadInfo[row]))) {
+                       strncpy(thread_addr_r, msg_thread_view_get_address(peerList.msgThreadInfo[row]), strlen(msg_thread_view_get_address(peerList.msgThreadInfo[row])));
+                       g_strreverse(thread_addr_r);
+                       if (g_ascii_strncasecmp(thread_addr_r, tmp_recipient, COMPARE_STRING_NUM) == 0) {
+                               D_MSG("FIND THREAD ADDRESS = %s", msg_thread_view_get_address(peerList.msgThreadInfo[row]));
+                               break;
+                       }
+               }
+       }
+
+       if (row >= peerList.nCount) {
+               msg_release_thread_view_list(&peerList);
+               D_MSG("CANNOT FIND THREAD");
+               return 0;
+       }
+
+       int retid = msg_thread_view_get_thread_id(peerList.msgThreadInfo[row]);
+       msg_release_thread_view_list(&peerList);
+       return retid;
+}
+
+char *msg_ui_composer_thread_recipient_get(MSG_HANDLE_T msg_handle, int inp_tid)
+{
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_SORT_RULE_S sortRule = {0, };
+       MSG_THREAD_VIEW_LIST_S peerList = {0,};
+       int row;
+       char *ret_recipient = NULL;
+       sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
+       sortRule.bAscending = false;
+
+       err = msg_get_thread_view_list(msg_handle, &sortRule, &peerList);
+       for (row = 0; row < peerList.nCount; row++) {
+               if (inp_tid == msg_thread_view_get_thread_id(peerList.msgThreadInfo[row])) {
+                       ret_recipient = strdup(msg_thread_view_get_address(peerList.msgThreadInfo[row]));
+                       break;
+               }
+       }
+
+       msg_release_thread_view_list(&peerList);
+       return ret_recipient;
+}
+
+bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       if (!cd) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+               return false;
+       }
+
+       MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+       MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+
+       if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
+               page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, 0);
+               if(page_data) {
+                       char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry));
+                       if (body_text) {
+                               if (strlen(body_text) > 0) {
+                                       g_free(body_text);
+                                       return true;
+                               }
+                               g_free(body_text);
+                       }
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type");
+               return false;
+       }
+
+       D_LEAVE;
+       return false;
+}
+
+static gboolean __msg_ui_composer_vib_timeout_cb(gpointer data)
+{
+       D_ENTER;
+
+       int ret = 0;
+
+       if (bVibrating == true) {
+               ret = device_haptic_stop_play(dev_handle);
+
+               if (ret != 0) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Fail to stop haptic : [%d]", ret);
+               }
+
+               ret = device_haptic_close(dev_handle);
+
+               if (ret != 0) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Fail to close haptic : [%d]", ret);
+               }
+
+               bVibrating = false;
+       }
+
+       D_LEAVE;
+
+       return FALSE;
+}
+
+void msg_ui_composer_common_play_vibration()
+{
+       D_ENTER;
+
+       int ret = 0;
+       int vibPattern = EFFCTVIBE_NOTIFICATION;
+
+       bVibrating = true;
+       dev_handle = device_haptic_open(DEV_IDX_0, 0);
+
+       g_timeout_add(150, __msg_ui_composer_vib_timeout_cb, NULL);
+
+       ret = device_haptic_play_pattern(dev_handle, vibPattern, 1, HAPTIC_FEEDBACK_LEVEL_5);
+
+       if (ret != 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Fail to play haptic : [%d]", ret);
+       }
+
+       D_LEAVE;
+}
+
+void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, char **text)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(text == NULL || *text == NULL, "New Text is NULL");
+
+       char *preedit_str = NULL;
+       char *utf8_text = NULL;
+       char *convert_text = NULL;
+       D_MSG("text %s", *text);
+       /* Check preeditting text and return if it exist*/
+       preedit_str = strstr(*text, "<preedit_sel>");
+       if (preedit_str) return;
+
+       /* convert from markup text to utf8 text from entry */
+       utf8_text  = elm_entry_markup_to_utf8(*text);
+       if (utf8_text) {
+
+               /* If the string contains "Carrage return ('\n'), it should be changed "<br>" to show properly*/
+               convert_text = elm_entry_utf8_to_markup(utf8_text);
+               if(convert_text) {
+                       free(*text);
+                       *text = strdup(convert_text);
+                       free(convert_text);
+               }
+               free(utf8_text);
+       }
+
+       D_LEAVE;
+}
+
+int msg_ui_composer_convert_UTF8ToUCS2(unsigned char *pDestText, int maxLength, const char *pSrcText, int srcTextLen)
+{
+       D_ENTER;
+       int textLen = 0;
+       unsigned char *unicodeTemp = (unsigned char*)pDestText;
+
+       int ucs2Length = 0;
+       int remainedBuffer = maxLength;
+
+       if(maxLength == 0 || pSrcText == NULL || pDestText ==  NULL)
+       {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT,"[ASSERT]UTF8 to UCS2 Failed as text length is NULL \n");
+               return -1;
+       }
+
+       // null terminated string
+       if (srcTextLen == -1) {
+               textLen = strlen((char*)pSrcText);
+               srcTextLen = textLen;
+       } else {
+               textLen = srcTextLen;
+       }
+
+       GIConv cd;
+       int err=0;
+
+       cd = g_iconv_open("UCS-2BE", "UTF8");
+
+       if (cd > 0)
+       {
+               err = g_iconv(cd, (char**)&pSrcText, (gsize*)&textLen, (char**)&unicodeTemp, (gsize*)&remainedBuffer);
+       }
+
+       ucs2Length = maxLength - remainedBuffer;
+
+       g_iconv_close(cd);
+
+       D_LEAVE;
+       return ucs2Length;
+}
+
+void msg_ui_composer_common_tickernoti(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_TICKERNOTI_TYPE_E tickertype)
+{
+       char popup_msg[DEF_BUF_LEN_L] = {0,};
+       MSGC_NOTIFY_ORIENT orient;
+       Evas_Object *parent_notify;
+
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+
+       if (tickertype == COMPOSER_TICKERNOTI_COUNT_MAX) {
+               snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_RECIPIENT_MAX, COMPOSER_RECIPIENT_COUNT_MAX);
+               parent_notify = cd->recipient->bx_main;
+               orient = MSGC_NOTIFY_ORIENT_BOTTOM;
+       } else if (tickertype == COMPOSER_TICKERNOTI_DUP_RECP) {
+               snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_RECIPIENT_DUP);
+               parent_notify = cd->recipient->bx_main;
+               orient = MSGC_NOTIFY_ORIENT_BOTTOM;
+       } else if (tickertype == COMPOSER_TICKERNOTI_INVALID_RECP) {
+               snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_RECIPIENT_INVALID);
+               parent_notify = cd->recipient->bx_main;
+               orient = MSGC_NOTIFY_ORIENT_BOTTOM;
+       } else if (tickertype == COMPOSER_TICKERNOTI_CHANGED_SMS) {
+               snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_CHANGE_SMS);
+               parent_notify = cd->ly_body;
+               orient = MSGC_NOTIFY_ORIENT_BOTTOM;
+       } else {
+               return;
+       }
+
+       if (cd->noti) {
+               evas_object_del(cd->noti);
+       }
+
+       cd->noti = msg_ui_composer_notify_show(parent_notify, popup_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME, orient, false);
+}
+
+void msg_ui_composer_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+       D_MSG_RETM_IF(ctx == NULL, "Ecore_IMF_Context is Invalid");
+
+       if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
+               D_MSG("Imf status SHOW");
+               edje_object_signal_emit(_EDJ(cd->ly_body), "body_contract","*");
+       } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
+               D_MSG("Imf status HIDE");
+
+               if (msg_ui_composer_common_is_send_possible(cd) == false) {
+                       D_MSG("body_EXPAND and send button HIDE ");
+                       edje_object_signal_emit(_EDJ(cd->ly_body), "body_expand","*");
+               }
+       } else {
+               D_EMSG("imf status INVALID");
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_composer_evas_object_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       if (!data || !obj)
+               return;
+
+       D_PRINT("delete = %s[%p]", (char *)data, obj);
+       D_LEAVE;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-main.c b/composer/src/ui-composer/msg-ui-composer-main.c
new file mode 100755 (executable)
index 0000000..30ee459
--- /dev/null
@@ -0,0 +1,876 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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.
+ */
+
+/* includes*/
+#include <Ecore_X.h>
+#include <MapiTransport.h>
+
+#include "msg-ui-composer-main.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-predictsearch.h"
+#include "msg-ui-composer-body.h"
+
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-core.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-external.h"
+#include "msg-ui-composer-bubble.h"
+
+#define COMPOSER_BUNDLE_ATTACH_TOKEN "\n"
+#define COMPOSER_BUNDLE_RECP_TOKEN ","
+
+/*==================================================================================================
+*                                                              FUNCTION IMPLEMENTATIONS
+*==================================================================================================*/
+static Eina_Bool __msg_ui_composer_edit_check(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "Composer Data == NULL");
+
+       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+               int recipient_count = msg_ui_composer_recipient_count_get(cd->recipient);
+               if (recipient_count > 0) {
+                       return EINA_TRUE;
+               }
+
+               const char *entry_str = msg_ui_composer_recipient_entry_text_get(cd->recipient);
+               if (entry_str && strlen(entry_str)) {
+                       return EINA_TRUE;
+               }
+       }
+
+       if (msg_ui_composer_common_is_send_possible(cd) == true) {
+               return EINA_TRUE;
+       }
+
+       return EINA_FALSE;
+}
+
+/* function definitions*/
+static void __msg_ui_composer_bundle_data_process(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b_data)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+       D_MSG_RETM_IF(b_data == NULL, "Bundle Data is NULL");
+
+       const char *bundle_txt = NULL;
+
+       if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_FORWARD))) {
+               int msg_id = atoi(bundle_txt);
+               msg_ui_composer_message_init();
+               msg_ui_composer_message_load_message(cd->msg_handle, msg_id);
+               msg_ui_composer_message_set_loaded_data(cd);
+               msg_ui_composer_message_destroy();
+       } else {
+               if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_TO))) {
+                       bool bMaxCount = false;
+                       bool bInvalidNum = false;
+                       bool bDup = false;
+                       Eina_List *recipient_list = make_tokenize_list(bundle_txt, ",");
+                       if (recipient_list) {
+                               Eina_List *l = NULL;
+                               char *recipient;
+                               EINA_LIST_FOREACH(recipient_list, l, recipient) {
+                                       if (recipient) {
+                                               D_MSG("TO = %s", recipient);
+                                               if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) {
+                                                       bMaxCount = true;
+                                                       g_free(recipient);
+                                                       break;
+                                               }
+
+                                               if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
+                                                       bDup = true;
+                                                       g_free(recipient);
+                                                       continue;
+                                               }
+
+                                               if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) {
+                                                       bInvalidNum = true;
+                                               }
+
+                                               msg_ui_composer_recipient_append(cd->recipient, recipient, 0);
+                                               g_free(recipient);
+                                       }
+                               }
+
+                               D_MSG("bMaxCount = %d, bInvalidNum = %d, bDup = %d", bMaxCount, bInvalidNum, bDup);
+                               if (bMaxCount) {
+                                       msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX);
+                               } else if (bInvalidNum) {
+                                       msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP);
+                               } else if (bDup) {
+                                       msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+                               }
+                       }
+
+               } else if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_NUMBER_INDEX))) {
+                       char *recipient, *index;
+                       char *save_p;
+                       int idx;
+
+                       char *copy_string = MSG_STRDUP(bundle_txt);
+                       if (copy_string) {
+
+                               recipient = strtok_r(copy_string, "/", &save_p);
+                               if (recipient) {
+                                       index = strtok_r(NULL, "/", &save_p);
+                                       if (index) {
+                                               D_MSG("NUMBER_INDEX = %s[%s]", recipient, index);
+                                               idx = atoi(index);
+                                       } else {
+                                               idx = 0;
+                                       }
+
+                                       if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) {
+                                               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX);
+                                       } else {
+                                               if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
+                                                       msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+                                               } else {
+                                                       if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) {
+                                                               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP);
+                                                       }
+                                                       msg_ui_composer_recipient_append(cd->recipient, recipient, idx);
+                                               }
+                                       }
+                               }
+
+                               g_free(copy_string);
+                       }
+               }
+
+               if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_BODY))) {
+                       msg_ui_composer_body_set_loaded_text(cd, bundle_txt, 0);
+               }
+       }
+
+       D_LEAVE;
+}
+
+static void __msg_ui_composer_sent_status_cb(MSG_HANDLE_T Handle, MSG_SENT_STATUS_S *pStatus, void *pUserParam)
+{
+       D_ENTER;
+
+       return;
+}
+
+static void __reset_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+
+       MSGC_EVAS_OBJECT_DEL(cd->popup_end);
+
+       msg_ui_composer_reset(cd, cd->msg_bundle);
+
+       if (cd->msg_bundle) {
+               bundle_free(cd->msg_bundle);
+               cd->msg_bundle = NULL;
+       }
+}
+
+static void __reset_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+
+       MSGC_EVAS_OBJECT_DEL(cd->popup_end);
+
+       if (cd->msg_bundle) {
+               bundle_free(cd->msg_bundle);
+               cd->msg_bundle = NULL;
+       }
+}
+
+static void __end_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+
+       MSGC_EVAS_OBJECT_DEL(cd->popup_end);
+
+       if (cd->destroy_req) {
+               bundle_send_to_result(cd, MSG_BUNDLE_KEY_COMPOSER_RESPONSE, MSG_BUNDLE_VALUE_RET_YES);
+               cd->destroy_req = false;
+       }
+
+       ug_destroy_me(cd->ug);
+}
+
+static void __end_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+
+       MSGC_EVAS_OBJECT_DEL(cd->popup_end);
+
+       if (cd->destroy_req) {
+               bundle_send_to_result(cd, MSG_BUNDLE_KEY_COMPOSER_RESPONSE, MSG_BUNDLE_VALUE_RET_NO);
+               cd->destroy_req = false;
+       }
+
+       msg_ui_composer_last_focus_load(cd);
+       D_LEAVE;
+}
+
+static void  __msg_ui_composer_end_popup(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_DISCARD_Q, 0);
+       Evas_Object * btn1 = elm_button_add(popup);
+       elm_object_text_set(btn1, MSGC_STR_BUTTON_OK);
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", __end_popup_ok_btn_clicked_cb, cd);
+       Evas_Object * btn2 = elm_button_add(popup);
+       elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL);
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", __end_popup_cancel_btn_clicked_cb, cd);
+
+       cd->popup_end = popup;
+
+       D_LEAVE;
+       return;
+}
+
+static void __naviframe_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(data == NULL, "Data == NULL");
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+               if (__msg_ui_composer_edit_check(cd) == EINA_TRUE) {
+                       __msg_ui_composer_end_popup(cd);
+                       return;
+               }
+       }
+
+       ug_destroy_me(cd->ug);
+
+       D_LEAVE;
+}
+
+static Evas_Object *__naviframe_back_btn_create(Evas_Object *parent, void *data, bool title)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL");
+       D_MSG_RETVM_IF(data == NULL, NULL, "data == NULL");
+       D_MSG("Title type = %d", title);
+
+       Evas_Object *btn;
+       btn = elm_button_add(parent);
+       if (btn == NULL)
+               return NULL;
+
+       if (title == true) {
+               elm_object_style_set(btn, "naviframe/title/default");
+               elm_object_text_set(btn, MSGC_STR_BUTTON_CANCEL);
+       } else {
+               elm_object_style_set(btn, "naviframe/back_btn/default");
+       }
+       evas_object_smart_callback_add(btn, "clicked", __naviframe_back_btn_clicked_cb, data);
+       evas_object_show(btn);
+       D_LEAVE;
+       return btn;
+}
+
+static char *__working_dir_create(void)
+{
+       D_ENTER;
+       char *base_dir = "/tmp/message";
+       char working_path[DEF_PATH_MAX] = {0,};
+       int i = 0;
+
+       /*Create base dir*/
+       if (ecore_file_exists(base_dir) == EINA_FALSE) {
+               if(ecore_file_mkdir(base_dir) == EINA_FALSE) {
+                       return NULL;
+               }
+       }
+
+       /*Create work dir*/
+       do {
+
+               bzero(working_path, DEF_PATH_MAX);
+               snprintf(working_path, sizeof(working_path)-1, "%s/composer_%d/", base_dir, i);
+               if (ecore_file_exists(working_path) == EINA_FALSE) {
+                       if (ecore_file_mkdir(working_path) == EINA_FALSE) {
+                               return NULL;
+                       } else {
+                               D_MSG("Success to create working path = %s", working_path);
+                               return strdup(working_path);
+                       }
+                       break;
+               }
+               i++;
+       } while(i < 255);
+
+       return NULL;
+}
+
+static void  __msg_ui_composer_reset_select_popup(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_DISCARD_Q, 0);
+       Evas_Object * btn1 = elm_button_add(popup);
+       elm_object_text_set(btn1, MSGC_STR_BUTTON_OK);
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", __reset_popup_ok_btn_clicked_cb, cd);
+       Evas_Object * btn2 = elm_button_add(popup);
+       elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL);
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", __reset_popup_cancel_btn_clicked_cb, cd);
+       cd->popup_end = popup;
+
+       D_LEAVE;
+       return;
+}
+
+void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       if (!cd) return;
+
+       if (__msg_ui_composer_edit_check(cd)) {
+               /*select reset popup show*/
+               __msg_ui_composer_reset_select_popup(cd);
+       } else {
+               /*process reset*/
+               msg_ui_composer_reset(cd, cd->msg_bundle);
+               if (cd->msg_bundle) {
+                       bundle_free(cd->msg_bundle);
+                       cd->msg_bundle = NULL;
+               }
+       }
+
+       D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle)
+{
+       D_ENTER;
+       if (!cd)
+               return COMPOSER_RETURN_FAIL;
+
+       if (cd->working_path) {
+               ecore_file_recursive_rm(cd->working_path);
+               g_free(cd->working_path);
+       }
+       cd->working_path = __working_dir_create();
+       if (cd->working_path == NULL) {
+               D_EMSG("[ASSERT] Fail of make working dir!!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       if (bundle) {
+               msg_ui_composer_clear(cd);
+               /*Change to Bubble view*/
+               if (bundle_get_val(bundle, MSG_BUNDLE_KEY_THREAD_ID) || bundle_get_val(bundle, MSG_BUNDLE_KEY_MSG_ID)) {
+                       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER) {
+                               D_MSG("chagne bubble view");
+                               msg_ui_composer_change_bubble_view(cd);
+                               msg_ui_bubble_parse_bubble_data(cd->bubble_data, bundle);
+                               msg_ui_bubble_start_view(cd->bubble_data);
+                               msg_ui_bubble_composer_navi_title_set((void *)cd);
+                               msg_ui_bubble_add_normal_control_item(cd->bubble_data);
+                               msg_ui_composer_recipient_set_recipient(cd, cd->bubble_data->threadAddr);
+
+                       } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+                               D_MSG("reload bubble view");
+                               msg_ui_bubble_parse_bubble_data(cd->bubble_data, bundle);
+                               msg_ui_bubble_list_load(cd->bubble_data);
+                               msg_ui_bubble_composer_navi_title_set((void *)cd);
+                               msg_ui_bubble_add_normal_control_item(cd->bubble_data);
+                               msg_ui_composer_recipient_set_recipient(cd, cd->bubble_data->threadAddr);
+                       }
+               } else {
+                       if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+                               if (cd->bubble_data) {
+                                       cd->bubble_data->ug_state = BUBBLE_UG_DESTROY;
+                                       MSGC_EVAS_OBJECT_DEL(cd->bubble_data->toolbar);
+                                       msg_ui_bubble_deinit_bubble_data(cd->bubble_data);
+                                       cd->bubble_data = NULL;
+                               }
+                               msg_ui_composer_change_composer_view(cd);
+                       }
+                       __msg_ui_composer_bundle_data_process(cd, bundle);
+               }
+       }
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is NULL");
+
+       COMPOSER_RETURN_TYPE_E ret;
+       cd->state = COMPOSER_STATE_TYPE_RUNNING;
+
+       /*bundle data parsing */
+       if (bundle) {
+               if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+                       cd->isLoad = true;
+                       __msg_ui_composer_bundle_data_process(cd, bundle);
+
+                       cd->isLoad = false;
+               } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+                       D_MSG("START BUBBLE COMPOSER");
+                       PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)cd->bubble_data;
+                       msg_ui_bubble_parse_bubble_data(bubble_data, bundle);
+                       msg_ui_bubble_start_view(bubble_data);
+
+                       msg_ui_bubble_composer_navi_title_set((void *)cd);
+                       msg_ui_bubble_add_normal_control_item(cd->bubble_data);
+                       msg_ui_composer_recipient_set_recipient(cd, bubble_data->threadAddr);
+               }
+       }
+
+       /*First Focus*/
+       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+               if (!msg_ui_composer_popup_exist(cd)) {
+
+                       int recipient_count = msg_ui_composer_recipient_count_get(cd->recipient);
+
+                       if (recipient_count > 0)
+                               msg_ui_composer_body_focus_set(cd, 0);
+                       else
+                               msg_ui_composer_recipient_focus_set(cd->recipient);
+               }
+       }
+
+       D_LEAVE;
+       return ret;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+       if (!cd) return COMPOSER_RETURN_FAIL;
+
+       D_PRINT("===== Composer UG Destroy Start =====");
+       contacts_svc_disconnect();
+
+       if (cd->msg_bundle) {
+               bundle_free(cd->msg_bundle);
+               cd->msg_bundle = NULL;
+       }
+
+       if (cd->noti) {
+               D_PRINT("----- Notify Delete -----");
+               evas_object_del(cd->noti);
+               cd->noti = NULL;
+       }
+
+       if (cd->popup_conform) {
+               evas_object_del(cd->popup_conform);
+               cd->popup_conform = NULL;
+       }
+
+       if (cd->recipient) {
+               D_PRINT("----- Recipient Delete -----");
+               msg_ui_composer_recipient_delete(cd->recipient);
+               cd->recipient = NULL;
+       }
+
+       D_PRINT("----- Predict Search Delete -----");
+       msg_ui_composer_predictsearch_list_delete(cd);
+
+       D_PRINT("----- Close Msg Handle -----");
+       msg_ui_comp_core_close_msg_handle(&cd->msg_handle);
+
+       D_PRINT("----- Delete Popup  -----");
+       msg_ui_composer_popup_delete_all(cd);
+
+       if (cd->working_path) {
+               ecore_file_recursive_rm(cd->working_path);
+               g_free(cd->working_path);
+               cd->working_path = NULL;
+       }
+
+       D_PRINT("===== Composer UG Destroy End =====");
+
+       D_LEAVE;
+       return ret;
+}
+
+void msg_ui_composer_destroy_request(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data == NULL");
+
+       if (__msg_ui_composer_edit_check(cd) == EINA_TRUE) {
+               cd->destroy_req = true;
+               __msg_ui_composer_end_popup(cd);
+       } else {
+               bundle_send_to_result(cd, MSG_BUNDLE_KEY_COMPOSER_RESPONSE, MSG_BUNDLE_VALUE_RET_YES);
+               ug_destroy_me(cd->ug);
+       }
+
+       D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+
+       if (cd == NULL) {
+               D_EMSG("[ASSERT] pcmop_data is NULL");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       /* create message handle */
+       if (msg_ui_comp_core_open_msg_handle(&cd->msg_handle) != COMPOSER_RETURN_SUCCESS) {
+               D_EMSG("[ASSERT] msg-server doesn't response !!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       /* set message sent status callback */
+       if (msg_ui_comp_core_reg_sent_status_cb(cd->msg_handle, __msg_ui_composer_sent_status_cb, cd) != COMPOSER_RETURN_SUCCESS) {
+               D_EMSG("[ASSERT] sent status callback register error!!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       /* connect contacts svc*/
+       if (contacts_svc_connect() != 0) {
+               D_EMSG("[ASSERT] Fail of contacts_svc_connect !!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       cd->working_path = __working_dir_create();
+       if (cd->working_path == NULL) {
+               D_EMSG("[ASSERT] Fail of make working dir!!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+
+       /* set default message type is SMS */
+       cd->msg_type = COMPOSER_MSG_TYPE_SMS;
+
+       /*set currnet_theme */
+
+       char *current_theme = msg_common_get_current_theme_name();
+       if (g_strcmp0(current_theme, MSG_THEME_WHITE_HD) == 0)
+               cd->current_theme = MSG_UI_THEME_WHITE;
+       else
+               cd->current_theme = MSG_UI_THEME_BLUE_HD;
+
+       if (current_theme)
+               free(current_theme);
+
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+/*
+ * Create Composer First View
+ */
+COMPOSER_RETURN_TYPE_E msg_ui_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer data is NULL");
+       D_MSG_RETVM_IF(cd->main_window == NULL, COMPOSER_RETURN_FAIL, "main_window is NULL");
+       D_MSG_RETVM_IF(cd->base == NULL, COMPOSER_RETURN_FAIL, "base layout is NULL");
+
+       Evas_Object *navi_frame = NULL;
+
+       /* State Set */
+       cd->state = COMPOSER_STATE_TYPE_CREATE;
+       Evas_Object *content_layout = NULL;
+       Elm_Object_Item *navi_it = NULL;
+
+       Evas_Object *conform = NULL;
+       Evas_Object *back_btn = NULL;
+       Evas_Object *tool_bar = NULL;
+
+       /* Create naviframe */
+       navi_frame = elm_naviframe_add(cd->base);
+       if (!navi_frame) {
+               D_EMSG("naviframe add fail");
+               goto error_return;
+       }
+
+       evas_object_show(navi_frame);
+       cd->navi_bar = navi_frame;
+
+       /* Create content layout */
+       content_layout = elm_layout_add(navi_frame);
+       if (!content_layout) {
+               D_EMSG("layout add fail");
+               goto error_return;
+       }
+
+       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+               elm_layout_file_set(content_layout, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_CONTENT_LAYOUT);
+       } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER){
+               elm_layout_file_set(content_layout, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_CONTENT_LAYOUT);
+               edje_object_signal_emit(_EDJ(content_layout), "change.bubble", "*");
+       } else {
+               D_EMSG("UG mode Unknown");
+               goto error_return;
+       }
+
+       evas_object_size_hint_weight_set(content_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(content_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       edje_object_signal_emit(_EDJ(content_layout), "hide.predictsearch", "*");
+       evas_object_show(content_layout);
+
+       cd->content_layout = content_layout;
+
+       /*Create conformant */
+       conform = msg_ui_composer_conformant_create(cd->main_window, content_layout);
+       if (!conform) {
+               D_EMSG("Fail to create conformant");
+               goto error_return;
+       }
+
+       cd->conform = conform;
+
+       /*Create content*/
+       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+               cd->recipient = msg_ui_composer_recipient_create(content_layout, 1, cd);
+               if (cd->recipient == NULL)
+                       goto error_return;
+
+               elm_object_part_content_set(content_layout, "swl.recipient", cd->recipient->bx_main);
+
+               Evas_Object *predict_search_layout = msg_ui_composer_predictsearch_list_create(content_layout, cd);
+               elm_object_part_content_set(content_layout, "swl.predictsearch", predict_search_layout);
+
+       } else {
+               PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_init_bubble_data(cd->msg_handle, cd);
+               if (!bubble_data) {
+                       goto error_return;
+               }
+
+               cd->bubble_data = bubble_data;
+
+               Evas_Object *bubble_layout = msg_ui_bubble_create_view(content_layout, cd->bubble_data);
+               if (!bubble_layout) {
+                       goto error_return;
+               }
+               elm_object_part_content_set(content_layout, "swl.bubble.content", bubble_layout);
+       }
+
+       Evas_Object *body_layout = msg_ui_composer_body_create(cd, content_layout);
+       if (!body_layout) {
+               goto error_return;
+       }
+
+       elm_object_part_content_set(content_layout, "swl.composer.body", body_layout);
+
+       cd->ly_body = body_layout;
+
+       /*Push content to navi frame*/
+       if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+               back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, true);
+               navi_it = elm_naviframe_item_push(navi_frame, MSGC_STR_NEW_MESSAGE, NULL, NULL, conform, NULL);
+               elm_object_item_part_content_set(navi_it, "title_right_btn", back_btn);
+       } else {
+               back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, false);
+               navi_it = elm_naviframe_item_push(navi_frame, NULL, back_btn, NULL, conform, NULL);
+               tool_bar = msg_ui_bubble_create_controlbar(navi_frame, cd->bubble_data);
+               elm_object_item_part_content_set(navi_it, "controlbar", tool_bar);
+       }
+
+       cd->navi_it = navi_it;
+       cd->back_btn = back_btn;
+
+       /* set navibar to main layout (base) */
+       elm_object_part_content_set(cd->base, "elm.swallow.content", navi_frame);
+
+       evas_object_event_callback_add(navi_frame, EVAS_CALLBACK_DEL, msg_ui_composer_evas_object_delete_cb, "navibar");
+       evas_object_event_callback_add(content_layout, EVAS_CALLBACK_DEL, msg_ui_composer_evas_object_delete_cb, "content_layout");
+       evas_object_event_callback_add(conform, EVAS_CALLBACK_DEL, msg_ui_composer_evas_object_delete_cb, "conform");
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+
+error_return:
+       return COMPOSER_RETURN_FAIL;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, const char *address, const char *name, int contact_id, int thread_id)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer data is NULL");
+       D_MSG_RETVM_IF(cd->msg_ug_mode != MSG_UG_MODE_BUBBLE_COMPOSER, COMPOSER_RETURN_FAIL, "msg_ug_mode is NOT BUBBLE TYPE");
+       D_MSG_RETVM_IF(thread_id <=  0, COMPOSER_RETURN_FAIL, "Composer mode is Not Full");
+       D_MSG_RETVM_IF(address ==  NULL, COMPOSER_RETURN_FAIL, "address is NULL");
+       D_MSG_RETVM_IF(cd->bubble_data == NULL, COMPOSER_RETURN_FAIL, "bubble data is NULL");
+
+       PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+
+       /*Create bubble list*/
+       bubble_data->threadId = thread_id;
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread ID = %d", bubble_data->threadId);
+
+       snprintf(bubble_data->threadAddr, DEF_THREAD_ADDR_LEN, "%s", address);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Adress =%s", bubble_data->threadAddr);
+
+       if (name) {
+               snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", name);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Name =%s", bubble_data->threadName);
+       }
+
+       if (contact_id > 0) {
+               bubble_data->contactId = contact_id;
+       } else {
+               bubble_data->contactId = 0;
+       }
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_change_composer_view(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer data is NULL");
+       D_MSG_RETVM_IF(cd->msg_ug_mode != MSG_UG_MODE_BUBBLE_COMPOSER, COMPOSER_RETURN_FAIL, "Composer mode is Not Full");
+
+       /*Change Mode */
+       cd->msg_ug_mode = MSG_UG_MODE_ONLY_COMPOSER;
+
+       /*Change content layout to composer layout*/
+       edje_object_signal_emit(_EDJ(cd->content_layout), "change.composer", "*");
+
+       elm_scroller_content_min_limit(cd->body_scroll, 0, 0);
+
+       cd->recipient = msg_ui_composer_recipient_create(cd->content_layout, 1, cd);
+       elm_object_part_content_set(cd->content_layout, "swl.recipient", cd->recipient->bx_main);
+
+       Evas_Object *predict_search_layout = msg_ui_composer_predictsearch_list_create(cd->content_layout, cd);
+       elm_object_part_content_set(cd->content_layout, "swl.predictsearch", predict_search_layout);
+
+       MSGC_EVAS_OBJECT_DEL(cd->back_btn);
+
+       Evas_Object *back_btn = __naviframe_back_btn_create(cd->navi_bar, (void *)cd, true);
+       elm_object_item_part_content_set(cd->navi_it, "title_right_btn", back_btn);
+       cd->back_btn = back_btn;
+
+       elm_object_item_text_set(cd->navi_it, MSGC_STR_NEW_MESSAGE);
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_change_bubble_view(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer data is NULL");
+       D_MSG_RETVM_IF(cd->msg_ug_mode != MSG_UG_MODE_FULL_COMPOSER, COMPOSER_RETURN_FAIL, "Composer mode is Not Full");
+
+       /*Change Mode */
+       cd->msg_ug_mode = MSG_UG_MODE_BUBBLE_COMPOSER;
+
+       /*Change content layout to bubble layout*/
+       edje_object_signal_emit(_EDJ(cd->content_layout), "hide.predictsearch", "*");
+       edje_object_signal_emit(_EDJ(cd->content_layout), "change.bubble", "*");
+
+       elm_scroller_content_min_limit(cd->body_scroll, 0, 1);
+       evas_object_size_hint_max_set(cd->body_scroll, 9999, 250);
+
+       /*Init bubble data*/
+       PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_init_bubble_data(cd->msg_handle, cd);
+       if (!bubble_data)
+               return COMPOSER_RETURN_FAIL;
+
+       cd->bubble_data = (void *)bubble_data;
+
+       /*Change naviframe layout for bubble*/
+       Evas_Object *cancel = elm_object_item_part_content_unset(cd->navi_it, "title_right_btn");
+       evas_object_del(cancel);
+
+       Evas_Object *toolbar = msg_ui_bubble_create_controlbar(cd->navi_bar, cd->bubble_data);
+       elm_object_item_part_content_set(cd->navi_it, "controlbar", toolbar);
+
+       Evas_Object *cancel_btn = __naviframe_back_btn_create(cd->navi_bar, (void *)cd, false);
+       elm_object_item_part_content_set(cd->navi_it, "prev_btn", cancel_btn);
+       cd->back_btn = cancel_btn;
+
+       Evas_Object *layout = msg_ui_bubble_create_view(cd->content_layout, cd->bubble_data); // First parameter should be 'content_layout'.
+       elm_object_part_content_set(cd->content_layout, "swl.bubble.content", layout);
+
+       /*remove unused layout*/
+       MSGC_EVAS_OBJECT_DEL(cd->ly_recipient);
+       msg_ui_composer_recipient_delete(cd->recipient);
+       cd->recipient = NULL;
+
+       msg_ui_composer_predictsearch_list_delete(cd);
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+void msg_ui_composer_editable_set(MSG_COMPOSER_VIEW_DATA_S *cd, Eina_Bool editable)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       if (editable == EINA_FALSE) {
+               Evas_Object *body_layout = elm_object_part_content_unset(cd->content_layout, "swl.composer.body");
+               evas_object_hide(body_layout);
+       } else {
+               elm_object_part_content_set(cd->content_layout, "swl.composer.body", cd->ly_body);
+               evas_object_show(cd->ly_body);
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_composer_bubble_del_all(void *data, bundle *b)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       D_MSG_RETM_IF(cd == NULL, "Composer data is NULL");
+
+       ug_send_result(cd->ug, b);
+}
+
+void msg_ui_bubble_composer_navi_title_set(void *data)
+{
+       D_ENTER;
+
+       if (!data)
+               return;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+
+       if (bubble_data->contactId > 0) {
+               if (bubble_data->threadName[0] != '\0')
+                       elm_object_item_text_set(cd->navi_it, bubble_data->threadName);
+               else
+                       elm_object_item_text_set(cd->navi_it, dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
+       } else {
+               if (bubble_data->threadAddr[0] != '\0')
+                       elm_object_item_text_set(cd->navi_it, bubble_data->threadAddr);
+               else
+                       elm_object_item_text_set(cd->navi_it, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+       }
+
+       D_LEAVE;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-popup.c b/composer/src/ui-composer/msg-ui-composer-popup.c
new file mode 100755 (executable)
index 0000000..6fa49f7
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-common.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-recipient-callback.h"
+#include "msg-ui-composer-recipient.h"
+
+
+/*
+       Destroy all window popup
+*/
+void msg_ui_composer_popup_delete_all(void *data)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+
+       Evas_Object * popup;
+       EINA_LIST_FREE(cd->popup_list, popup) {
+               if (popup)
+                       evas_object_del(popup);
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_composer_status_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       Evas_Object *popup = data;
+
+       if (popup)
+               evas_object_del(popup);
+
+       D_LEAVE;
+}
+
+static void __popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+       Evas_Object *popup;
+
+       if (!data)
+               return;
+
+       popup = obj;
+
+       cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       D_PRINT("delete = %s[%p]", (char *)data, obj);
+
+
+       if (cd->popup_list) {
+               D_MSG("popup list count = %d", eina_list_count(cd->popup_list));
+               cd->popup_list = eina_list_remove(cd->popup_list, popup);
+               if (!msg_ui_composer_popup_exist(data) && !cd->loaded_ug && !cd->loaded_aul && !cd->popup_end) {
+                       msg_ui_composer_last_focus_load(cd);
+               }
+       } else {
+
+               D_EMSG("popup_list is not exist");
+       }
+
+       D_LEAVE;
+}
+
+Evas_Object *msg_ui_composer_notify_show(Evas_Object *parent, const char *msg, int time, MSGC_NOTIFY_ORIENT orient, bool is_horizon_mode)
+{
+       D_ENTER;
+
+       Evas_Object *notify;
+       Evas_Object *content_layout;
+
+       notify = elm_notify_add(parent);
+       elm_notify_orient_set(notify, orient);
+
+       content_layout = elm_layout_add(notify);
+       elm_object_content_set(notify, content_layout);
+
+       if (is_horizon_mode == true)
+               elm_layout_theme_set(content_layout, "standard", "selectioninfo", "horizontal/bottom_12");
+       else
+               elm_layout_theme_set(content_layout, "standard", "selectioninfo", "vertical/bottom_12");
+
+       if (msg)
+               elm_object_text_set(content_layout, msg);
+
+       if (time)
+               elm_notify_timeout_set(notify, time);
+
+       evas_object_show(notify);
+
+       D_LEAVE;
+       return notify;
+}
+
+/*
+       TEXT && BUTTON
+*/
+Evas_Object *msg_ui_composer_status_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg, int time)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+       D_MSG_RETVM_IF(cd->main_window == NULL, NULL, "main window is NULL");
+
+       Evas_Object *popup;
+       char *popup_msg;
+
+       popup = elm_popup_add(cd->main_window);
+       if (popup == NULL)
+               return NULL;
+
+       popup_msg = elm_entry_utf8_to_markup(msg);
+       if (popup_msg) {
+               elm_object_text_set(popup, popup_msg);
+               g_free(popup_msg);
+       }
+
+       if (time > 0) {
+               elm_popup_timeout_set(popup, time);
+               evas_object_smart_callback_add(popup, "timeout", msg_ui_composer_status_popup_response_cb, popup);
+       }
+
+       evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_delete_cb, cd);
+
+       cd->popup_list = eina_list_append(cd->popup_list, popup);
+
+       evas_object_show(popup);
+       elm_object_focus_set(popup, EINA_TRUE);
+       return popup;
+}
+
+Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+       D_MSG_RETVM_IF(cd->main_window == NULL, NULL, "main window is NULL");
+
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       Evas_Object *lb;
+
+       popup = elm_popup_add(cd->main_window);
+       if (!popup) return NULL;
+
+       Evas_Object *box;
+       box = elm_box_add(popup);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_process");
+       evas_object_size_hint_align_set(progressbar, 0.5, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+
+
+       lb = elm_label_add(popup);
+       elm_object_style_set(lb, "popup_description/default");
+       evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.0);
+       evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(lb,msg);
+       evas_object_show(lb);
+
+       elm_box_pack_end(box, lb);
+       elm_box_pack_end(box, progressbar);
+
+       elm_object_content_set(popup, box);
+
+       evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_delete_cb, cd);
+
+       cd->popup_list = eina_list_append(cd->popup_list, popup);
+
+       evas_object_show(popup);
+       elm_object_focus_set(popup, EINA_TRUE);
+       D_LEAVE;
+       return popup;
+}
+
+/*
+       list type popup
+*/
+Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char * title, Evas_Object *list)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+       D_MSG_RETVM_IF(cd->main_window == NULL, NULL, "main window is NULL");
+
+       Evas_Object *popup;
+       popup = elm_popup_add(cd->main_window);
+       if (popup == NULL)
+               return NULL;
+
+       elm_object_style_set(popup, "menustyle");
+
+       if (title)
+                 elm_object_part_text_set(popup,"title,text", title);
+
+       if (list)
+               elm_object_content_set(popup, list);
+
+       evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_delete_cb, cd);
+
+       cd->popup_list = eina_list_append(cd->popup_list, popup);
+
+       evas_object_show(popup);
+
+       D_LEAVE;
+       return popup;
+}
+
+Eina_Bool msg_ui_composer_popup_exist(void * data)
+{
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+       cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       if (!cd) return EINA_FALSE;
+       if (!cd->popup_list) return EINA_FALSE;
+       D_MSG("popup count = %d", eina_list_count(cd->popup_list));
+       if(eina_list_count(cd->popup_list)>0) return EINA_TRUE;
+       else return EINA_FALSE;
+}
+
+void msg_ui_composer_popup_focus(void * data)
+{
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+       Evas_Object *p;
+
+       cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+       if (!cd || !cd->popup_list) return;
+
+       p = eina_list_nth(cd->popup_list,0);
+
+       if (!p) return;
+
+       elm_object_focus_set(p, EINA_TRUE);
+}
+
diff --git a/composer/src/ui-composer/msg-ui-composer-predictsearch.c b/composer/src/ui-composer/msg-ui-composer-predictsearch.c
new file mode 100755 (executable)
index 0000000..743c2c8
--- /dev/null
@@ -0,0 +1,537 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-data.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-predictsearch.h"
+
+static void __predictsearch_sel(void *data, Evas_Object *obj, void *event_info);
+static char *__predictsearch_text_get(void *data, Evas_Object *obj, const char *part);
+static void  __predictsearch_del_cb(void *data, Evas_Object *obj);
+static int   __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, int numlist);
+
+static char *__predictsearch_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       D_MSG_RETVM_IF(data == NULL, NULL, "RECIPIENT_ITEM_S data is NULL");
+
+       RECIPIENT_ITEM_S *ps_item_s = (RECIPIENT_ITEM_S *)data;
+       char * keyword = evas_object_data_get(obj, "keyword");
+       bool is_word_in_str;
+
+       if (g_strcmp0(part, "elm.text.1") == 0) {
+               if (strlen(ps_item_s->display_name) == 0)
+                       return g_strdup(search_markup_keyword(ps_item_s->recipient, keyword, &is_word_in_str));
+               else
+                       return g_strdup(search_markup_keyword(ps_item_s->display_name, keyword, &is_word_in_str));
+       } else if (g_strcmp0(part, "elm.text.2") == 0) {
+               return g_strdup(search_markup_keyword(ps_item_s->recipient, keyword, &is_word_in_str));
+       } else if (g_strcmp0(part, "elm.text") == 0) {
+               return g_strdup(search_markup_keyword(ps_item_s->recipient, keyword, &is_word_in_str));
+       } else {
+               D_EMSG("Unknown part = %s", part);
+       }
+
+       return NULL;
+
+}
+
+static void  __predictsearch_del_cb(void *data, Evas_Object *obj)
+{
+       D_MSG_RETM_IF(data == NULL, "RECIPIENT_ITEM_S data is NULL");
+       RECIPIENT_ITEM_S *ps_item_s = (RECIPIENT_ITEM_S *)data;
+       if (ps_item_s)
+               free(ps_item_s);
+}
+
+static void __predictsearch_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(data == NULL, "Composer Data is NULL");
+       D_MSG_RETM_IF(event_info == NULL, "event_info is NULL");
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       RECIPIENT_ITEM_S *ps_item_s = (RECIPIENT_ITEM_S *)elm_object_item_data_get(item);
+       D_MSG_RETM_IF(ps_item_s == NULL, "genlist_item_data is NULL");
+
+       elm_genlist_item_selected_set(item, 0);
+
+       if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) {
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX);
+               msg_ui_composer_predictsearch_clear(cd);
+               msg_ui_composer_recipient_entry_text_set(cd->recipient, "");
+               return;
+       }
+
+       if (msg_ui_composer_recipient_duplicate_check(cd->recipient, ps_item_s->recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
+               D_EMSG("Recipient is duplicate");
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+               msg_ui_composer_predictsearch_clear(cd);
+               msg_ui_composer_recipient_entry_text_set(cd->recipient, "");
+               return;
+       }
+
+       if (msg_ui_composer_recipient_vaild_check(ps_item_s->recipient) == EINA_FALSE) {
+               D_EMSG("Input recipient is Invaild");
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP);
+
+       }
+
+       msg_ui_composer_recipient_append(cd->recipient, ps_item_s->recipient, ps_item_s->index);
+
+       msg_ui_composer_predictsearch_clear(cd);
+       msg_ui_composer_recipient_entry_text_set(cd->recipient, "");
+       D_LEAVE;
+}
+
+static void __predictsearch_show(PREDICTSEARCH_S *ps)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(ps == NULL,"PredictSearchData is NULL");
+       D_MSG_RETM_IF(ps->cd == NULL,"Composer Data is NULL");
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = ps->cd;
+
+       if (ps->IsShow == EINA_FALSE) {
+               ps->IsShow = EINA_TRUE;
+               edje_object_signal_emit(_EDJ(cd->content_layout), "show.predictsearch", "*");
+       }
+
+       D_LEAVE;
+}
+
+static void __predictsearch_hide(PREDICTSEARCH_S *ps)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(ps == NULL,"PredictSearchData is NULL");
+       D_MSG_RETM_IF(ps->cd == NULL,"Composer Data is NULL");
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = ps->cd;
+
+       if (ps->IsShow == EINA_TRUE) {
+               ps->IsShow = EINA_FALSE;
+               edje_object_signal_emit(_EDJ(cd->content_layout), "hide.predictsearch", "*");
+       }
+
+       D_LEAVE;
+}
+
+Evas_Object *msg_ui_composer_predictsearch_list_create(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(cd == NULL, NULL, "Composer Data is NULL");
+
+       PREDICTSEARCH_S *ps;
+       Evas_Object *list;
+
+       ps = calloc(1, sizeof(PREDICTSEARCH_S));
+       D_MSG_RETVM_IF(ps == NULL, NULL, "Fail to malloc of PredictSearchData");
+
+       cd->predictsearch = ps;
+       ps->parent = parent;
+       ps->cd = cd;
+       ps->IsShow = EINA_FALSE;
+
+       ps->itc_2line.item_style = "2text.8";
+       ps->itc_2line.func.content_get = NULL;
+       ps->itc_2line.func.text_get = __predictsearch_text_get;
+       ps->itc_2line.func.state_get = NULL;
+       ps->itc_2line.func.del = __predictsearch_del_cb;
+
+       ps->itc_1line.item_style = "1text.2";
+       ps->itc_1line.func.content_get = NULL;
+       ps->itc_1line.func.text_get = __predictsearch_text_get;
+       ps->itc_1line.func.state_get = NULL;
+       ps->itc_1line.func.del = __predictsearch_del_cb;
+
+
+       list = elm_genlist_add(parent);
+       if (!list) return NULL;
+
+       elm_object_focus_allow_set(list, EINA_FALSE);
+       evas_object_data_set(list, "keyword", ps->txt_ps_keyword);
+       ps->glist_ps = list;
+
+       Evas_Object *bg = msg_ui_composer_bg_create(parent);
+       elm_object_style_set(bg, "edit_mode");
+       elm_object_part_content_set(parent, "swl.bg_predictsearch", bg);
+       D_LEAVE;
+       return list;
+}
+
+void msg_ui_composer_predictsearch_list_delete(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       msg_ui_composer_predictsearch_clear(cd);
+
+       if (cd->predictsearch) {
+               free(cd->predictsearch);
+               cd->predictsearch = NULL;
+       }
+
+       D_LEAVE;
+}
+
+static bool __predictsearch_iterate_load(PREDICTSEARCH_S *ps)
+{
+       D_MSG_RETVM_IF(ps == NULL,false,"Predict Search Data is NULL");
+       D_MSG_RETVM_IF(ps->iter_ps,false,"Predict Search iterate is already exist");
+       D_MSG_RETVM_IF(ps->state == COMPOSER_PREDICTSEARCH_END,false,"Predict Search state END");
+
+       /*First Load contact search list about name number */
+       if (ps->state == COMPOSER_PREDICTSEARCH_NONE){
+               if (contacts_svc_get_list_with_str(CTS_LIST_NUMBERINFOS_WITH_NAME, ps->txt_ps_keyword, &ps->iter_ps) == CTS_SUCCESS) {
+                       if (contacts_svc_iter_next(ps->iter_ps) == CTS_SUCCESS) {
+                               ps->state = COMPOSER_PREDICTSEARCH_NAME;
+                               D_MSG("Get Contact NAME List SUCCESS");
+                               return true;
+                       } else {
+                               contacts_svc_iter_remove(ps->iter_ps);
+                       }
+               }
+       }
+
+       /*Second Load contact search list about log & number*/
+       if (IsValidNumber(ps->txt_ps_keyword) == EINA_TRUE) {
+
+               if (ps->state < COMPOSER_PREDICTSEARCH_NUMBER) {
+                       if (contacts_svc_get_list_with_str(CTS_LIST_NUMBERINFOS_WITH_NUM, ps->txt_ps_keyword, &ps->iter_ps) == CTS_SUCCESS) {
+                               if (contacts_svc_iter_next(ps->iter_ps) == CTS_SUCCESS) {
+                                       ps->state = COMPOSER_PREDICTSEARCH_NUMBER;
+                                       D_MSG("Get Contact NUMBER List SUCCESS");
+                                       return true;
+                               } else {
+                                       contacts_svc_iter_remove(ps->iter_ps);
+                               }
+                       }
+               }
+
+               if (ps->state < COMPOSER_PREDICTSEARCH_LOG){
+                       if (contacts_svc_get_list_with_str(10000, ps->txt_ps_keyword, &ps->iter_ps) == CTS_SUCCESS) {
+                               if (contacts_svc_iter_next(ps->iter_ps) == CTS_SUCCESS) {
+                                       ps->state = COMPOSER_PREDICTSEARCH_LOG;
+                                       D_MSG("Get LOG List SUCCESS");
+                                       return true;
+                               } else {
+                                       contacts_svc_iter_remove(ps->iter_ps);
+                                       D_MSG("TEST Get LOG List FAIL");
+                               }
+                       }
+               }
+       }
+
+       /*Load contact search list about email*/
+       if (ps->state < COMPOSER_PREDICTSEARCH_EMAIL) {
+               if (contacts_svc_get_list_with_str(CTS_LIST_EMAILINFOS_WITH_EMAIL, ps->txt_ps_keyword, &ps->iter_ps) == CTS_SUCCESS) {
+                       if (contacts_svc_iter_next(ps->iter_ps) == CTS_SUCCESS) {
+                               ps->state = COMPOSER_PREDICTSEARCH_EMAIL;
+                               D_MSG("Get Contact EMAIL List SUCCESS");
+                               return true;
+                       } else {
+                               contacts_svc_iter_remove(ps->iter_ps);
+                       }
+               }
+       }
+
+       D_EMSG("Search Data is NOT exist")
+       ps->state = COMPOSER_PREDICTSEARCH_END;
+       ps->iter_ps = NULL;
+       return false;
+}
+
+static int   __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, const int req_count)
+{
+       D_MSG_RETVM_IF(ps == NULL, 0,"Predict Search Data is NULL");
+       D_MSG_RETVM_IF(ps->iter_ps == NULL, 0,"Predict Search List iteration Data is NULL");
+
+       RECIPIENT_ITEM_S *ct_item;
+       CTSvalue *row_info = NULL;
+
+       int index;
+       int ret = CTS_SUCCESS;
+       int listcount = 0;
+       int param_get_int;
+       int param_get_addr;
+       int param_get_name;
+       int param_get_first;
+       int param_get_last;
+
+       const char *recipient;
+       const char *display;
+       const char *first, *last;
+       char * maked_display;
+       int i = 0 ;
+       Evas_Object * genlist = ps->glist_ps;
+
+       if(ps->state == COMPOSER_PREDICTSEARCH_NAME) {
+               param_get_int = CTS_LIST_NUM_CONTACT_ID_INT;
+               param_get_addr = CTS_LIST_NUM_NUMBER_STR;
+               param_get_name =  CTS_LIST_NUM_CONTACT_DISPLAY_STR;
+               param_get_first = CTS_LIST_NUM_CONTACT_FIRST_STR;
+               param_get_last = CTS_LIST_NUM_CONTACT_LAST_STR;
+       } else if (ps->state == COMPOSER_PREDICTSEARCH_LOG) {
+               /*Nothing to Do*/
+       } else if (ps->state == COMPOSER_PREDICTSEARCH_NUMBER) {
+               param_get_int = CTS_LIST_NUM_CONTACT_ID_INT;
+               param_get_addr = CTS_LIST_NUM_NUMBER_STR;
+               param_get_name =  CTS_LIST_NUM_CONTACT_DISPLAY_STR;
+               param_get_first = CTS_LIST_NUM_CONTACT_FIRST_STR;
+               param_get_last = CTS_LIST_NUM_CONTACT_LAST_STR;
+       } else if (ps->state == COMPOSER_PREDICTSEARCH_EMAIL){
+               param_get_int = CTS_LIST_EMAIL_CONTACT_ID_INT;
+               param_get_addr = CTS_LIST_EMAIL_ADDR_STR;
+               param_get_name =  CTS_LIST_EMAIL_CONTACT_DISPLAY_STR;
+               param_get_first = CTS_LIST_EMAIL_CONTACT_FIRST_STR;
+               param_get_last = CTS_LIST_EMAIL_CONTACT_LAST_STR;
+       } else {
+               ps->state = COMPOSER_PREDICTSEARCH_END;
+               D_MSG("Predict State is END");
+               return i;
+       }
+
+
+       while (CTS_SUCCESS == ret) {
+               row_info = contacts_svc_iter_get_info(ps->iter_ps);
+
+               if (row_info) {
+                       if (ps->state == COMPOSER_PREDICTSEARCH_LOG) {
+                               ct_item = (RECIPIENT_ITEM_S *)calloc(1, sizeof(RECIPIENT_ITEM_S));
+                               strncpy(ct_item->recipient,(char *)row_info, sizeof(ct_item->recipient) - 1);
+                               elm_genlist_item_append(genlist, &ps->itc_1line, ct_item, NULL, ELM_GENLIST_ITEM_NONE, __predictsearch_sel, ps->cd);
+
+                               listcount++;
+                       } else {
+
+                               index = contacts_svc_value_get_int(row_info, param_get_int);
+                               recipient = contacts_svc_value_get_str(row_info, param_get_addr);
+                               display = contacts_svc_value_get_str(row_info, param_get_name);
+
+                               if (index > 0 && recipient) {
+                                       ct_item = (RECIPIENT_ITEM_S *)calloc(1, sizeof(RECIPIENT_ITEM_S));
+                                       ct_item->index = index;
+
+                                       strncpy(ct_item->recipient,
+                                                       recipient,
+                                                       COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX);
+
+                                       if (display) {
+                                               strncpy(ct_item->display_name,
+                                                               display,
+                                                               COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX);
+                                       } else {
+
+                                               first = contacts_svc_value_get_str(row_info, param_get_first);
+                                               last = contacts_svc_value_get_str(row_info, param_get_last);
+                                               maked_display = make_display_name(first, last);
+                                               if (maked_display) {
+                                                       strncpy(ct_item->display_name,
+                                                                       maked_display,
+                                                                       COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX);
+                                                       g_free(maked_display);
+                                               } else {
+                                                       strncpy(ct_item->display_name,
+                                                                       recipient,
+                                                                       COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX);
+                                               }
+                                       }
+
+                                       elm_genlist_item_append(genlist, &ps->itc_2line, ct_item, NULL, ELM_GENLIST_ITEM_NONE, __predictsearch_sel, ps->cd);
+                                       listcount++;
+                               } else {
+                                       D_MSG("[Waring Search result has not contact index or recipient]");
+                               }
+                       }
+                       i++;
+                       ps->count++;
+                       contacts_svc_value_free(row_info);
+               }
+
+               if(req_count > 0 && i == req_count)
+                       return i;
+
+               ret = contacts_svc_iter_next(ps->iter_ps);
+       }
+
+       if (CTS_SUCCESS != ret) {
+               contacts_svc_iter_remove(ps->iter_ps);
+               ps->iter_ps = NULL;
+       }
+
+       return i;
+}
+
+static void  __predictsearch_list_append(PREDICTSEARCH_S *ps, int req_count)
+{
+       int remain_list;
+       int addcount = 0;
+       int retcount;
+       bool bLoad;
+       remain_list = req_count;
+
+       if (ps->iter_ps == NULL || ps->state == COMPOSER_PREDICTSEARCH_END) {
+               return;
+       }
+
+       while (addcount < req_count) {
+
+               retcount = __predictsearch_genlist_item_append(ps, req_count-addcount);
+               if (retcount <= 0)
+                       return;
+
+               addcount += retcount;
+
+               if (ps->state == COMPOSER_PREDICTSEARCH_END) {
+                       D_MSG("PredictSearchList append Done");
+                       return;
+               }
+
+               if (ps->iter_ps == NULL) {
+                       bLoad = __predictsearch_iterate_load(ps);
+                       if (bLoad == false)
+                               return;
+               }
+       }
+
+}
+
+Eina_Bool __predictsearch_idler_process(void *data)
+{
+       D_MSG_RETVM_IF(data == NULL, EINA_FALSE,"Predict Search Data is NULL");
+
+       PREDICTSEARCH_S *ps = data;
+
+       __predictsearch_list_append(ps, COMPOSER_PSLIST_COUNT_AT_TIME);
+
+       if (ps->state == COMPOSER_PREDICTSEARCH_END || ps->iter_ps == NULL) {
+               ps->idler_ps = NULL;
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+Eina_Bool __predictsearch_timer_process(void *data)
+{
+       D_MSG_RETVM_IF(data == NULL, ECORE_CALLBACK_CANCEL,"Predict Search Data is NULL");
+       PREDICTSEARCH_S *ps = data;
+       MSG_COMPOSER_VIEW_DATA_S *cd = ps->cd;
+       D_MSG_RETVM_IF(cd == NULL, ECORE_CALLBACK_CANCEL,"Composer Data is NULL");
+
+       ps->timer_ps = NULL;
+
+       /*Check req string with predict search keyword*/
+       if (strlen(ps->txt_ps_reqkeyword) && !strcmp(ps->txt_ps_reqkeyword, ps->txt_ps_keyword)){
+               D_MSG("SAME REQUEST KEYWORD request string %s", ps->txt_ps_reqkeyword);
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       /*clear and reset predictsearch struct*/
+       msg_ui_composer_predictsearch_clear(cd);
+
+       /*change ps keyword*/
+       strncpy(ps->txt_ps_keyword, ps->txt_ps_reqkeyword, sizeof(ps->txt_ps_keyword)-1);
+       D_MSG("Predict Search Sting Update [%s]", ps->txt_ps_keyword);
+
+       /*Search List Load & show*/
+       if (__predictsearch_iterate_load(ps) == true) {
+               __predictsearch_list_append(ps, COMPOSER_PSLIST_COUNT_AT_TIME);
+
+               if (ps->count > 0) {
+                       __predictsearch_show(ps);
+                       msg_ui_composer_bt_hide(cd->recipient);
+
+                       if (ps->state != COMPOSER_PREDICTSEARCH_END)
+                               ps->idler_ps = ecore_idler_add(__predictsearch_idler_process, ps);
+
+               } else {
+                       __predictsearch_hide(ps);
+                       msg_ui_composer_bt_show(cd->recipient);
+               }
+       } else {
+               __predictsearch_hide(ps);
+               msg_ui_composer_bt_show(cd->recipient);
+       }
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void msg_ui_composer_predictsearch_request(MSG_COMPOSER_VIEW_DATA_S *cd, const char *str)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+       D_MSG_RETM_IF(cd->predictsearch == NULL, "PredictSearch Data is Invalid");
+
+       PREDICTSEARCH_S *ps = (PREDICTSEARCH_S *)cd->predictsearch;
+
+       if (str && strlen(str) > 0) {
+
+               /*changed request string of predict search*/
+               bzero(ps->txt_ps_reqkeyword, sizeof(ps->txt_ps_reqkeyword)-1);
+               strncpy(ps->txt_ps_reqkeyword, str, sizeof(ps->txt_ps_reqkeyword)-1);
+
+               if (ps->timer_ps) {
+                       ecore_timer_del(ps->timer_ps);
+               }
+               ps->timer_ps = ecore_timer_add(COMPOSER_PS_TIMER,__predictsearch_timer_process, ps);
+       } else {
+               msg_ui_composer_predictsearch_clear(cd);
+               __predictsearch_hide(ps);
+               msg_ui_composer_bt_show(cd->recipient);
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_composer_predictsearch_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+       D_MSG_RETM_IF(cd->predictsearch == NULL, "PredictSearch Data is Invalid");
+
+       PREDICTSEARCH_S *ps = cd->predictsearch;
+       if (ps->timer_ps) {
+               ecore_timer_del(ps->timer_ps);
+               ps->timer_ps = NULL;
+       }
+
+       if (ps->idler_ps) {
+               ecore_idler_del(ps->idler_ps);
+               ps->idler_ps = NULL;
+       }
+
+       if(ps->iter_ps){
+               contacts_svc_iter_remove(ps->iter_ps);
+               ps->iter_ps= NULL;
+       }
+
+       if (ps->glist_ps) {
+               elm_genlist_clear(ps->glist_ps);
+       }
+
+       bzero(ps->txt_ps_keyword, sizeof(ps->txt_ps_keyword));
+
+       ps->state = COMPOSER_PREDICTSEARCH_NONE;
+
+       ps->count = 0;
+
+       __predictsearch_hide(ps);
+
+       D_LEAVE;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-recipient-callback.c b/composer/src/ui-composer/msg-ui-composer-recipient-callback.c
new file mode 100755 (executable)
index 0000000..998a914
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-composer-common.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-external.h"
+#include "msg-ui-composer-predictsearch.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-recipient-callback.h"
+
+/*==================================================================================================
+*                                                              FUNCTION IMPLEMENTATIONS
+*==================================================================================================*/
+
+void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       const char *bt_label = elm_object_text_get(obj);
+       D_MSG("clicked bt label [%s]", bt_label);
+
+       if (!g_strcmp0(bt_label, MSGC_STR_RECENT)) {
+               msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_LOG, NULL);
+       } else if (!g_strcmp0(bt_label, MSGC_STR_CONTACT)) {
+               msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_CONTACTLIST, NULL);
+       } else {
+               D_EMSG("Under Construct");
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_recipient_multibuttonentry_focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd;
+       RECIPIENT_S *rd;
+       PREDICTSEARCH_S *ps;
+
+       cd = data;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       rd = cd->recipient;
+       D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL");
+
+       ps = cd->predictsearch;
+       D_MSG_RETM_IF(rd == NULL, "Predict Data is NULL");
+
+       msg_ui_composer_last_focused_entry_set(cd, obj);
+
+       if (ps->IsShow == EINA_FALSE)
+               msg_ui_composer_bt_show(rd);
+
+       elm_multibuttonentry_expanded_set(obj, EINA_TRUE);
+
+       D_LEAVE;
+}
+
+void msg_ui_recipient_multibuttonentry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       /*If it exist Selected item popup, then it should not shrink mode set == 1*/
+       if(msg_ui_composer_popup_exist(cd) == EINA_TRUE) {
+               return;
+       }
+
+       elm_multibuttonentry_expanded_set(obj, EINA_FALSE);
+       msg_ui_composer_bt_hide(cd->recipient);
+       D_LEAVE;
+}
+
+void msg_ui_recipient_multibuttonentry_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       if(msg_ui_composer_popup_exist(cd) == EINA_TRUE) {
+               msg_ui_composer_popup_focus(cd);
+               return;
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       RECIPIENT_S *rd = cd->recipient;
+       D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL");
+
+       char *recipient_str;
+       static char saved_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX + 1] = { 0, };
+
+       recipient_str = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
+       if (recipient_str == NULL)
+               return;
+
+       if (g_strcmp0(saved_str, recipient_str) == 0) {
+               D_MSG("It is same string before str(%s), current str(%s)", saved_str, recipient_str);
+               g_free(recipient_str);
+               return;
+       }
+
+       strncpy(saved_str, recipient_str, sizeof(saved_str) - 1);
+       saved_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX] = '\0';
+
+       if (strlen(recipient_str) > 0 ) {
+               msg_ui_composer_predictsearch_request(cd, recipient_str);
+       } else {
+               msg_ui_composer_predictsearch_clear(cd);
+               if (elm_object_focus_get(rd->mbe) == EINA_TRUE)
+                       msg_ui_composer_bt_show(rd);
+       }
+
+       g_free(recipient_str);
+       D_LEAVE;
+}
+
+void msg_ui_recipient_multibuttonentry_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       RECIPIENT_S *rd = cd->recipient;
+       D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL");
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       D_MSG_RETM_IF(item == NULL, "Selected Object Item is NULL");
+
+       RECIPIENT_ITEM_S *r_item;
+
+       r_item = elm_object_item_data_get(item);
+       if (r_item == NULL) {
+               D_MSG("There are no item data");
+               return;
+       }
+
+       elm_multibuttonentry_item_selected_set(item, EINA_FALSE);
+
+       msg_ui_composer_last_focused_entry_set(cd, rd->mbe);
+
+       Evas_Object *entry = elm_multibuttonentry_entry_get(rd->mbe);
+       char *entry_txt = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+       if (entry_txt) {
+               if (strlen(entry_txt) > 0)
+                       elm_multibuttonentry_item_append(rd->mbe, entry_txt, NULL, NULL);
+
+               g_free(entry_txt);
+       }
+
+       if (r_item->type != COMPOSER_RECP_ADDR_INVALID && r_item->index > 0 ) {
+       } else {
+               elm_entry_entry_set(entry, elm_object_item_text_get(item));
+               elm_entry_cursor_line_end_set(entry);
+               elm_object_item_del(item);
+       }
+
+       D_LEAVE;
+}
+
+Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, const char *item_label, void *item_data, void *data)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(item_label == NULL, EINA_FALSE, "item_label is NULL");
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = data;
+       D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "Composer Data is NULL");
+
+       RECIPIENT_S *rd = cd->recipient;
+       D_MSG_RETVM_IF(rd == NULL, EINA_FALSE, "Recipient Data is NULL");
+
+       RECIPIENT_ITEM_S *r_item = NULL;
+
+       /*Check recipient count*/
+       int r_count = msg_ui_composer_recipient_count_get(rd);
+       if (r_count >= COMPOSER_RECIPIENT_COUNT_MAX) {
+               D_EMSG("recipient is over max count %d ", COMPOSER_RECIPIENT_COUNT_MAX);
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX);
+               msg_ui_composer_recipient_entry_text_set(rd, "");
+               return EINA_FALSE;
+       }
+
+       if (item_data) {
+               D_MSG("This is a checked item before append");
+               return EINA_TRUE;
+       }
+
+       if (msg_ui_composer_recipient_duplicate_check(cd->recipient, item_label) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
+               D_EMSG("Input recipient is duplication");
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+               msg_ui_composer_recipient_entry_text_set(rd, "");
+               return EINA_FALSE;
+       }
+
+       r_item = msg_ui_composer_recipient_item_make_by_string(item_label);
+       if (r_item == NULL)
+               return EINA_FALSE;
+
+       if (r_item->type == COMPOSER_RECP_ADDR_INVALID) {
+               D_EMSG("recipient is invalid recipient");
+               msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP);
+       }
+
+       g_free(r_item);
+       return EINA_TRUE;
+}
+
+void msg_ui_recipient_multibuttonentry_item_added_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       D_MSG_RETM_IF(item == NULL, "Mbe item is NULL");
+
+       RECIPIENT_ITEM_S *recipient_item = NULL;
+
+       if (elm_object_item_data_get(item) == NULL) {
+               char *bt_label = elm_entry_markup_to_utf8(elm_object_item_text_get(item));
+               if (bt_label) {
+                       recipient_item = msg_ui_composer_recipient_item_make_by_string(bt_label);
+                       if (recipient_item) {
+                               elm_object_item_text_set(item, recipient_item->display_name);
+                               elm_object_item_data_set(item, recipient_item);
+                       } else {
+                               elm_object_item_del(item);
+                       }
+
+                       g_free(bt_label);
+               } else {
+                       D_EMSG("button label is null");
+               }
+
+       } else {
+               recipient_item = elm_object_item_data_get(item);
+               D_MSG(" recipient_item index [%d], recipient_item recipient [%s], recipient_item display_name [%s], recipient_item->image_path [%s]", recipient_item->index, recipient_item->recipient, recipient_item->display_name, recipient_item->image_path);
+       }
+
+}
+
+void msg_ui_recipient_multibuttonentry_item_deleted_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;;
+       D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+       RECIPIENT_ITEM_S *recipient_item = elm_object_item_data_get(event_info);
+       D_MSG_RETM_IF(recipient_item == NULL,"reicpient item is NULL");
+
+       D_MSG("===== START of recipient_item free =====");
+       D_MSG("recipient_item index [%d]", recipient_item->index);
+       D_MSG("recipient_item recipient [%s]", recipient_item->recipient);
+       D_MSG("recipient_item display_name [%s]", recipient_item->display_name);
+       D_MSG("===== END of recipient_item free =====");
+       g_free(recipient_item);
+
+       D_LEAVE;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-recipient.c b/composer/src/ui-composer/msg-ui-composer-recipient.c
new file mode 100755 (executable)
index 0000000..0b5f845
--- /dev/null
@@ -0,0 +1,895 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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.
+ */
+
+/* includes*/
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-recipient-callback.h"
+#include "msg-ui-composer-message.h"
+
+/*==================================================================================================
+*                                                              FUNCTION IMPLEMENTATIONS
+*==================================================================================================*/
+static void __mbe_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(obj == NULL,"Mbe object is NULL point");
+
+       RECIPIENT_ITEM_S *recipient_item;
+       Elm_Object_Item *mbe_item = elm_multibuttonentry_first_item_get(obj);
+       D_MSG("===== START of mbe_items free =====");
+       while (mbe_item) {
+               recipient_item = elm_object_item_data_get(mbe_item);
+               if (recipient_item) {
+                       D_MSG("===== START of recipient_item free =====");
+                       D_MSG("recipient_item index [%d]", recipient_item->index);
+                       D_MSG("recipient_item recipient [%s]", recipient_item->recipient);
+                       D_MSG("recipient_item display_name [%s]", recipient_item->display_name);
+                       D_MSG("===== END of recipient_item free =====");
+                       g_free(recipient_item);
+               }
+
+               mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+       }
+       D_MSG("===== END of mbe_items free =====");
+
+       D_LEAVE;
+}
+
+static Eina_Bool __move_to_scroll_end(void *data)
+{
+       D_ENTER;
+       RECIPIENT_S *rd = (RECIPIENT_S *)data;
+       D_MSG_RETVM_IF(rd == NULL, EINA_FALSE, "recipient data is NULL");
+
+       rd->scroll_down_idler = NULL;
+
+       Evas_Coord scr_w, scr_h, box_h;
+       evas_render(evas_object_evas_get(rd->bx_main));
+
+       elm_scroller_region_get(rd->sc, NULL, NULL, &scr_w, &scr_h);
+       D_PRINT("scroller region w = %d, h = %d ", scr_w, scr_h);
+
+       evas_object_geometry_get(rd->mbe, NULL, NULL, NULL, &box_h);
+       D_PRINT("mbe geometry h = %d ", box_h);
+
+       elm_scroller_region_show(rd->sc, 0, box_h - scr_h, scr_w, scr_h);
+       D_PRINT("scroller region shwo x = %d, y = %d, w = %d, h = %d ", 0, box_h - scr_h, scr_w, scr_h);
+
+       D_LEAVE;
+       return EINA_FALSE;
+}
+
+static void __mbe_expanded_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       RECIPIENT_S *rd = (RECIPIENT_S *)data;
+       D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+
+       if (rd->scroll_down_idler) {
+               ecore_idler_del(rd->scroll_down_idler);
+               rd->scroll_down_idler = NULL;
+       }
+
+       rd->scroll_down_idler = ecore_idler_add(__move_to_scroll_end, rd);
+       D_LEAVE;
+}
+
+static void __mbe_contracted_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       RECIPIENT_S *rd = (RECIPIENT_S *)data;
+       D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+
+       if (rd->scroll_down_idler) {
+               ecore_idler_del(rd->scroll_down_idler);
+               rd->scroll_down_idler = NULL;
+       }
+
+       D_LEAVE;
+}
+
+static Evas_Object *__mbe_create(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       Evas_Object *mbe, *entry;
+       Ecore_IMF_Context *context;
+
+       char label_txt[TO_FIELD_LABEL_SIZE_MAX] = { 0, };
+       gsize len;
+
+       mbe = elm_multibuttonentry_add(rd->parent);
+       evas_object_size_hint_weight_set(mbe, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(mbe, EVAS_HINT_FILL, 0.0);
+       evas_object_show(mbe);
+
+       /*set mbe label */
+       memset(label_txt, '\0', sizeof(label_txt));
+       len = snprintf(label_txt, (gsize)sizeof(label_txt), "%s:", MSGC_STR_TO);
+       if (len == -1) {
+               D_EMSG("len = %d", len);
+       } else if (len > 0) {
+               label_txt[len] = '\0';
+               elm_object_text_set(mbe, label_txt);
+       } else {
+               D_EMSG("len = %d", len);
+       }
+
+       /*set guide text */
+       elm_object_part_text_set(mbe, "guide", MSGC_STR_ADD_RECIPIENT);
+
+       /*set mbe callback */
+       evas_object_smart_callback_add(mbe, "item,added", msg_ui_recipient_multibuttonentry_item_added_cb, rd->cd);
+       evas_object_smart_callback_add(mbe, "item,deleted", msg_ui_recipient_multibuttonentry_item_deleted_cb, rd->cd);
+       evas_object_smart_callback_add(mbe, "item,clicked", msg_ui_recipient_multibuttonentry_item_selected_cb, rd->cd);
+       evas_object_smart_callback_add(mbe, "expanded", __mbe_expanded_cb, rd);
+       evas_object_smart_callback_add(mbe, "contracted", __mbe_contracted_cb, rd);
+
+       evas_object_smart_callback_add(mbe, "focused", msg_ui_recipient_multibuttonentry_focused_cb, rd->cd);
+       evas_object_smart_callback_add(mbe, "clicked", msg_ui_recipient_multibuttonentry_clicked_cb, rd->cd);
+       evas_object_smart_callback_add(mbe, "unfocused", msg_ui_recipient_multibuttonentry_unfocused_cb, rd->cd);
+
+       evas_object_event_callback_add(mbe, EVAS_CALLBACK_DEL, __mbe_delete_cb, rd->cd);
+
+       elm_multibuttonentry_item_filter_append(mbe, msg_ui_recipient_multibuttonentry_item_verify_cb, rd->cd);
+
+       entry = elm_multibuttonentry_entry_get(mbe);
+       evas_object_smart_callback_add(entry, "changed", msg_ui_recipient_entry_changed_cb, rd->cd);
+       evas_object_smart_callback_add(entry, "preedit,changed", msg_ui_recipient_entry_changed_cb, rd->cd);
+
+       context = elm_entry_imf_context_get(entry);
+       ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, msg_ui_composer_entry_imf_state_cb, rd->cd);
+
+       D_LEAVE;
+       return mbe;
+}
+
+static Evas_Object *__scroller_create(Evas_Object *parent)
+{
+       D_ENTER;
+       Evas_Object *scroller;
+       scroller = elm_scroller_add(parent);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       D_LEAVE;
+       return scroller;
+}
+
+static Evas_Object *__msg_ui_composer_recipient_to_layout_create(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       if (rd == NULL)
+               return NULL;
+       Evas_Object *layout;
+       Evas_Object *parent  = rd->parent;
+
+       layout = msg_ui_composer_load_edj(parent, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_RECIPIENT_TO_FIELD);
+       if (!layout) {
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout);
+
+       Evas_Object *to_sc = __scroller_create(parent);
+       rd->sc = to_sc;
+
+       Evas_Object *box = elm_box_add(parent);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(box);
+
+       Evas_Object *box2 = elm_box_add(parent);
+       evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 0.0);
+       evas_object_show(box2);
+
+       elm_box_pack_end(box, box2);
+
+       Evas_Object *mbe = __mbe_create(rd);
+       rd->mbe = mbe;
+
+       elm_object_content_set(to_sc, box);
+       elm_box_pack_end(box2, mbe);
+       elm_object_part_content_set(layout, "swl.mbe_scroll", to_sc);
+
+       Evas_Object *base = msg_ui_composer_layout_create(parent, false);
+       Evas_Object *bg = msg_ui_composer_bg_create(base);
+       elm_object_part_content_set(base, "elm.swallow.bg", bg);
+       elm_object_part_content_set(base, "elm.swallow.content", layout);
+
+       D_LEAVE;
+       return base;
+}
+
+static Evas_Object *__msg_ui_composer_recipient_ly_bt_create(RECIPIENT_S *rd)
+{
+       D_ENTER;
+
+       Evas_Object *layout, *bt;
+
+       layout = msg_ui_composer_load_edj(rd->parent, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_RECIPIENT_BT_FIELD);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout);
+
+       bt = elm_button_add(rd->parent);
+       elm_object_text_set(bt, MSGC_STR_RECENT);
+       elm_object_style_set(bt, "style2");
+       evas_object_show(bt);
+
+       elm_object_part_content_set(layout, "swl.bt_left", bt);
+       evas_object_smart_callback_add(bt, "clicked", msg_ui_recipient_bt_clicked_cb, rd->cd);
+
+       bt = elm_button_add(rd->parent);
+       elm_object_text_set(bt, MSGC_STR_CONTACT);
+       elm_object_style_set(bt, "style2");
+       evas_object_show(bt);
+       elm_object_part_content_set(layout, "swl.bt_right", bt);
+       evas_object_smart_callback_add(bt, "clicked", msg_ui_recipient_bt_clicked_cb, rd->cd);
+
+       Evas_Object *base = msg_ui_composer_layout_create(rd->parent, false);
+       Evas_Object *bg = msg_ui_composer_bg_create(base);
+       elm_object_part_content_set(base, "elm.swallow.bg", bg);
+       elm_object_part_content_set(base, "elm.swallow.content", layout);
+
+       D_LEAVE;
+       return base;
+}
+
+static void __msg_ui_composer_recipient_layout_create(RECIPIENT_S *r)
+{
+       D_ENTER;
+       if(r->parent == NULL)
+               return;
+
+       /*Create layout*/
+       Evas_Object *bx;
+       bx = elm_box_add(r->parent);
+       evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(bx);
+
+       r->bx_main = bx;
+
+       r->ly_to = __msg_ui_composer_recipient_to_layout_create(r);
+       elm_box_pack_end(r->bx_main, r->ly_to);
+
+       r->ly_bt = __msg_ui_composer_recipient_ly_bt_create(r);
+       evas_object_hide(r->ly_bt);
+
+       D_LEAVE;
+}
+
+static RECIPIENT_ITEM_S *__msg_ui_composer_recipient_item_make(
+                                                                                       COMPOSER_RECP_ADDR_E type,
+                                                                                       int index,
+                                                                                       const char *display_name,
+                                                                                       const char *recipient,
+                                                                                       const char *image_path)
+{
+       RECIPIENT_ITEM_S *recipient_item;
+       RECIPIENT_ITEM_S r_item;
+
+       bzero(&r_item, sizeof(r_item));
+
+       r_item.type = type;
+       r_item.index = index;
+
+       if (recipient)
+               strncpy(r_item.recipient, recipient, sizeof(r_item.recipient) - 1);
+
+       if (display_name)
+               strncpy(r_item.display_name, display_name, sizeof(r_item.display_name) - 1);
+
+       if (image_path)
+               strncpy(r_item.image_path, image_path, sizeof(r_item.image_path) - 1);
+
+       recipient_item = calloc(1, sizeof(RECIPIENT_ITEM_S));
+       if (!recipient_item) return NULL;
+
+       memcpy(recipient_item, &r_item, sizeof(RECIPIENT_ITEM_S));
+
+       D_MSG("---------- make item start----------");
+       D_MSG(">>type = %d", r_item.type);
+       D_MSG(">>index = %d", r_item.index);
+       D_MSG(">>displayname = %s", r_item.display_name);
+       D_MSG(">>recipient = %s", r_item.recipient);
+       D_MSG(">>image path = %s", r_item.image_path);
+       D_MSG("---------- make item end----------");
+       return recipient_item;
+}
+
+RECIPIENT_ITEM_S *msg_ui_composer_recipient_item_make_by_string(const char *str)
+{
+       COMPOSER_UTIL_ADDRTYPE_E type;
+       RECIPIENT_ITEM_S r_item;
+       RECIPIENT_ITEM_S *recipient_item;
+
+       int ret;
+       char tmp_display_name1[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1] = {0,};
+       char tmp_display_name2[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1] = {0,};
+
+       bzero(&r_item, sizeof(r_item));
+
+       if (!str) return NULL;
+
+       type = get_address_type(str);
+       if (type == COMPOSER_UTIL_ADDRTYPE_NUMBER || type == COMPOSER_UTIL_ADDRTYPE_EMAIL) {
+
+               strncpy(r_item.recipient, str, sizeof(r_item.recipient)-1);
+               r_item.type = msg_ui_composer_recipient_type_get(r_item.recipient);
+               r_item.index = get_contact_index_by_recipient(str);
+               if (r_item.index <= 0 || get_contact_display_name_by_index(r_item.index, r_item.display_name, sizeof(r_item.display_name))) {
+                               strncpy(r_item.display_name, str, sizeof(r_item.display_name)-1);
+               }
+
+       } else {/*IF string is name*/
+               r_item.index = get_contact_index_by_name(str);
+               if (r_item.index > 0) {
+                       ret = get_contact_display_name_by_index(r_item.index, r_item.display_name, sizeof(r_item.display_name)-1);
+                       if (COMPOSER_RETURN_SUCCESS != ret){
+                               return NULL;
+                       }
+
+                       remove_space(r_item.display_name, tmp_display_name1, sizeof(tmp_display_name1)-1);
+                       remove_space(str, tmp_display_name2, sizeof(tmp_display_name2)-1);
+                       if (g_ascii_strncasecmp(tmp_display_name1, tmp_display_name2, strlen(tmp_display_name1))==0){
+                               D_MSG("Contact's name %s = Inputted name %s", r_item.display_name, str);
+                               ret = get_contact_default_recipient_by_index(r_item.index, r_item.recipient ,sizeof(r_item.recipient)-1);
+                               if (CTS_SUCCESS != ret){
+                                       return NULL;
+                               }
+
+                               r_item.type = msg_ui_composer_recipient_type_get(r_item.recipient);
+                       } else {
+                               D_MSG("Contact's name %s != Inputted name %s", r_item.display_name, str);
+                               r_item.type = COMPOSER_RECP_ADDR_INVALID;
+                               r_item.index = 0;
+                               bzero(r_item.display_name, sizeof(r_item.display_name));
+                               strncpy(r_item.display_name, str, sizeof(r_item.display_name)-1);
+                       }
+
+
+               } else {
+                       r_item.type = COMPOSER_RECP_ADDR_INVALID;
+                       strncpy(r_item.display_name, str, sizeof(r_item.display_name)-1);
+               }
+       }
+
+       /*make recipient Item*/
+       recipient_item = __msg_ui_composer_recipient_item_make(r_item.type, r_item.index, r_item.display_name, r_item.recipient, NULL);
+       if (!recipient_item) {
+               D_MSG("Fail of msg_ui_composer_recipient_item_make");
+               return NULL;
+       }
+
+       return recipient_item;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_duplicate_check(RECIPIENT_S *rd, const char *recipient)
+{
+       D_ENTER;
+
+       RECIPIENT_ITEM_S *recipient_item;
+       Elm_Object_Item *mbe_item;
+       COMPOSER_UTIL_ADDRTYPE_E inp_type, tmp_type;
+
+       char inp_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX + 1] = { 0, };
+       char tmp_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX + 1] = { 0, };
+
+       bool is_dup = FALSE;
+       int len = 0;
+
+       len = strlen(recipient);
+       inp_type = get_address_type(recipient);
+
+       mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
+       while (mbe_item) {
+               recipient_item = elm_object_item_data_get(mbe_item);
+
+               if (recipient_item) {
+                       tmp_type = get_address_type(recipient_item->recipient);
+
+                       if (inp_type == tmp_type) {
+                               if (inp_type == COMPOSER_UTIL_ADDRTYPE_NUMBER) {
+                                       int tlen = strlen(recipient_item->recipient);
+
+                                       if (len >= COMPARE_STRING_NUM && tlen >= COMPARE_STRING_NUM) {
+                                               strncpy(inp_str, recipient, sizeof(inp_str) - 1);
+                                               strncpy(tmp_str, recipient_item->recipient, sizeof(tmp_str) - 1);
+
+                                               g_strreverse(inp_str);
+                                               g_strreverse(tmp_str);
+
+                                               if (!strncmp(inp_str, tmp_str, COMPARE_STRING_NUM)) {
+                                                       is_dup = TRUE;
+                                                       break;
+                                               }
+                                       } else if (len == tlen) {
+                                               if (!g_strcmp0(recipient_item->recipient, recipient)) {
+                                                       D_MSG("DUP TRUE");
+                                                       is_dup = TRUE;
+                                                       break;
+                                               }
+                                       }
+                               } else if (inp_type == COMPOSER_UTIL_ADDRTYPE_EMAIL){
+                                       if (!g_strcmp0(recipient_item->recipient, recipient)) {
+                                               is_dup = TRUE;
+                                               break;
+                                       }
+                               } else {
+                                       D_EMSG("Unknown type recipient");
+                               }
+                       }
+
+               }
+
+               mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+       }
+
+       if (is_dup) {
+               D_MSG("Found dup recipient = [%s(%d)] with [%s(%d)]", recipient, strlen(recipient), recipient_item->recipient, strlen(recipient_item->recipient));
+               return COMPOSER_RETURN_RECIPIENT_DUPLICATE;
+       }
+
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+int msg_ui_composer_recipient_count_get(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(rd == NULL, 0, "recipient data is NULL");
+       D_MSG_RETVM_IF(rd->mbe == NULL, 0, "mbe is NULL");
+
+       int r_count = 0;
+       Elm_Object_Item *mbe_item;
+
+       mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
+       while (mbe_item) {
+               r_count++;
+               mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+       }
+
+       D_MSG("recipient count ---------->[%d]", r_count);
+       D_LEAVE;
+       return r_count;
+}
+
+COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_type_get(const char *recipient)
+{
+       int len = 0;
+       COMPOSER_RECP_ADDR_E ret = COMPOSER_RECP_ADDR_INVALID;
+       COMPOSER_UTIL_ADDRTYPE_E type;
+
+       if (!recipient) {
+               D_PRINT("No Input recipient");
+               return ret;
+       }
+
+       len = strlen(recipient);
+       if (len == 0) {
+               D_PRINT("input recipient length is [%d]", len);
+               return ret;
+       }
+
+       type = get_address_type(recipient);
+       if (type == COMPOSER_UTIL_ADDRTYPE_NUMBER) {
+
+               if (len >= COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MIN
+                        && len <= COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MAX) {
+
+                       ret = COMPOSER_RECP_ADDR_VALID_NUMBER;
+               }
+
+       }
+
+       return ret;
+}
+
+Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient)
+{
+       D_ENTER;
+
+       int len = 0;
+       COMPOSER_UTIL_ADDRTYPE_E type;
+
+       if (!recipient) {
+               D_PRINT("No Input recipient");
+               return EINA_FALSE;
+       }
+
+       type = get_address_type(recipient);
+       len = strlen(recipient);
+
+       if (len == 0) {
+               D_PRINT("input recipient length is [%d]", len);
+               return EINA_FALSE;
+       }
+
+       if (type == COMPOSER_UTIL_ADDRTYPE_NUMBER) {
+               if (len > COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MAX) {
+                       D_PRINT("NUMBER type recipient Too Long [%d]", len);
+                       return EINA_FALSE;
+               }
+
+               if (len < COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MIN) {
+                       D_PRINT("NUMBER type recipient Too Short [%d]", len);
+                       return EINA_FALSE;
+               }
+       } else {
+               D_PRINT("Unknown type recipient[%d]", type);
+               return EINA_FALSE;
+       }
+
+       D_LEAVE;
+       return EINA_TRUE;
+}
+
+void msg_ui_composer_recipient_focus_set(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       if (rd->mbe == NULL) return;
+
+       elm_object_focus_set(rd->mbe, EINA_TRUE);
+       D_LEAVE;
+}
+
+Eina_List *msg_ui_composer_recipient_invalid_recipient_list_get(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       RECIPIENT_ITEM_S *r_item;
+       Elm_Object_Item * mbe_item;
+       Eina_List *invalid_list = NULL;
+
+       if (rd->mode == 1) {
+               if (rd->mbe == NULL)
+                       return NULL;
+
+               mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
+               while (mbe_item) {
+                       r_item = elm_object_item_data_get(mbe_item);
+                       if (!r_item) {
+                               D_EMSG("elm_multibuttonentry data is null");
+                               continue;
+                       }
+
+                       if (msg_ui_composer_recipient_vaild_check(r_item->recipient) == EINA_FALSE) {
+                               invalid_list = eina_list_append(invalid_list, r_item);
+                       }
+
+                       mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+               }
+
+       } else {
+               return NULL;
+       }
+       return invalid_list;
+}
+
+const char *msg_ui_composer_recipient_entry_text_get(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(rd == NULL, NULL, "recipient data is NULL");
+       D_MSG_RETVM_IF(rd->mbe == NULL, NULL, "mbe is NULL");
+
+       Evas_Object *entry = elm_multibuttonentry_entry_get(rd->mbe);
+       if (entry == NULL)
+               return NULL;
+
+       const char *str = elm_entry_entry_get(entry);
+
+       D_MSG("string = %s", str);
+
+       D_LEAVE;
+       return str;
+}
+
+void msg_ui_composer_recipient_entry_text_set(RECIPIENT_S *rd, const char *str)
+{
+       D_ENTER;
+
+       if (rd->mbe == NULL)
+               return;
+
+       Evas_Object *entry = elm_multibuttonentry_entry_get(rd->mbe);
+       elm_entry_entry_set(entry, str);
+
+       D_LEAVE;
+}
+
+RECIPIENT_S *msg_ui_composer_recipient_create(Evas_Object *p, int mode, void *data)
+{
+       D_ENTER;
+       RECIPIENT_S *rd;
+
+       rd = calloc(1, sizeof(RECIPIENT_S));
+       if (rd == NULL)
+               return NULL;
+
+       rd->parent = p;
+       rd->cd = data;
+       rd->mode = mode;
+
+       if (mode == 1)
+               __msg_ui_composer_recipient_layout_create(rd);
+
+       D_LEAVE;
+       return rd;
+}
+
+void msg_ui_composer_recipient_delete(RECIPIENT_S *rd)
+{
+       D_ENTER;
+
+       if (rd == NULL)
+               return;
+
+       if (rd->scroll_down_idler) {
+               ecore_idler_del(rd->scroll_down_idler);
+               rd->scroll_down_idler = NULL;
+       }
+
+       MSGC_EVAS_OBJECT_DEL(rd->mbe);
+       MSGC_EVAS_OBJECT_DEL(rd->ly_to);
+       MSGC_EVAS_OBJECT_DEL(rd->ly_bt);
+       MSGC_EVAS_OBJECT_DEL(rd->bx_main);
+       MSGC_EVAS_OBJECT_DEL(rd->popup_change_number);
+       g_free(rd);
+
+       D_LEAVE;
+}
+
+void msg_ui_composer_recipient_clear(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+       D_MSG_RETM_IF(rd->mbe == NULL, "Multibuttonentry is NULL");
+
+       RECIPIENT_ITEM_S *r_item;
+       Elm_Object_Item * mbe_item;
+
+       mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
+       while (mbe_item) {
+               r_item = elm_object_item_data_get(mbe_item);
+               if (r_item) {
+                       g_free(r_item);
+                       elm_object_item_data_set(mbe_item, NULL);
+               }
+
+               mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+       }
+
+       elm_multibuttonentry_clear(rd->mbe);
+
+       MSGC_EVAS_OBJECT_DEL(rd->popup_change_number);
+       D_LEAVE;
+}
+
+void msg_ui_composer_recipient_update(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+       D_MSG_RETM_IF(rd->mbe == NULL, "Multibuttonentry is NULL");
+
+       RECIPIENT_ITEM_S *r_item;
+       Elm_Object_Item * mbe_item;
+
+       mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
+       while (mbe_item) {
+               r_item = elm_object_item_data_get(mbe_item);
+               if (!r_item) {
+                       D_EMSG("elm_multibuttonentry data is null");
+                       mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+                       continue;
+               }
+
+               /*Check changed contact && change display name && recipient*/
+               if (strlen(r_item->recipient) > 0) {
+
+                       bzero(r_item->display_name, sizeof(r_item->display_name));
+                       r_item->index = get_contact_index_by_recipient(r_item->recipient);
+                       if (r_item->index > 0) {
+                               if (get_contact_display_name_by_index(r_item->index, r_item->display_name, sizeof(r_item->display_name)-1) != COMPOSER_RETURN_SUCCESS) {
+                                       strncpy(r_item->display_name, r_item->recipient, sizeof(r_item->display_name)-1);
+                               }
+                       } else {
+                               strncpy(r_item->display_name, r_item->recipient, sizeof(r_item->display_name)-1);
+                       }
+                       elm_object_item_text_set(mbe_item, r_item->display_name);
+
+               } else if (strlen(r_item->display_name) > 0) {
+
+                       bzero(r_item->recipient, sizeof(r_item->recipient));
+                       r_item->index = get_contact_index_by_name(r_item->display_name);
+                       if (r_item->index > 0) {
+                               char tmp_display_name1[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1] = {0,};
+                               char tmp_display_name2[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1] = {0,};
+
+                               get_contact_display_name_by_index(r_item->index, tmp_display_name1, sizeof(tmp_display_name1)-1);
+                               D_MSG("display_name = %s, get contact displayname = %s", r_item->display_name, tmp_display_name1);
+                               remove_space(r_item->display_name, tmp_display_name2, sizeof(tmp_display_name2)-1);
+                               remove_space(tmp_display_name1, tmp_display_name1, sizeof(tmp_display_name1)-1);
+                               if (g_ascii_strncasecmp(tmp_display_name1, tmp_display_name2, strlen(tmp_display_name1)) == 0) {
+                                       get_contact_default_recipient_by_index(r_item->index, r_item->recipient ,sizeof(r_item->recipient)-1);
+                                       r_item->type = msg_ui_composer_recipient_type_get(r_item->recipient);
+                               } else {
+                                       r_item->type = COMPOSER_RECP_ADDR_INVALID;
+                                       r_item->index = 0;
+                               }
+                       } else {
+                               D_EMSG("No contact id of %s", r_item->display_name);
+                       }
+               }
+
+               D_MSG("type [%d]", r_item->type);
+               D_MSG("index [%d]", r_item->index);
+               D_MSG("recipient [%s]", r_item->recipient);
+               D_MSG("display_name [%s]", r_item->display_name);
+
+               mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+       }
+       D_LEAVE;
+}
+
+/*This function used by predict search, result cb of contact&log and bundle val*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_append(RECIPIENT_S *rd, const char *recipient, int index)
+{
+       D_ENTER;
+       D_MSG_RETVM_IF(rd == NULL, COMPOSER_RETURN_FAIL, "recipient data is NULL");
+       D_MSG_RETVM_IF(rd->mbe == NULL, COMPOSER_RETURN_FAIL, "mbe is NULL");
+       D_MSG_RETVM_IF(recipient == NULL, COMPOSER_RETURN_FAIL, "recipient is NULL");
+       D_MSG("Recipient Append Parameter [recipient = %s, index = %d]", recipient, index);
+
+       RECIPIENT_ITEM_S *recipient_item;
+       COMPOSER_RECP_ADDR_E type;
+       int tmp_index;
+       char tmp_recipient[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1] = {0,};
+       char tmp_displayname[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1] = {0,};
+
+       /*Get recipient*/
+       strncpy(tmp_recipient, recipient, sizeof(tmp_recipient)-1);
+
+       /*get type*/
+       type = msg_ui_composer_recipient_type_get(tmp_recipient);
+
+       /*Get index*/
+       if (index > 0) {
+               tmp_index = index;
+       } else {
+               tmp_index = get_contact_index_by_recipient(tmp_recipient);
+       }
+
+       /*get display name*/
+       if (tmp_index > 0) {
+               if (get_contact_display_name_by_index(tmp_index, tmp_displayname, sizeof(tmp_displayname)) != COMPOSER_RETURN_SUCCESS) {
+                       strncpy(tmp_displayname, tmp_recipient, sizeof(tmp_displayname)-1);
+               }
+       } else {
+               strncpy(tmp_displayname, tmp_recipient, sizeof(tmp_displayname)-1);
+       }
+
+       /*make recipient item*/
+       recipient_item = __msg_ui_composer_recipient_item_make(type, tmp_index, tmp_displayname, tmp_recipient, NULL);
+       if (recipient_item == NULL) {
+               D_MSG("Fail of msg_ui_composer_recipient_item_make");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       /*append recipient item to mbe*/
+       if (elm_multibuttonentry_item_append(rd->mbe, recipient_item->display_name, NULL, recipient_item) == NULL) {
+               D_EMSG("error elm_multibuttonentry_item_add!!");
+               return COMPOSER_RETURN_FAIL;
+       }
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+void msg_ui_composer_bt_show(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+       D_MSG_RETM_IF(rd->ly_bt == NULL, "laytout button is NULL");
+
+       if(evas_object_visible_get(rd->ly_bt) == false) {
+               elm_box_pack_end(rd->bx_main, rd->ly_bt);
+               evas_object_show(rd->ly_bt);
+       } else {
+               D_MSG("layout button is Already shown");
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_composer_bt_hide(RECIPIENT_S *rd)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+       D_MSG_RETM_IF(rd->ly_bt == NULL, "laytout button is NULL");
+
+       if(evas_object_visible_get(rd->ly_bt) == true) {
+               elm_box_unpack(rd->bx_main, rd->ly_bt);
+               evas_object_hide(rd->ly_bt);
+       } else {
+               D_MSG("layout button is Already hidden");
+       }
+
+       D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_read_data(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+       D_ENTER;
+       RECIPIENT_S *r;
+       RECIPIENT_ITEM_S *r_item;
+       Elm_Object_Item *mbe_item;
+       int r_count = 0;
+       if (!cd) return COMPOSER_RETURN_FAIL;
+
+       if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+               if (msg_ui_composer_add_address(cd->recipient_frame.recipient) == COMPOSER_RETURN_SUCCESS)
+                       r_count++;
+       } else {
+               r = cd->recipient;
+               if (!r)
+                       return COMPOSER_RETURN_FAIL;
+
+               mbe_item = elm_multibuttonentry_first_item_get(r->mbe);
+               while (mbe_item) {
+                       r_item = elm_object_item_data_get(mbe_item);
+                       if (r_item) {
+                               D_MSG("[%s]", r_item->recipient);
+                               if (msg_ui_composer_add_address(r_item->recipient) == COMPOSER_RETURN_SUCCESS)
+                                       r_count++;
+                       }
+                       mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+               }
+       }
+
+       if (r_count == 0 )
+               return COMPOSER_RETURN_FAIL;
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
+
+/*set recipient number for frameview mode*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient(MSG_COMPOSER_VIEW_DATA_S *cd, const char * recipient)
+{
+       D_ENTER;
+       RECIPIENT_ITEM_S *recipient_item;
+
+       if (!cd) return COMPOSER_RETURN_FAIL;
+
+
+       recipient_item  = &cd->recipient_frame;
+
+       bzero(recipient_item->recipient, sizeof(recipient_item->recipient));
+       snprintf(recipient_item->recipient, sizeof(recipient_item->recipient)-1, "%s", recipient);
+
+       D_MSG("recipient_item->recipient = %s", recipient_item->recipient);
+
+
+       D_LEAVE;
+       return COMPOSER_RETURN_SUCCESS;
+}
diff --git a/composer/src/util/msg-ui-composer-util.c b/composer/src/util/msg-ui-composer-util.c
new file mode 100755 (executable)
index 0000000..38e9142
--- /dev/null
@@ -0,0 +1,574 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 <contacts-svc.h>
+#include <MsgSettingTypes.h>
+
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-common.h"
+
+#define EMAIL_ADDR_LEN_MAX 256
+#define ADDR_LEN_MIN 1
+
+#define MSG_CREATION_MODE_SMALL_IMG_WIDTH      160
+#define MSG_CREATION_MODE_SMALL_IMG_HEIGHT     120
+#define MSG_CREATION_MODE_LARGE_IMG_WIDTH      640
+#define MSG_CREATION_MODE_LARGE_IMG_HEIGHT     480
+
+COMPOSER_UTIL_ADDRTYPE_E get_address_type(const char *address)
+{
+
+       COMPOSER_UTIL_ADDRTYPE_E addrtype = COMPOSER_UTIL_ADDRTYPE_INVALID;
+
+       if (!address) {
+               D_EMSG("No input address");
+               return addrtype;
+       }
+
+       if (IsValidNumber(address) == EINA_TRUE) {
+               addrtype = COMPOSER_UTIL_ADDRTYPE_NUMBER;
+               D_MSG("It is number type![%s]", address);
+       } else if (IsVaildEmailAddress(address) == EINA_TRUE) {
+               addrtype = COMPOSER_UTIL_ADDRTYPE_EMAIL;
+               D_MSG("It is email type![%s]", address);
+       } else {
+               D_MSG("It is not email or number type![%s]", address);
+       }
+
+       return addrtype;
+}
+
+
+int get_contact_index_by_recipient(const char *phone_number)
+{
+       int index;
+
+       index = contacts_svc_find_contact_by(CTS_FIND_BY_NUMBER, phone_number);
+       if (index > 0)
+               return index;
+
+       index = contacts_svc_find_contact_by(CTS_FIND_BY_EMAIL, phone_number);
+       return index;
+}
+
+int get_contact_index_by_name(const char *phone_number)
+{
+       return contacts_svc_find_contact_by(CTS_FIND_BY_NAME, phone_number);
+}
+
+int get_contact_display_name_by_index(int index, char *dest, int dest_size)
+{
+       int error_code = CTS_SUCCESS;
+       int ret = COMPOSER_RETURN_SUCCESS;
+       CTSstruct *contact = NULL;
+       CTSvalue *name = NULL;
+       const char *first, *last;
+       char *display = NULL;
+
+       error_code = contacts_svc_get_contact(index, &contact);
+       error_code = contacts_svc_struct_get_value(contact, CTS_CF_NAME_VALUE, &name);
+       display = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_DISPLAY_STR));
+       if (!display) {
+               D_EMSG("no display recipient");
+               first = contacts_svc_value_get_str(name, CTS_NAME_VAL_FIRST_STR);
+               last = contacts_svc_value_get_str(name, CTS_NAME_VAL_LAST_STR);
+               display = make_display_name(first, last);
+               if (!display) {
+                       D_EMSG("display name is NULL");
+                       return COMPOSER_RETURN_FAIL;
+               }
+       }
+
+       if (display) {
+               if(strlen(display)) {
+                       strncpy(dest, display, dest_size);
+               }
+               g_free(display);
+       } else {
+               ret = COMPOSER_RETURN_FAIL;
+       }
+       contacts_svc_value_free(name);
+       contacts_svc_struct_free(contact);
+       return ret;
+}
+
+int get_contact_default_number_by_index(int index, char *dest, int dest_size)
+{
+       int ret = COMPOSER_RETURN_SUCCESS;
+       int ct_ret;
+       CTSvalue *number = NULL;
+       char *default_num = NULL;
+
+       ct_ret = contacts_svc_get_contact_value(CTS_GET_DEFAULT_NUMBER_VALUE, index, &number);
+
+       if (CTS_SUCCESS == ct_ret) {
+
+               default_num = g_strdup(contacts_svc_value_get_str(number, CTS_NUM_VAL_NUMBER_STR));
+               contacts_svc_value_free(number);
+
+               if (default_num) {
+                       strncpy(dest, default_num, dest_size);
+                       g_free(default_num);
+               } else {
+                       ret = COMPOSER_RETURN_FAIL;
+               }
+       } else {
+               ret = COMPOSER_RETURN_FAIL;
+       }
+       return ret;
+}
+
+int get_contact_default_email_by_index(int index, char *dest, int dest_size)
+{
+       int ret = COMPOSER_RETURN_SUCCESS;
+       int ct_ret;
+       CTSvalue *number = NULL;
+       char *default_num = NULL;
+
+       ct_ret = contacts_svc_get_contact_value(CTS_GET_DEFAULT_EMAIL_VALUE, index, &number);
+
+       if (CTS_SUCCESS == ct_ret) {
+               default_num = g_strdup(contacts_svc_value_get_str(number, CTS_EMAIL_VAL_ADDR_STR));
+               contacts_svc_value_free(number);
+
+               if (default_num) {
+                       strncpy(dest, default_num, dest_size);
+                       g_free(default_num);
+               } else {
+                       ret = COMPOSER_RETURN_FAIL;
+               }
+       } else
+               ret = COMPOSER_RETURN_FAIL;
+
+       return ret;
+}
+
+int get_contact_default_recipient_by_index(int index, char *dest, int dest_size)
+{
+       int ret;
+       ret = get_contact_default_number_by_index(index, dest, dest_size);
+       if (ret) {
+               ret = get_contact_default_email_by_index(index, dest, dest_size);
+               if (ret) {
+                       D_MSG("fail of get default recipient");
+               } else {
+                       D_MSG("get default email %s", dest);
+               }
+       } else {
+               D_MSG("get default number %s", dest);
+       }
+       return ret;
+}
+char *make_display_name(const char *first, const char *last)
+{
+       char *ret_val = NULL;
+
+       if (first != NULL && last != NULL) {
+               if (CTS_ORDER_NAME_FIRSTLAST == contacts_svc_get_order(CTS_ORDER_OF_DISPLAY)) {
+                       ret_val = g_strconcat(first, " ", last, NULL);
+               } else {
+                       ret_val = g_strconcat(last, " ", first, NULL);
+               }
+       } else if (first != NULL || last != NULL) {
+               ret_val = (first != NULL) ? g_strdup(first) : g_strdup(last);
+       }
+
+       if (!ret_val) {
+               D_MSG("No Display name");
+       }
+       return ret_val;
+}
+
+static bool __make_namecard(CTSstruct *contact, char *file_path)
+{
+
+       int error_code = CTS_ERR_FAIL;
+       char *vcard = NULL;
+       FILE *vcard_file = NULL;
+
+       error_code = contacts_svc_get_vcard_from_contact(contact, &vcard);
+       if (error_code == CTS_SUCCESS) {
+               vcard_file = fopen(file_path, "wt");
+               if (vcard_file == NULL) {
+                       g_free(vcard);
+                       return false;
+               }
+
+               fprintf(vcard_file, "%s", vcard);
+               fclose(vcard_file);
+               g_free(vcard);
+               return true;
+       } else {
+               D_EMSG("contacts_svc_get_vcard_from_contact Fail %d", error_code);
+       }
+       return false;
+}
+
+bool msg_composer_get_vcf_file_by_index(int index, char *strpath, int sizepath)
+{
+       D_ENTER;
+       int error_code = CTS_SUCCESS;
+       char filename[COMPOSER_FILEPATH_LEN_MAX + 1] = { 0, };
+       bool ret = true;
+       CTSstruct *contact = NULL;
+
+       error_code = contacts_svc_get_contact(index, &contact);
+       if (error_code == CTS_SUCCESS) {
+               snprintf(filename, sizeof(filename), "%s/vcard_%d.vcf", MSGC_UI_DAT_PATH, index);
+               D_MSG("make vcard path [%s]", filename);
+
+               if (__make_namecard(contact, filename) == false) {
+                       D_MSG("Fail of make namecard");
+                       ret = false;
+               }
+
+               strncpy(strpath, filename, sizepath);
+       } else {
+               D_EMSG("contacts_svc_get_contact Fail %d", error_code);
+               ret = false;
+       }
+
+       contacts_svc_struct_free(contact);
+       D_LEAVE;
+       return ret;
+}
+
+Eina_Bool IsMultipleNumber(int index)
+{
+       D_ENTER;
+       int error_code = CTS_SUCCESS;
+       int count = 0;
+       CTSstruct *contact = NULL;
+
+       GSList *get_list = NULL;
+       GSList *iter = NULL;
+
+       error_code = contacts_svc_get_contact(index, &contact);
+       if (error_code) {
+               D_MSG("error_code %d", error_code);
+               return EINA_FALSE;
+       }
+       contacts_svc_struct_get_list(contact, CTS_CF_NUMBER_LIST, &get_list);
+       iter = get_list;
+
+       while (NULL != iter) {
+               int phone_type = contacts_svc_value_get_int(iter->data, CTS_NUM_VAL_TYPE_INT);
+
+               if (phone_type != CTS_NUM_TYPE_ASSISTANT) {
+                       const char *content = contacts_svc_value_get_str(iter->data, CTS_NUM_VAL_NUMBER_STR);
+
+                       D_MSG("[%d][%d]%s", index, phone_type, content);
+
+                       count++;
+               }
+
+               iter = g_slist_next(iter);
+       }
+
+       get_list = NULL;
+       contacts_svc_struct_get_list(contact, CTS_CF_EMAIL_LIST, &get_list);
+       iter = get_list;
+
+       while (NULL != iter) {
+               int email_type = contacts_svc_value_get_int(iter->data, CTS_EMAIL_VAL_TYPE_INT);
+
+               const char *content = contacts_svc_value_get_str(iter->data, CTS_EMAIL_VAL_ADDR_STR);
+
+               D_MSG("[%d][%d]%s", index, email_type, content);
+               count++;
+
+               iter = g_slist_next(iter);
+       }
+
+       D_LEAVE;
+       if (count > 1)
+               return EINA_TRUE;
+
+       return EINA_FALSE;
+}
+Eina_Bool IsValidNumber(const char *address)
+{
+       D_ENTER;
+
+       if (!address)
+               return EINA_FALSE;
+
+       int addrlen = strlen(address);
+
+       if (addrlen < ADDR_LEN_MIN) {
+               D_EMSG("Too short address");
+               return EINA_FALSE;
+       }
+
+       const char *oneChar = address;
+
+       if (*oneChar == '+')
+               ++oneChar;
+
+       if (!(*oneChar)) {
+               return EINA_FALSE;
+       }
+
+       while (*oneChar) {
+               if (!isdigit(*oneChar) && (*oneChar != '*') && (*oneChar != '#') && (*oneChar != '-'))
+                       return EINA_FALSE;
+
+               ++oneChar;
+       }
+
+       D_LEAVE;
+       return EINA_TRUE;
+}
+
+Eina_Bool IsVaildEmailAddress(const char *address)
+{
+       D_ENTER;
+
+       char *oneChar;
+       Eina_Bool isPrefixCorrect = EINA_FALSE;
+       Eina_Bool isSurfixCorrect = EINA_FALSE;
+       Eina_Bool isExistAt = EINA_FALSE;
+
+       int addrlen;
+
+       if (address == NULL) {
+               D_EMSG("Input address is NULL");
+               return EINA_FALSE;
+       }
+
+       oneChar = (char *)address;
+       addrlen = strlen(address);
+
+       if (addrlen == 0 || addrlen > EMAIL_ADDR_LEN_MAX)
+               return EINA_FALSE;
+
+       for (; *oneChar != '\0'; ++oneChar) {
+               if (isExistAt == EINA_FALSE) {
+                       if (isalnum(*oneChar) || *oneChar == '.' || *oneChar == '_' || *oneChar == '-') {
+                               isPrefixCorrect = EINA_TRUE;
+                               continue;
+                       } else if (*oneChar == '@') {
+                               if (isPrefixCorrect == EINA_FALSE)
+                                       return EINA_FALSE;
+                               else
+                                       isExistAt = EINA_TRUE;
+                       } else {
+                               return EINA_FALSE;
+                       }
+               } else {
+                       if (isalnum(*oneChar) || *oneChar == '.' || *oneChar == '_' || *oneChar == '-') {
+                               isSurfixCorrect = EINA_TRUE;
+                               continue;
+                       } else {
+                               return EINA_FALSE;
+                       }
+               }
+       }
+
+       D_LEAVE;
+       return (isPrefixCorrect && isSurfixCorrect && isExistAt);
+}
+
+Eina_List *make_tokenize_list(const char *ori_string, const char *sep)
+{
+       D_ENTER;
+
+       Eina_List *e_list = NULL;
+       char *p = NULL;
+       char *copy_string;
+       char *save_p;
+
+       if (!ori_string) {
+               D_EMSG("Input string is NULL");
+               return NULL;
+       }
+
+       copy_string = MSG_STRDUP(ori_string);
+
+       if (copy_string) {
+               p = strtok_r(copy_string, sep, &save_p);
+
+               if (p)
+                       D_MSG("list item = %s", p);
+
+               while (p) {
+                       char *c = MSG_STRDUP(p);
+
+                       e_list = eina_list_append(e_list, c);
+
+                       p = strtok_r(NULL, sep, &save_p);
+
+                       if (p)
+                               D_MSG("list item = %s", p);
+               }
+
+               g_free(copy_string);
+       }
+
+       D_LEAVE;
+       return e_list;
+}
+
+void convert_ps_to_br(char *input)
+{
+       const char *char_ps = "<ps>";
+       char *ptr = NULL;
+
+       if (!input)
+               return;
+       while ((ptr = strstr(input, char_ps))) {
+               ptr[1] = 'b';
+               ptr[2] = 'r';
+       }
+
+       return;
+}
+
+int remove_space(const char *src, char *dest, int dest_size)
+{
+   int s_pos=0, d_pos=0, src_size;
+
+   if(NULL == src) {
+      D_MSG("The parameter(src) is NULL");
+      dest[d_pos] = '\0';
+      return d_pos;
+   }
+   src_size = strlen(src);
+
+   while(src[s_pos] != 0)
+   {
+        if(src[s_pos] == ' ') {
+            s_pos++;
+            continue;
+         }
+
+                memcpy(dest+d_pos, src+s_pos, 1);
+         d_pos++;
+         s_pos++;
+
+                if(d_pos >= dest_size - 1) break;
+   }
+
+   dest[d_pos] = '\0';
+   return d_pos;
+}
+
+const char *search_markup_keyword(const char *string, char *searchword,
+                                bool *result)
+{
+       char pstr[DEF_BUF_LEN + 1] = {0,};
+       static char return_string[DEF_BUF_LEN + 1] = { 0, };
+       int word_len = 0;
+       int search_len = 0;
+       int i = 0;
+       bool found = false;
+       gchar* markup_text_start;
+       gchar* markup_text_end;
+
+       if (!searchword) return string;
+
+       if(g_utf8_validate(string,-1,NULL)) {
+
+               strncpy(pstr, string, DEF_BUF_LEN);
+
+               word_len = strlen(pstr);
+               search_len = strlen(searchword);
+
+               for (i = 0; i < word_len; i++) {
+                       if (!strncasecmp(searchword, &pstr[i], search_len)) {
+                               found = true;
+                               break;
+                       }
+               }
+
+               *result = found;
+               memset(return_string, 0x00, DEF_BUF_LEN);
+
+               if (found) {
+                       if (i == 0) {
+                               markup_text_end = g_markup_escape_text(&pstr[search_len], word_len-search_len);
+                               snprintf(return_string,
+                                                       DEF_BUF_LEN,
+                                                       "<match>%s</match>%s",
+                                                       searchword,
+                                                       (char*)markup_text_end);
+                               g_free(markup_text_end);
+                       } else {
+                               markup_text_start = g_markup_escape_text(&pstr[0], i);
+                               markup_text_end =  g_markup_escape_text(&pstr[i+search_len], word_len-(i+search_len));
+                               snprintf(return_string,
+                                                       DEF_BUF_LEN,
+                                                       "%s<match>%s</match>%s",
+                                                       (char*)markup_text_start,
+                                                       searchword,
+                                                       (char*)markup_text_end);
+                               g_free(markup_text_start);
+                               g_free(markup_text_end);
+                       }
+               } else {
+                       snprintf(return_string, DEF_BUF_LEN, "%s", pstr);
+               }
+       }
+
+       return return_string;
+}
+
+bool is_web_uri(const char* uri)
+{
+       D_MSG_RETVM_IF(uri == NULL, false, "uri is NULL");
+
+       static const char* web_protocal_name[] =
+       {
+               "http://",
+               "https://",
+               "ftp://",
+               NULL,
+       };
+
+       int i = 0;
+       while (web_protocal_name[i] != NULL) {
+               if (strncmp(uri, web_protocal_name[i], strlen(web_protocal_name[i])) == 0) {
+                       D_MSG("uri %s is web uri", uri);
+                       return true;
+               }
+
+               i++;
+       }
+
+       D_MSG("Not web uri. %s", uri);
+       return false;
+}
+void print_sc_geo(Evas_Object * obj, char * name)
+{
+       Evas_Coord x,y,w,h;
+
+       if (!obj) return;
+               elm_scroller_region_get(obj,&x, &y, &w,&h);
+       D_PRINT("[SCGEO] %s x = %d, y = %d, w =%d, h = %d", name, x, y, w, h);
+
+}
+
+void print_geo(Evas_Object * obj, char * name)
+{
+       Evas_Coord x,y,w,h;
+
+       if (!obj) return;
+       evas_object_geometry_get(obj,&x, &y, &w,&h);
+       D_PRINT("[GEO] %s x = %d, y = %d, w =%d, h = %d", name, x, y, w, h);
+
+}
diff --git a/composer/src/util/msg-ui-composer-util.h b/composer/src/util/msg-ui-composer-util.h
new file mode 100755 (executable)
index 0000000..a4d04fb
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __MSG_COMPOSER_UTIL_H__
+#define __MSG_COMPOSER_UTIL_H__
+#include "msg-ui-composer-data.h"
+#include <glib-object.h>
+#include <glib.h>
+#include <ui-gadget-module.h>
+#include "msg-ui-util.h"
+#include <Elementary.h>
+
+#define MSG_STRDUP(src) (NULL != src) ? strdup(src) : NULL
+
+#define MSGC_EVAS_OBJECT_DEL(src) do {\
+       if (src) {\
+               evas_object_del(src);\
+               src = NULL;\
+       }\
+} while(0)
+
+
+typedef enum {
+       COMPOSER_UTIL_ADDRTYPE_INVALID,
+       COMPOSER_UTIL_ADDRTYPE_NUMBER,
+       COMPOSER_UTIL_ADDRTYPE_EMAIL,
+       COMPOSER_UTIL_ADDRTYPE_MAX,
+} COMPOSER_UTIL_ADDRTYPE_E;
+
+typedef enum {
+       COMPOSER_UTIL_ERR_NONE  = 0,
+       COMPOSER_UTIL_ERR               = -1,
+} COMPOSER_UTIL_ERR_E;
+
+COMPOSER_UTIL_ADDRTYPE_E get_address_type(const char *address);
+
+Eina_Bool IsValidNumber(const char *address);
+Eina_Bool IsVaildEmailAddress(const char *address);
+
+int get_contact_index_by_recipient(const char *phone_number);
+
+int get_contact_index_by_name(const char *phone_number);
+int get_contact_display_name_by_index(int index, char *dest, int dest_size);
+int get_contact_default_recipient_by_index(int index, char *dest, int dest_size);
+
+bool msg_composer_get_vcf_file_by_index(int index, char *strpath, int sizepath);
+
+Eina_Bool IsMultipleNumber(int index);
+
+int get_contact_default_number_by_index(int index, char *dest, int dest_size);
+int get_contact_default_email_by_index(int index, char *dest, int dest_size);
+
+void convert_ps_to_br(char *input);
+Eina_List *make_tokenize_list(const char *ori_string, const char *sep);
+int remove_space(const char *src, char *dest, int dest_size);
+
+char *make_display_name(const char *first, const char *last);
+
+const char *search_markup_keyword(const char *string, char *searchword, bool *result);
+bool is_web_uri(const char* uri);
+
+void print_geo(Evas_Object * obj, char * name);
+void print_sc_geo(Evas_Object * obj, char * name);
+
+#endif /*__MSG_COMPOSER_UTIL_H__*/
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..34115a9
--- /dev/null
@@ -0,0 +1,7 @@
+message (0.8.2-20) unstable; urgency=low
+
+  * Git: slp/pkgs/m/message-app
+  * Tag: message_0.8.2-20
+
+ -- Jaeyun Jeong <jyjeong@samsung.com>  Mon, 16 Apr 2012 19:26:38 +0900
+
diff --git a/debian/compat b/debian/compat
new file mode 100755 (executable)
index 0000000..7ed6ff8
--- /dev/null
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755 (executable)
index 0000000..87d24d0
--- /dev/null
@@ -0,0 +1,21 @@
+Source: message
+Section: devel
+Priority: optional
+Maintainer: Jaeyun Jeong <jyjeong@samsung.com>, Sangkoo Kim <sangkoo.kim@samsung.com>, Seunghwan Lee <sh.cat.lee@samsung.com>, SoonMin Jung <sm0415.jung@samsung.com>, Jae-Young Lee <jy4710.lee@samsung.com>
+Build-Depends: debhelper (>= 5), libglib2.0-dev, libelm-dev, libecore-dev, libeina-dev, libappcore-common-dev, libappcore-efl-dev,  libslp-msg-service-dev, libslp-setting-dev, libslp-utilx-dev, dlog-dev, libui-gadget-dev, libcontacts-service-dev, libug-contacts-dev, libicu-dev, libappsvc-dev, libdevman-haptic-dev, libheynoti-dev, capi-appfw-application-dev
+Standards-Version: 3.7.2
+Homepage:
+
+Package: org.tizen.message
+Section: devel
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: message application
+Version: 0.1.0
+
+Package: org.tizen.message-dbg
+Section: debug
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: message application (unstripped)
+Version: 0.1.0
diff --git a/debian/dirs b/debian/dirs
new file mode 100755 (executable)
index 0000000..ca882bb
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin
+usr/sbin
diff --git a/debian/docs b/debian/docs
new file mode 100755 (executable)
index 0000000..7a77580
--- /dev/null
@@ -0,0 +1,2 @@
+CMakeCache.txt
+CMakeLists.txt
diff --git a/debian/org.tizen.message.install.in b/debian/org.tizen.message.install.in
new file mode 100755 (executable)
index 0000000..d939590
--- /dev/null
@@ -0,0 +1,9 @@
+@PREFIX@/bin/*
+@PREFIX@/res/locale/*
+@PREFIX@/res/icons/*
+@PREFIX@/res/images/*
+@PREFIX@/res/edje/*
+@PREFIX@/data
+@PREFIX@/lib/*
+/opt/share/applications/*
+/opt/ug/lib/*
diff --git a/debian/org.tizen.message.postinst.in b/debian/org.tizen.message.postinst.in
new file mode 100755 (executable)
index 0000000..2b96d78
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+#if [ ${USER} = "root" ]
+if [ "`id -u`" = "0" ]
+then
+       #5000 is inhouse user id
+       chown -R 5000:5000 @DATADIR@
+fi
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..686d100
--- /dev/null
@@ -0,0 +1,125 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+CFLAGS += -Wall -g
+LDFLAGS ?= 
+PREFIX ?= /opt/apps/org.tizen.message
+RESDIR ?= /opt/apps/org.tizen.message/res
+DATADIR ?= /opt/apps/org.tizen.message/data
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+       CFLAGS += -O0
+else
+       CFLAGS += -O2
+endif
+
+LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed
+
+configure: configure-stamp
+configure-stamp:
+       dh_testdir
+       # Add here commands to configure the package.
+       CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake . -DCMAKE_INSTALL_PREFIX=${PREFIX}
+
+       touch configure-stamp
+
+build: build-stamp
+
+build-stamp: configure-stamp 
+       dh_testdir
+
+       # Add here commands to compile the package.
+       $(MAKE)
+             
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               cat $$f > $${f%.in}; \
+               sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
+               sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \
+               sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
+       done
+
+       touch $@
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp configure-stamp
+
+       # Add here commands to clean up after the build process.
+       -$(MAKE) clean
+       rm -f CMakeCache.txt
+       rm -rf CMakeFiles main/CMakeFiles composer/CMakeFiles setting/CMakeFiles dialog/CMakeFiles common/CMakeFiles
+       rm -f cmake_install.cmake main/cmake_install.cmake composer/cmake_install.cmake setting/cmake_install.cmake dialog/cmake_install.cmake common/cmake_install.cmake
+       rm -f Makefile main/Makefile composer/Makefile setting/Makefile dialog/Makefile common/Makefile
+       rm -f install_manifest.txt main/install_manifest.txt composer/install_manifest.txt setting/install_manifest.txt dialog/install_manifest.txt common/install_manifest.txt
+       rm -f main/po/CMakeCache.txt
+       rm -rf main/po/CMakeFiles
+       rm -f main/po/cmake_install.cmake
+       rm -f main/po/Makefile
+#      rm -f po/install_manifest.txt
+
+       rm -f *.so composer/*.so setting/*.so common/*.so
+       rm -f *.edj thread/theme/*.edj composer/data/composer_edc/*.edj bubble/theme/*.edj setting/theme/*.edj 
+       rm -f main/*.desktop
+
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               rm -f $${f%.in}; \
+       done
+
+       dh_clean 
+
+install: build
+       dh_testdir
+       dh_testroot
+       dh_clean -k 
+       dh_installdirs
+
+       # Add here commands to install the package into debian/wavplayer.
+       $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+       dh_testdir
+       dh_testroot
+       dh_installchangelogs 
+       dh_installdocs
+       dh_installexamples
+       dh_install --sourcedir=debian/tmp
+#      dh_installmenu
+#      dh_installdebconf       
+#      dh_installlogrotate
+#      dh_installemacsen
+#      dh_installpam
+#      dh_installmime
+#      dh_python
+#      dh_installinit
+#      dh_installcron
+#      dh_installinfo
+       dh_installman
+       dh_link
+       dh_strip --dbg-package=org.tizen.message-dbg    
+       dh_compress
+       dh_fixperms
+#      dh_perl
+       dh_makeshlibs
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/dialog/CMakeLists.txt b/dialog/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..729e326
--- /dev/null
@@ -0,0 +1,44 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(message C)
+
+SET(MESSAGE_DIALOG message-dialog)
+SET(SRCS ./message-dialog.c)
+SET(CMAKE_SKIP_BUILD_RPATH TRUE)
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+       SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_COMMON_DIR}
+                               ${CMAKE_SOURCE_DIALOG_DIR}
+                               /usr/include/msg-service/
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fpie")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+
+FIND_PROGRAM(UNAME NAMES uname)
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
+IF("${ARCH}" STREQUAL "arm")
+       ADD_DEFINITIONS("-DTARGET")
+       MESSAGE("add -DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+ADD_DEFINITIONS("-DDEBUG")
+ADD_DEFINITIONS("-DDEBUG_ON")
+ADD_DEFINITIONS("-DLCD_TYPE_WVGA")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+
+ADD_EXECUTABLE(${MESSAGE_DIALOG} ${SRCS})
+TARGET_LINK_LIBRARIES(${MESSAGE_DIALOG} ${pkgs_LDFLAGS})
+
+INSTALL(TARGETS ${MESSAGE_DIALOG} DESTINATION bin)
+
+# i18n
+#ADD_SUBDIRECTORY(po)
diff --git a/dialog/message-dialog.c b/dialog/message-dialog.c
new file mode 100755 (executable)
index 0000000..b126417
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "message-dialog.h"
+#include "app_service.h"
+
+
+static void __msg_ui_dialog_always_ask_left_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_dialog_always_ask_right_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static int __msg_ui_dialog_create_always_ask_popup(void *data);
+static void __msg_ui_dialog_win_del(void *data, Evas_Object *obj, void *event);
+static Evas_Object *__msg_ui_dialog_create_win(const char *name);
+static int parse_opt(int argc, char **argv, struct appdata *ad);
+
+
+void msg_ui_dialog_exit(void *data)
+{
+       struct appdata *ad = data;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+       if (ad->msg) {
+               g_free(ad->msg);
+               ad->msg = NULL;
+       }
+
+       if (ad->url) {
+               g_free(ad->url);
+               ad->url = NULL;
+       }
+
+       if (ad->popup != NULL) {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+
+       if (ad->main_window != NULL) {
+               evas_object_del(ad->main_window);
+               ad->main_window = NULL;
+       }
+
+       elm_exit();
+}
+
+static void __msg_ui_dialog_always_ask_left_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       struct appdata *ad = data;
+
+       service_h svc_h;
+       int ret = SERVICE_ERROR_NONE;
+
+       ret = service_create(&svc_h);
+       if (ret != SERVICE_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed : %d", ret);
+               return;
+       }
+
+       ret = service_set_operation(svc_h, SERVICE_OPERATION_VIEW);
+       if (ret != SERVICE_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_set_operation() is failed : %d", ret);
+               goto DESTROY;
+       }
+
+       ret = service_set_uri(svc_h, ad->url);
+       if (ret != SERVICE_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_set_uri() is failed : %d", ret);
+               goto DESTROY;
+       }
+
+       if (service_set_package(svc_h, "org.tizen.browser") < 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_set_uri() is failed : %d", ret);
+               goto DESTROY;
+       }
+
+       ret = service_send_launch_request(svc_h, NULL, NULL);
+       if (ret != SERVICE_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request() is failed : %d", ret);
+       }
+
+DESTROY:
+       ret = service_destroy(svc_h);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_destroy() returns : %d", ret);
+
+       msg_ui_dialog_exit(ad);
+}
+
+static void __msg_ui_dialog_always_ask_right_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       struct appdata *ad = data;
+
+       msg_ui_dialog_exit(ad);
+}
+
+static int __msg_ui_dialog_create_always_ask_popup(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       struct appdata *ad = data;
+       char display_msg[100] = { 0, };
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+
+       snprintf(display_msg, sizeof(display_msg), "%s\n%s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"), ad->url);
+
+       ad->popup = elm_popup_add(ad->main_window);
+       if (ad->popup == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Cannot add popup object !!");
+               return MSG_UI_RET_ERR;
+       }
+
+       evas_object_size_hint_weight_set(ad->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(ad->popup, display_msg);
+       elm_popup_orient_set(ad->popup, ELM_POPUP_ORIENT_CENTER);
+
+       btn1 = elm_button_add(ad->popup);
+       elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_YES"));
+       elm_object_part_content_set(ad->popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", __msg_ui_dialog_always_ask_left_btn_cb, ad);
+
+       btn2 = elm_button_add(ad->popup);
+       elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_NO"));
+       elm_object_part_content_set(ad->popup, "button2", btn2);
+       evas_object_smart_callback_add(btn1, "clicked", __msg_ui_dialog_always_ask_right_btn_cb, ad);
+
+       evas_object_show(ad->popup);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+
+static void __msg_ui_dialog_win_del(void *data, Evas_Object *obj, void *event)
+{
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+       elm_exit();
+}
+
+static Evas_Object *__msg_ui_dialog_create_win(const char *name)
+{
+       Evas_Object *eo = NULL;
+       int w, h;
+
+       eo = elm_win_add(NULL, name, ELM_WIN_DIALOG_BASIC);
+       if (eo) {
+               elm_win_alpha_set(eo, EINA_TRUE);
+               elm_win_title_set(eo, name);
+               elm_win_borderless_set(eo, EINA_TRUE);
+               elm_win_raise(eo);
+               evas_object_smart_callback_add(eo, "delete,request", __msg_ui_dialog_win_del, NULL);
+               ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+               evas_object_resize(eo, w, h);
+               evas_object_show(eo);
+       }
+
+       return eo;
+}
+
+static int app_create(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       struct appdata *ad = data;
+
+       if (ad->dialog_mode != MSG_UI_DIALOG_MODE_PUSH_MSG_ALWAYS_ASK) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid mode !!");
+               return MSG_UI_RET_ERR;
+       }
+
+       /* Create main window */
+       ad->main_window = __msg_ui_dialog_create_win(PACKAGE);
+       if (ad->main_window == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_ui_dialog_create_win() is failed !!");
+               return MSG_UI_RET_ERR;
+       }
+
+       if (__msg_ui_dialog_create_always_ask_popup(ad) < 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_ui_dialog_create_always_ask_popup() is failed !!");
+               return MSG_UI_RET_ERR;
+       }
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_terminate(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_pause(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_resume(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_reset(bundle *b, void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int parse_opt(int argc, char **argv, struct appdata *ad)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       int opt;
+
+       if (ad == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid argument: application data is NULL");
+               return MSG_UI_RET_ERR;
+       }
+
+       while ((opt = getopt(argc, argv, "m:o:u:h")) != -1) {
+               switch (opt) {
+               case 'o':
+                       ad->msg = strdup(optarg);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "optarg = %s", ad->msg);
+                       break;
+
+               case 'm':
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "m  = %s", optarg);
+                       if (g_strcmp0(optarg, "PUSH_MSG_ALWAYS_ASK") == 0) {
+                               ad->dialog_mode = MSG_UI_DIALOG_MODE_PUSH_MSG_ALWAYS_ASK;
+                       } else {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid mode: %s", optarg);
+                               return MSG_UI_RET_ERR;
+                       }
+                       break;
+               case 'u':
+                       ad->url = strdup(optarg);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ad->url = %s", ad->url);
+                       break;
+               case 'h':
+               default:
+                       fprintf(stderr, "Usage: %s [-h] [-m PUSH_MSG_ALWAYS_ASK] [-u LaunchURL] \n", argv[0]);
+                       fprintf(stderr, "ex) %s -m PUSH_MSG_ALWAYS_ASK -u www.google.com \n", argv[0]);
+                       return MSG_UI_RET_ERR;
+               }
+       }
+       return MSG_UI_RET_SUCCESS;
+}
+
+int main(int argc, char **argv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       struct appdata ad;
+       struct appcore_ops ops = {
+                       .create = app_create,
+                       .terminate = app_terminate,
+                       .pause = app_pause,
+                       .resume = app_resume,
+                       .reset = app_reset,
+       };
+
+       memset(&ad, 0x0, sizeof(struct appdata));
+       ops.data = &ad;
+
+       if (parse_opt(argc, argv, &ad) == -1) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "parse_opt() is failed !!");
+               return MSG_UI_RET_ERR;
+       }
+
+       return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
+}
+
diff --git a/dialog/message-dialog.h b/dialog/message-dialog.h
new file mode 100755 (executable)
index 0000000..af56570
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_message_dialog_H_
+#define __DEF_message_dialog_H_
+
+#include <stdio.h>
+#include <glib.h>
+#include <Elementary.h>
+#include <appcore-efl.h>
+#include <utilX.h>
+#include <Ecore_X.h>
+#include "msg-ui-util.h"
+
+
+#define PACKAGE "message_dialog" /* for i18n */
+
+
+typedef enum {
+               MSG_UI_DIALOG_MODE_PUSH_MSG_ALWAYS_ASK,
+
+               MSG_UI_DIALOG_MODE_MAX
+
+} MSG_UI_DIALOG_MODE;
+
+struct appdata {
+       Evas_Object *main_window;
+       Evas_Object *popup;
+
+       /* argument */
+       MSG_UI_DIALOG_MODE dialog_mode;
+       char *url;
+       char *msg;
+
+};
+
+void msg_ui_dialog_exit(void *data);
+int main(int argc, char **argv);
+
+#endif /* __DEF_message_dialog_H_ */
+
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..5ff9d37
--- /dev/null
@@ -0,0 +1,77 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(message C)
+
+SET(SRCS 
+       message.c
+       ${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-main.c
+       ${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-list.c
+       ${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-callback.c
+       ${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-util.c
+)
+
+SET(THREAD_GENLIST  thread_genlist)
+
+SET(CMAKE_SKIP_BUILD_RPATH TRUE)
+SET(CMAKE_INSTALL_RPATH "${LIBDIR}")
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+       SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+INCLUDE_DIRECTORIES(
+       ${CMAKE_SOURCE_COMMON_DIR}
+       ${CMAKE_SOURCE_MAIN_DIR}
+       ${CMAKE_SOURCE_THREAD_DIR}/include
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fpie")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+
+FIND_PROGRAM(UNAME NAMES uname)
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
+IF("${ARCH}" STREQUAL "arm")
+       ADD_DEFINITIONS("-DTARGET")
+       MESSAGE("add -DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+ADD_DEFINITIONS("-DDEBUG")
+ADD_DEFINITIONS("-DDEBUG_ON")
+ADD_DEFINITIONS("-DLCD_TYPE_WVGA")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${CMAKE_LDFLAGS} msg-common)
+
+#Install desktop file & icon.
+INSTALL(TARGETS message DESTINATION bin)
+CONFIGURE_FILE(${CMAKE_SOURCE_MAIN_DIR}/${PKGNAME}.desktop.in ${CMAKE_SOURCE_MAIN_DIR}/${PKGNAME}.desktop)
+INSTALL(FILES ${CMAKE_SOURCE_MAIN_DIR}/${PKGNAME}.desktop DESTINATION /opt/share/applications)
+INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.png DESTINATION ${ICONDIR})
+INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.voice.png DESTINATION ${ICONDIR})
+INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.cb.png DESTINATION ${ICONDIR})
+INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.noti.png DESTINATION ${ICONDIR})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_COMMON_DIR}/data/image/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.png")
+INSTALL(DIRECTORY ${CMAKE_SOURCE_COMMON_DIR}/data/image/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.PNG")
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+#INSTALL(FILES ${CMAKE_SOURCE_MAIN_DIR}/${PROJECT_NAME}.ini DESTINATION share/process-info/ )
+
+#EDJ file.
+ADD_CUSTOM_TARGET(${THREAD_GENLIST}.edj
+                COMMAND edje_cc -id ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image
+                ${CMAKE_SOURCE_THREAD_DIR}/theme/${THREAD_GENLIST}.edc ${CMAKE_SOURCE_THREAD_DIR}/theme/${THREAD_GENLIST}.edj
+                DEPENDS ${CMAKE_SOURCE_THREAD_DIR}/theme/${THREAD_GENLIST}.edc
+)
+
+ADD_DEPENDENCIES(${PROJECT_NAME} ${THREAD_GENLIST}.edj)
+
+INSTALL(FILES ${CMAKE_SOURCE_THREAD_DIR}/theme/${THREAD_GENLIST}.edj DESTINATION ${EDJDIR})
+
+# i18n
+ADD_SUBDIRECTORY(po)
+
diff --git a/main/message.c b/main/message.c
new file mode 100755 (executable)
index 0000000..862ea55
--- /dev/null
@@ -0,0 +1,728 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "message.h"
+#include <Ecore_X.h>
+#include <ui-gadget.h>
+#include <ui-gadget-module.h>
+
+#include "msg-ui-thread-main.h"
+
+
+static void __msg_ui_popup_warning(Evas_Object *parent, const char *msg);
+static bundle *__msg_ui_parse_sms_uri(bundle *b, const char *uri);
+static bundle *__get_bundle_with_new_msg(struct appdata *ad);
+static bundle *__get_bundle_with_msg_id(struct appdata *ad, bundle *b);
+
+
+void layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv);
+void result_cb(struct ui_gadget *ug, bundle *result, void *priv);
+void destroy_cb(struct ui_gadget *ug, void *priv);
+
+struct appdata *gAppData = NULL;
+
+static void win_del(void *data, Evas_Object *obj, void *event)
+{
+       elm_exit();
+}
+
+static void main_quit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_exit();
+}
+
+static int lang_changed(void *data)
+{
+       D_ENTER;
+
+       return ug_send_event(UG_EVENT_LANG_CHANGE);
+}
+
+static int low_battery_cb(void *data)
+{
+       D_ENTER;
+
+       return ug_send_event(UG_EVENT_LOW_BATTERY);
+}
+
+static int region_changed_cb(void *data)
+{
+       D_ENTER;
+
+       return ug_send_event(UG_EVENT_REGION_CHANGE);
+}
+
+static void _block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+}
+
+static void __msg_ui_popup_warning(Evas_Object *parent, const char *msg)
+{
+       D_ENTER;
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, parent == NULL || msg == NULL);
+
+       Evas_Object *layout, *pu;
+
+       evas_object_show(parent);
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, layout);
+       evas_object_show(layout);
+
+       pu = elm_popup_add(layout);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, pu == NULL, "Cannot add popup object\n");
+       evas_object_size_hint_weight_set(pu, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_smart_callback_add(pu , "block,clicked", _block_clicked_cb, NULL);
+
+       elm_object_text_set(pu, msg);
+       elm_popup_timeout_set(pu, 2);
+       evas_object_smart_callback_add(pu, "timeout", main_quit_cb, NULL);
+       evas_object_show(pu);
+
+       D_LEAVE;
+}
+
+static bundle *__msg_ui_parse_sms_uri(bundle *b, const char *uri)
+{
+       D_ENTER;
+
+       bundle *cb = NULL;
+
+       char *content = NULL;
+       const char *recipient = NULL;
+       const char *body_text = NULL;
+
+       cb = bundle_create();
+       if (!cb)
+               return NULL;
+
+       char *scheme = g_strdup(uri);
+
+       if (scheme) {
+               strtok_r(scheme, ":", &content);
+
+               if (content) {
+                       if (g_ascii_isdigit(content[0]) || (content[0] == '+' && g_ascii_isdigit(content[1]))) {
+                               recipient = strtok_r(NULL, "?", &content);
+                               D_MSG("APPSVC RECIPIENT = [%s]", recipient);
+
+                               if (recipient)
+                                       bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient);
+                       }
+               }
+               g_free(scheme);
+       } else {
+               recipient = appsvc_get_data(b, APPSVC_DATA_TO);
+               D_MSG("APPSVC RECIPIENT = [%s]", recipient);
+               bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient);
+       }
+
+       /* Add body text */
+       body_text = appsvc_get_data(b, APPSVC_DATA_TEXT);
+       if (body_text) {
+               D_MSG("APPSVC BODY_TEXT = [%s]", body_text);
+               bundle_add(cb, MSG_BUNDLE_KEY_BODY, body_text);
+       }
+
+       D_LEAVE;
+       return cb;
+}
+
+static bundle *__get_bundle_app_svc_op(const char *operation, bundle *b)
+{
+       D_ENTER;
+
+       if (b == NULL || operation == NULL)
+               return NULL;
+
+       const char *uri = NULL;
+       const char *recipient = NULL;
+       const char *body_text = NULL;
+
+       bundle *cb = NULL;
+
+       if (g_strcmp0(operation, APPSVC_OPERATION_SEND_TEXT) == 0) {
+               uri = appsvc_get_uri(b);
+               D_MSG("APPSVC URI = [%s]", uri);
+
+               if (uri) {
+                       if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_SMS_URI)) {  /* SMS URI */
+                               cb = __msg_ui_parse_sms_uri(b, uri);
+                       } else {
+                               D_MSG("Not supported mime type");
+                               return NULL;
+                       }
+               } else {
+                       cb = bundle_create();
+
+                       /* Add body text */
+                       body_text = appsvc_get_data(b, APPSVC_DATA_TEXT);
+                       if (body_text) {
+                               D_MSG("APPSVC BODY_TEXT = [%s]", body_text);
+                               bundle_add(cb, MSG_BUNDLE_KEY_BODY, body_text);
+                       }
+
+                       /* Add recipient number */
+                       recipient = appsvc_get_data(b, APPSVC_DATA_TO);
+                       if (recipient) {
+                               D_MSG("APPSVC RECIPIENT = [%s]", recipient);
+                               bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient);
+                       }
+               }
+
+               bundle_add(cb, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_COMPOSE);
+       }
+
+       D_LEAVE;
+
+       return cb;
+}
+
+static bundle *__get_bundle_with_new_msg(struct appdata *ad)
+{
+       D_ENTER;
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_SORT_RULE_S sortRule = {0, };
+       MSG_THREAD_VIEW_LIST_S peerList = {0,};
+       int i, new_sms_cnt;
+       bundle *b = NULL;
+
+       char buf[DEF_BUF_LEN_L] = {'0',};
+       char buf_contact[DEF_BUF_LEN] = {'0',};
+
+       sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
+       sortRule.bAscending = false;
+
+       vconf_get_int(VCONFKEY_MESSAGE_RECV_SMS_STATE, &new_sms_cnt);
+
+       err = msg_get_thread_view_list(ad->msgHandle, &sortRule, &peerList);
+       if (err != MSG_SUCCESS)
+               return NULL;
+
+       if (peerList.nCount <= 0)
+               return NULL;
+
+       for(i=0; i<peerList.nCount; i++){
+               if(msg_thread_view_get_unread_cnt(peerList.msgThreadInfo[i]))
+                       break;
+       }
+
+       if(i >= peerList.nCount)
+               return NULL;
+
+       if(msg_thread_view_get_unread_cnt(peerList.msgThreadInfo[i]) == new_sms_cnt){
+
+               b = bundle_create();
+
+               if (!b)
+                       return NULL;
+
+               bundle_add(b, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_NEW_MSG);
+               snprintf(buf, DEF_BUF_LEN_L, "%d", msg_thread_view_get_thread_id(peerList.msgThreadInfo[i]));
+               bundle_add(b, MSG_BUNDLE_KEY_THREAD_ID, buf);
+               bundle_add(b, MSG_BUNDLE_KEY_THREAD_NAME, msg_thread_view_get_name(peerList.msgThreadInfo[i]));
+               bundle_add(b, MSG_BUNDLE_KEY_THREAD_ADDRESS, msg_thread_view_get_address(peerList.msgThreadInfo[i]));
+
+               snprintf(buf_contact, DEF_BUF_LEN, "%d", msg_thread_view_get_contact_id(peerList.msgThreadInfo[i]));
+               bundle_add(b, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact);
+
+               msg_release_thread_view_list(&peerList);
+       }
+
+       D_LEAVE;
+
+       return b;
+}
+
+static bundle* __get_bundle_with_msg_id(struct appdata *ad, bundle *b)
+{
+       D_ENTER;
+
+       bundle *nb = bundle_create();
+
+       if (!nb)
+               return NULL;
+
+       int msg_id = 0;
+       const char *msg_id_str = bundle_get_val(b, MSG_BUNDLE_KEY_MSG_ID);
+
+       if (!msg_id_str)
+               return NULL;
+
+       msg_id = atoi(msg_id_str);
+
+       if (msg_id <= 0)
+               return NULL;
+
+       msg_message_t msg_t = msg_new_message();
+       MSG_SENDINGOPT_S sendOpt = {0, };
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       int thread_id = 0;
+       int contact_id = 0;
+       char buf_thread[DEF_BUF_LEN_S] = {0,};
+       char buf_contact[DEF_BUF_LEN_S] = {0,};
+
+       err = msg_get_message(ad->msgHandle, msg_id, msg_t, &sendOpt);
+
+       if (err != MSG_SUCCESS) {
+               if (nb)
+                       bundle_free(nb);
+               return NULL;
+       }
+
+       thread_id= msg_get_ith_thread_id(msg_t, 0);
+       snprintf(buf_thread, sizeof(buf_thread), "%d", thread_id);
+
+       contact_id = msg_get_ith_contact_id(msg_t, 0);
+       snprintf(buf_contact, sizeof(buf_contact), "%d", contact_id);
+
+       bundle_add(nb, MSG_BUNDLE_KEY_THREAD_ID, buf_thread);
+       bundle_add(nb, MSG_BUNDLE_KEY_THREAD_NAME, msg_get_ith_name(msg_t, 0));
+       bundle_add(nb, MSG_BUNDLE_KEY_THREAD_ADDRESS, msg_get_ith_address(msg_t, 0));
+       bundle_add(nb, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact);
+
+       msg_release_message(&msg_t);
+
+       D_LEAVE;
+       return nb;
+}
+
+static Evas_Object* create_win(const char *name)
+{
+       D_ENTER;
+
+       Evas_Object *eo;
+       int w, h;
+
+       eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+       if (eo) {
+               elm_win_title_set(eo, name);
+               elm_win_borderless_set(eo, EINA_TRUE);
+               evas_object_smart_callback_add(eo, "delete,request", win_del, NULL);
+               ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+               evas_object_resize(eo, w, h);
+       }
+
+       D_LEAVE;
+       return eo;
+}
+
+
+void layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)
+{
+       D_ENTER;
+
+       struct appdata *ad;
+       Evas_Object *base, *win;
+
+       if (!ug || !priv)
+               return;
+
+       ad = priv;
+
+       base = ug_get_layout(ug);
+
+       if (!base){
+               ug_destroy(ug);
+               return;
+       }
+
+       win = ug_get_window();
+
+       switch (mode) {
+           case UG_MODE_FULLVIEW:
+                       evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_win_resize_object_add(win, base);
+                       evas_object_show(base);
+                       break;
+               case UG_MODE_FRAMEVIEW:
+           default:
+                       break;
+       }
+       D_LEAVE;
+}
+
+void result_cb(struct ui_gadget *ug, bundle *result, void *priv)
+{
+       D_ENTER;
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug || !priv);
+
+       struct appdata *ad = priv;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data;
+       const char *buf;
+
+       if (!g_strcmp0(bundle_get_val(result, MSG_BUNDLE_KEY_RESULT), MSG_BUNDLE_VALUE_DEL_ALL)) {
+
+               ug_destroy(ug);
+
+               if(pData) {
+                       PMSG_APP_THREAD_DATA_S item_data = NULL;
+                       const char *del_thread_id = NULL;
+                       Elm_Object_Item *gen_item = NULL;
+                       int del_id = 0;
+
+                       del_thread_id = bundle_get_val(result, MSG_BUNDLE_KEY_THREAD_ID);
+                       if (!del_thread_id)
+                               return;
+
+                       gen_item = elm_genlist_first_item_get(pData->genlist);
+                       elm_genlist_item_show(gen_item, ELM_GENGRID_ITEM_SCROLLTO_TOP); /** move to the first item */
+
+                       del_id = atoi(del_thread_id);
+                       while (gen_item) {
+                               item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(gen_item);
+                               if (item_data && item_data->threadId == del_id) {
+                                       elm_object_item_del(gen_item);
+                                       break;
+                               }
+                               gen_item = elm_genlist_item_next_get(gen_item);
+                       }
+
+                       pData->sel_gen_item = NULL;
+                       pData->sel_thread_id = 0;
+                       ad->composer_ug = NULL;
+
+                       pData->thread_cnt--;
+                       if (pData->thread_cnt <= 0)
+                               msg_ui_thread_list_load(pData);
+               } else {
+                       elm_exit();
+               }
+
+       } else if (!g_strcmp0(bundle_get_val(result, MSG_BUNDLE_KEY_COMPOSER_RESPONSE), MSG_BUNDLE_VALUE_RET_YES)) {
+               D_MSG("Composer will closed by selecting 'yes'");
+               if (pData && pData->msg_b) {
+                       if (g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_MSG_ID) == 0 ||
+                               g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_NEW_MSG) == 0 ||
+                               g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_COMPOSE) == 0 ||
+                               g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_SMS_URI) == 0) {
+
+                               if (msg_ui_load_composer_ug(pData->msg_b) == MSG_UI_RET_ERR)
+                                       D_MSG("Failed to load composer ug");
+                       }
+                       bundle_free(pData->msg_b);
+                       pData->msg_b = NULL;
+               }
+       } else if (!g_strcmp0(bundle_get_val(result, MSG_BUNDLE_KEY_COMPOSER_RESPONSE), MSG_BUNDLE_VALUE_RET_NO)) {
+               D_MSG("Composer will not be closed");
+               if (pData && pData->msg_b) {
+                       bundle_free(pData->msg_b);
+                       pData->msg_b = NULL;
+               }
+       } else if ((buf = bundle_get_val(result, MSG_BUNDLE_KEY_THREAD_ID)) != NULL) {
+               int thread_id = 0;
+               PMSG_APP_THREAD_DATA_S item_data = NULL;
+               Elm_Object_Item *gen_item = NULL;
+
+               thread_id = atoi(buf);
+               gen_item = elm_genlist_first_item_get(pData->genlist);
+
+               while (gen_item) {
+                       item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(gen_item);
+
+                       if (item_data->threadId == thread_id) {
+                               elm_genlist_item_show(gen_item, ELM_GENGRID_ITEM_SCROLLTO_TOP);
+                               msg_ui_thread_list_item_update(pData, thread_id);
+                               break;
+                       }
+                       gen_item = elm_genlist_item_next_get(gen_item);
+               }
+       }
+
+       D_LEAVE;
+}
+
+void destroy_cb(struct ui_gadget *ug, void *priv)
+{
+       D_ENTER;
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug || !priv);
+
+       struct appdata *ad = (struct appdata *)priv;
+
+       if (ug == ad->composer_ug) {
+               ug_destroy(ug);
+               ad->composer_ug = NULL;
+       }
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data;
+
+       if (pData && ad->layout_main) {
+               if (pData->search_mode == THREAD_SEARCH_ON)
+                       elm_object_focus_set(pData->searchbar, EINA_TRUE);
+
+               if (pData->sel_thread_id > 0)
+                       msg_ui_thread_list_item_update(pData, pData->sel_thread_id);
+
+               pData->sel_gen_item = NULL;
+               pData->sel_thread_id = 0;
+
+               pData->viewmode = THREAD_NORMAL_VIEW;
+       } else {
+               elm_exit();
+       }
+}
+
+
+int msg_ui_load_composer_ug(bundle *b)
+{
+       D_ENTER;
+
+       if (!gAppData)
+               return MSG_UI_RET_ERR;
+
+       if (gAppData->composer_ug)
+               ug_send_message(gAppData->composer_ug, b);
+       else {
+               bundle_add(b, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL);
+               gAppData->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, b, &gAppData->cbs);
+       }
+
+       if (!gAppData->composer_ug)
+               return MSG_UI_RET_ERR;
+
+       D_LEAVE;
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_create(void *data)
+{
+/* return 0 : success, return non-zero : not to run main loop */
+
+       D_ENTER;
+       D_MSG("Measure time = [%d]", appcore_measure_time());
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, MSG_UI_RET_ERR);
+
+       struct appdata *ad = data;
+       Evas_Object *win;
+
+       /* create window */
+       win = create_win(MESSAGE_PKGNAME);
+       if (win == NULL)
+               return MSG_UI_RET_ERR;
+
+       ad->win_main = win;
+
+       UG_INIT_EFL(ad->win_main,  UG_OPT_INDICATOR_ENABLE);
+
+       /* add system event callback */
+       appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, lang_changed, ad);
+       appcore_set_event_callback(APPCORE_EVENT_LOW_BATTERY, low_battery_cb, ad);
+       appcore_set_event_callback(APPCORE_EVENT_REGION_CHANGE, region_changed_cb, ad);
+
+       ad->cbs.layout_cb = layout_cb;
+       ad->cbs.result_cb = result_cb;
+       ad->cbs.destroy_cb = destroy_cb;
+       ad->cbs.priv = (void *)ad;
+
+       gAppData = ad; /*  Set global app data pointer; */
+
+       D_LEAVE;
+       D_MSG("Measure time = [%d]", appcore_measure_time());
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_terminate(void *data)
+{
+       D_ENTER;
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, MSG_UI_RET_ERR);
+
+       struct appdata *ad = data;
+       MSG_ERROR_T     err;
+
+       ug_destroy_all();
+
+       if (ad->thread_data)
+               msg_ui_thread_deinit_thread_data(ad->thread_data);
+
+       if (ad->msgHandle) {
+               err = msg_close_msg_handle(&ad->msgHandle);
+               D_MSG("msg_close_msg_handle, ret = [%d]", err);
+       }
+
+       D_LEAVE;
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_pause(void *data)
+{
+       D_ENTER;
+
+       msg_ui_thread_set_app_state(MSG_UI_STATE_PAUSE);
+       ug_pause();
+
+       D_LEAVE;
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_resume(void *data)
+{
+       D_ENTER;
+
+       msg_ui_thread_set_app_state(MSG_UI_STATE_RUNNING);
+       ug_resume();
+
+       D_LEAVE;
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+static int app_reset(bundle *b, void *data)
+{
+       D_ENTER;
+       D_MSG("Measure time = [%d]", appcore_measure_time());
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, MSG_UI_RET_ERR);
+
+       struct appdata *ad = data;
+
+       bundle *cb = NULL;
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_HANDLE_T msgHandle;
+       bool isDefaultView = false;
+
+       const char *operation = NULL;
+
+       ug_resume();
+
+       if (!ad->msgHandle) {
+               err = msg_open_msg_handle(&msgHandle);
+               if (err != MSG_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_open_msg_handle failed, Error=[%d]\n", err);
+                       __msg_ui_popup_warning(ad->win_main,  dgettext("sys_string", "IDS_COM_POP_SERVICE_UNAVAILABLE"));
+                       return MSG_UI_RET_ERR;
+               }
+               ad->msgHandle = msgHandle;
+       }
+
+       if (b) {
+               operation = appsvc_get_operation(b);
+               if (operation) {
+                       cb = __get_bundle_app_svc_op(operation, b);
+               } else {
+                       if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_COMPOSE) == 0) { /* From call, log,.. etc. */
+                               cb = bundle_dup(b);
+                       } else if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_NEW_MSG) == 0) { /* From lock-screen */
+                               cb = __get_bundle_with_new_msg(ad);
+                               if (cb == NULL)
+                                       isDefaultView = true;
+                       } else if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_MSG_ID) == 0) {  /* From quick-panel */
+                               cb = __get_bundle_with_msg_id(ad, b);
+                       } else {
+                               isDefaultView = true;
+                       }
+               }
+
+               if (!cb)
+                       isDefaultView = true;
+
+       } else {
+               isDefaultView = true;
+       }
+
+       if (isDefaultView) {
+               if (!ad->thread_data)
+                       ad->thread_data = msg_ui_thread_init_thread_data(ad);
+
+               if (!ad->layout_main) {
+                       ad->layout_main = msg_ui_thread_create_layout_main(ad->win_main);
+                       evas_object_size_hint_weight_set(ad->layout_main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_win_resize_object_add(ad->win_main, ad->layout_main);
+
+                       msg_ui_thread_load_thread_view(ad->thread_data, b);
+               } else {
+                       msg_ui_thread_reset_thread_view(ad->thread_data, b);
+               }
+       } else {
+               /* If message app is called by app-service to display composer view,
+                * list view should be destroyed because previous screen should be displayed
+                * when user tap back button.
+                */
+               if (operation != NULL) {
+                       if (g_strcmp0(operation, APPSVC_OPERATION_SEND) == 0 ||
+                               g_strcmp0(operation, APPSVC_OPERATION_SEND_TEXT) == 0) {
+                               if (ad->layout_main) {
+                                       evas_object_del(ad->layout_main);
+                                       ad->layout_main = NULL;
+                               }
+                       }
+               }
+
+               if (!ad->composer_ug)
+                       ad->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, cb, &ad->cbs);
+               else
+                       ug_send_message(ad->composer_ug, cb);
+
+               const char *thread_id_s = NULL;
+
+               PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data;
+               thread_id_s = bundle_get_val(cb, MSG_BUNDLE_KEY_THREAD_ID);
+
+               if (pData && thread_id_s)
+                       pData->sel_thread_id = atoi(thread_id_s);
+       }
+
+       if (cb) {
+               bundle_free(cb);
+               cb = NULL;
+       }
+
+       if (ad->win_main) {
+               evas_object_show(ad->win_main);
+               elm_win_activate(ad->win_main);
+       }
+
+       if (ad->layout_main == NULL && ad->composer_ug == NULL)
+               elm_exit();
+
+       D_LEAVE;
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+int main(int argc, char *argv[])
+{
+       D_ENTER;
+       appcore_measure_start();
+
+       struct appdata ad;
+       struct appcore_ops ops = {
+       .create = app_create,
+       .terminate = app_terminate,
+       .pause = app_pause,
+       .resume = app_resume,
+       .reset = app_reset,
+       };
+
+       memset(&ad, 0x0, sizeof(struct appdata));
+       ops.data = &ad;
+
+       D_LEAVE;
+
+       return appcore_efl_main(MESSAGE_PKGNAME, &argc, &argv, &ops);
+}
diff --git a/main/message.h b/main/message.h
new file mode 100755 (executable)
index 0000000..4e69bb5
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_message_H_
+#define __DEF_message_H_
+
+#include <stdio.h>
+#include <glib.h>
+
+#include <MsgStorageTypes.h>
+#include <MapiStorage.h>
+#include <MapiMessage.h>
+#include <MapiControl.h>
+#include <MapiTransport.h>
+
+#include <libintl.h>
+#include <bundle.h>
+#include <appcore-efl.h>
+#include <Ecore.h>
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+#include <utilX.h>
+#include "msg-ui-util.h"
+#include <appsvc.h>
+
+#define POPUP_DELAY (1)
+#define DEF_NUM_LEN    (64)
+
+struct appdata
+{
+    Evas_Object *win_main;
+    Evas_Object *layout_main;
+
+    struct ug_cbs cbs;
+       struct ui_gadget *composer_ug;
+
+       MSG_HANDLE_T msgHandle;
+
+       void *thread_data;
+};
+
+int msg_ui_load_composer_ug(bundle *b);
+
+
+#endif /* __DEF_message_H__ */
+
+
diff --git a/main/org.tizen.message.desktop.in b/main/org.tizen.message.desktop.in
new file mode 100755 (executable)
index 0000000..25eded9
--- /dev/null
@@ -0,0 +1,27 @@
+Name=Messages
+Name[en_US]=Messages
+Name[ko_KR]=메시지
+Name[de_DE]=Nachrichten
+Name[el_GR]=Μηνύματα
+Name[es_ES]=Mensajes
+Name[fr_FR]=Messages
+Name[it_IT]=Messaggi
+Name[ja_JP]=メール
+Name[nl_NL]=Berichten
+Name[pt_PT]=Mensagem
+Name[ru_RU]=Сообщения
+Name[tr_TR]=Mesajlar
+Name[zh_CN]=信息
+Name[zh_HK]=訊息
+Name[zh_TW]=訊息
+Type=Application
+MimeType=sms.uri
+Exec=${BINDIR}/message
+Icon=${PKGNAME}.png
+Comment=message application
+Version=0.1.0 
+nodisplay=False
+X-TIZEN-TaskManage=True
+X-TIZEN-Multiple=False
+X-TIZEN-Removable=False
+X-TIZEN-SVC= http://tizen.org/appsvc/operation/send_text|sms|NULL;http://tizen.org/appsvc/operation/send_text|NULL|NULL
diff --git a/main/po/CMakeLists.txt b/main/po/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..4f2d7a8
--- /dev/null
@@ -0,0 +1,25 @@
+# for i18n
+
+#SET(POFILES de.po el.po en_US.po es.po fr.po it.po ja.po ko.po nl.po pt.po ru.po tk.po zh_CN.po zh_HK.po zh_TW.po)
+SET(POFILES en.po nl_NL.po de_DE.po zh_HK.po zh_CN.po ru_RU.po ko_KR.po zh_TW.po ja_JP.po es_ES.po el_GR.po it_IT.po tr_TR.po pt_PT.po fr_FR.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+       SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+       MESSAGE("PO: ${pofile}")
+       GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+       GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+       SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+       ADD_CUSTOM_COMMAND(
+                       OUTPUT ${moFile}
+                       COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+                       DEPENDS ${absPofile}
+       )
+       INSTALL(FILES ${moFile}
+                       DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+       SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/main/po/de_DE.po b/main/po/de_DE.po
new file mode 100755 (executable)
index 0000000..49ec76f
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Kann nicht geöffnet werden"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Abrufen"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Verschieben nicht möglich"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Nicht angefragt"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Maximale Anzahl an Seiten erreicht"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Angefordert"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Eingeschränkter Modus. Eingeschränkter Inhalt kann nicht eingefügt werden"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Zugestellt"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Abgelaufen"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Gelesen"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Wird abgerufen..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Abrufen fehlgeschlagen"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "SIM-Karte einlegen, um Nachrichten zu senden. Die Nachricht wird im Postausgang gespeichert"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d Sprachen"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Nummer"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Verdoppelt"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Sendernamen eingeben"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Sendernummer eingeben"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Nichts ausgewählt"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d Kanäle"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Gleiche Kanal-ID besteht bereits"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Sendevorgang fehlgeschlagen. Erneut versuchen?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Sender-ID-Liste voll"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 Nachricht ausgewählt."
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 Person ausgewählt."
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d Nachrichten ausgewählt."
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d Personen ausgewählt."
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Vorschau"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Dateiname wird bereits verwendet"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Keine Nachrichten"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Nachricht erstellen"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Zu Kontakt hinzufügen"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Adresse erstellen"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Sperrliste"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Nummer hinzufügen"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Sender erstellen"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Verwerfen"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Nachricht kann nicht gesendet werden"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Kontakte"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Foto aufnehmen"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Keine Adresse"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Signalton"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Werbung zulassen"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Anonym zulassen"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Elementliste angehängt"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatisch herunterladen"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Automatisch"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Automatisches Löschen"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Hintergrundfarbe"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Nachrichten sperren"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Infomeldungen"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Aktivierung"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Eigene Kanäle"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Empfangskanäle"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Zentrale %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Benutzerdefinierte Zeit"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Standardstil"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Zustellbericht"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Senden fehlgeschlagen"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Alle 10 Minuten"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Alle 2 Minuten"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Alle 5 Minuten"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Schriftfarbe"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Von"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Allgemeine Einstellungen"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM-Alphabet"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Halten Sie die Taste 1 gedrückt, um eine Verbindung zur Mailbox herzustellen, wenn kein Programm oder Anruf aktiv ist."
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Liste der eingefügten Elemente"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Sprachen"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Maximum"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Mobilbox-Nummer"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Nachricht zugestellt"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Nachricht abgerufen"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Frei"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Warnung"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Gesendet"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Keine Größen- und Inhaltsbeschränkungen"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Sie werden gewarnt, wenn Größe und Inhalt das Maximum überschreiten."
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Fax"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Stimme"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Update-Hinweis"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Lesebericht"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Empfangen"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuell"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Abweisen"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Empfangsoptionen"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Antwortpfad"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Zustellbericht anfordern"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Lesebericht anfordern"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Eingeschränkt"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Sendevorgang läuft..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 Tage"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Niedrig"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Dringend"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Sendeoptionen"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Gültigkeit"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Priorität"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Zustellbericht senden"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Lesebericht senden"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Diensttyp"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Adresse"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Identisch mit"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Enthält"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Passende Kriterien"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Einmal"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Seitenanzeigedauer"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Zeichenunterstützung"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Text"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS-Nachrichten"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Gesamtgröße"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM-Inhalt"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Sender bearbeiten"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Elementliste"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "Sekunden"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 Sekunden"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 Sekunden"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 Sekunden"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Heimatnetz"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Installieren"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Fremdnetz"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Gleiten"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Schriftstil"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Kontaktdetails anzeigen"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS gesendet"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Abrufen der Nachricht fehlgeschlagen"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Senden der Multimedia-Nachricht fehlgeschlagen"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "Sie können Bilder mit bis zu %d KB senden"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Visitenkarte"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Kein Name"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Willkommen"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Weiterl."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Unge-\nlesen"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "In Telefon verschieben"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Text hinzufügen"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Doppelter Empfänger"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Maximale Erstellungsgröße"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Maximale Anzahl an Empfängern (%d) erreicht"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Betreff hinzufügen"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Gruppen"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Telefonbuch"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Andere Dateien"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Ton"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Multimedia hinzufügen"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "AUS"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "EIN"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "An"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Ton aufzeichnen"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Ton aufzeichnen"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Video aufzeichnen"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Textvorlage"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Zu MMS geändert"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Zu SMS geändert"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Adresse eingeben"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Datei ungültig"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Nachricht gesendet"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Max. Nachrichtengröße überschritten"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d Anhänge verfügbar. Wählen Sie bis zu %d Anhänge."
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Server antwortet nicht"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Anhängen der Dateien nicht möglich. Maximale Anhangsgröße ist %d KB. Fortfahren?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Senden von MMS nicht möglich. Unerkannter Fehler"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Kalender synchronisieren"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Schriftgröße"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Ohne Anhänge"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Gesamte E-Mail"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Erstellungsmodus"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Nachricht zugestellt"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Neue Mailbox-Nachricht"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Kein Betreff"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Ja, alle"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Dienstzentrale"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Dienst wird geladen"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Ton"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Senden nicht möglich. Nicht unterstützte Dateitypen im Anhang."
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Gesprächsliste"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Adresse auswählen"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Auf SIM-Karte verschieben"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Sie sind im Begriff Online zu gehen (%s). Fortfahren?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS-Abruf gescheitert"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Kein Empfänger"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Erforderlich"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "In Entwürfe speichern"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Max. Nachrichtengröße überschritten. Größe wird angepasst..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Synchronisierung fehlgeschlagen"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Erneut senden"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Sender hinzufügen"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Ungültiger Empfänger"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Ungültige Empfänger"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Wiedergabe während Anruf nicht möglich"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Im Massenspeichermodus kein Speichern möglich"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Im Massenspeichermodus kein Öffnen möglich"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Im Massenspeichermodus keine Verwendung möglich"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Aktuelle Nachricht verwerfen?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Ausgewählt"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Ausgewählt"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Löschen?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Größe wird angepasst..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Anhängen nicht möglich. Maximale Dateigröße ist %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Eingeschränkt"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Weiterleiten nicht möglich.\nDatei ist für Weiterleitung gesperrt"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Geplante Nachricht"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Sicherheitsrichtlinie schränkt das Verfassen von SMS ein"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Hinzufügen. Bitte warten..."
+
diff --git a/main/po/el_GR.po b/main/po/el_GR.po
new file mode 100755 (executable)
index 0000000..2efdcf9
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Δεν είναι δυνατό το άνοιγμα"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Ανάκτηση"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Δεν είναι δυνατή η μετακίνηση"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Δεν ζητήθηκε"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Συμπληρώθηκε ο μέγιστος αριθμός σελίδων"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Έγινε αίτημα"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Περιορισμός. Δεν είναι δυνατή η εισαγωγή απαγορευμένου περιεχομένου"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Παραδόθηκε"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Έληξε"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Ανάγνωση"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Ανάκτηση..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Αποτυχία ανάκτησης"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Εισάγετε κάρτα SIM για την αποστολή μηνυμάτων. Το μήνυμα θα αποθηκευτεί στα Εξερχόμενα"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d γλώσσες"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Διεύθυνση κέντρου"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Διπλότυπος"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Εισαγωγή ονόματος καναλιού"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Εισαγωγή αριθμού καναλιού"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Δεν έχει γίνει καμία επιλογή"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d κανάλια"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Υπάρχει ίδιο αναγνωριστικό καναλιού"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Αποτυχία αποστολής. Επανάληψη?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Η λίστα ταυτότητας καναλιού είναι πλήρης"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Έχει επιλεχθεί 1 μήνυμα"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "Επιλέχθηκε 1 άτομο"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Έχουν επιλεχθεί %d μηνύματα"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "Έχουν επιλεχθεί %d άτομα"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Προεπισκόπηση"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Το όνομα αρχείου υπάρχει ήδη"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Κανένα μήνυμα"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Δημιουργία μηνύματος"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Προσθήκη σε επαφή"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Δημιουργία διεύθυνσης"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Λίστα αποκλεισμού"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Πατήστε για προσθήκη αριθμού"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Δημιουργία καναλιού"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Απόρριψη"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Δεν είναι δυνατή η αποστολή μηνύματος"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Επαφές"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Λήψη φωτογραφίας"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Καμία διεύθυνση"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Ήχος ειδοποίησης"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Να επιτρέπονται οι διαφημίσεις"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Αποδ. ανώνυμου"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Συνημμένη λίστα στοιχείων"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Αυτόματη λήψη"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Αυτόματo"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Αυτόματη διαγραφή"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Χρώμα φόντου"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Αποκλεισμός μηνυμάτων"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Μηνύματα εκπομπής κυψέλης"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Ενεργοποίηση"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Τα κανάλια μου"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Λήψη καναλιών"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Κέντρο %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Προσαρμοσμένη ώρα"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Προεπιλεγμένο στυλ"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Αναφορά παράδοσης"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Αποτυχία αποστολής"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Κάθε 10 λεπτά"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Κάθε 2 λεπτά"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Κάθε 5 λεπτά"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Χρώμα γραμματοσειράς"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Από"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Γεν. Ρυθμίσεις"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "Αλφάβητο GSM"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Κρατήστε πατημένο το πλήκτρο '1' για σύνδεση στο διακομιστή φωνητικού ταχυδρομείου, όταν δεν βρίσκεστε σε μια εφαρμογή ή σε κλήση"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Εισαχθείσα λίστα στοιχείων"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Γλώσσες"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Μέγιστο"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Αριθμός τηλεφωνητή"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Το μήνυμα παραδόθηκε"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Το μήνυμα ανακτήθηκε"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Ελεύθερο"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Προειδοποίηση"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Εστάλη"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Κανένας περιορισμός μεγέθους και περιεχομένου"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Θα ειδοποιηθείτε όταν το μέγεθος και το περιεχόμενο υπερβούν το μέγιστο επιτρεπτό όριο"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Φαξ"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Φωνή"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Push messages"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Αναφορά ανάγνωσης"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Ελήφθη"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Χειροκίνητα"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Απόρριψη"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Επιλογές λήψης"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Διαδρομή απάντησης"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Αίτηση αναφοράς παράδοσης"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Αίτηση αναφ. ανάγνωσης"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Περιορισμός"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Αποστολή..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 ημέρες"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Χαμηλή"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Κανονική"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Επείγον"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Επιλογές αποστολής"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Λήξη"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Προτεραιότητα"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Αποστολή αναφοράς παράδοσης"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Αποστολή αναφοράς ανάγνωσης"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Τύπος υπηρεσίας"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Διεύθυνση"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Ακριβώς ίδιο με"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Να συμπεριληφθεί"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Αντιστοίχιση κριτηρίων"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Μία φορά"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Διάρκεια σελίδας"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Υποστήριξη χαρακτήρων"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Κείμενο"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Μηνύματα SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Συνολικό μέγεθος"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Περιεχόμενο DRM"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Επεξεργασία καναλιού"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Λίστα στοιχείων"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "δευτερόλεπτα"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 δευτερόλεπτα"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 δευτερόλεπτα"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 δευτερόλεπτα"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Οικείο δίκτυο"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Εγκατάσταση"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Δίκτυο περιαγωγής"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Διαφάνεια"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Στυλ γραμματοσειράς"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Προβολή λεπτομερειών επαφής"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Το MMS εστάλη"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Αποτυχία ανάκτησης μηνύματος"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Αποτυχία αποστολής μηνύματος πολυμέσων"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "Μπορείτε να αποστείλετε εικόνα μέχρι %d KB"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Στοιχεία επαφής"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Κανένα όνομα"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Καλώς ήλθατε"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Προώθ."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Μη αναγνωσμένο"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Μετακίνηση στο τηλέφωνο"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Προσθήκη κειμένου"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Διπλότυπος παραλήπτης"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Μέγιστο μέγεθος για τη δημιουργία"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Συμπληρώθηκε ο μέγιστος αριθμός παραληπτών (%d)"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Πατήστε για προσθήκη θέματος"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Ομάδες"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Ευρετήριο"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Άλλα αρχεία"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Ήχος"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Προσθήκη πολυμέσων"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "Ανενεργό"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "Ενεργό"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Προς"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Εγγραφή ήχου"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Εγγραφή ήχου"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Εγγραφή βίντεο"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Πρότυπο κειμένου"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Άλλαξε σε MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Αλλαγή σε SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Εισαγωγή διεύθυνσης"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Άκυρο αρχείο"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Μήνυμα εστάλη"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Υπέρβαση μέγιστου μεγέθους μηνύματος"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d συνημμένα διαθέσιμα. Επιλέξτε έως και %d συνημμένα"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Ο διακομιστής δεν αποκρίνεται"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Δεν είναι δυνατή η επισύναψη όλων των αρχείων. Η μέγιστη χωρητικότητα για επισυνάψεις είναι %d KB. Συνέχεια;"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Δεν είναι δυνατή η αποστολή MMS. Μη αναγνωρίσιμο σφάλμα"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Συγχρονισμός ημερολογίου"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Μέγεθος γραμματοσειράς"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Χωρίς συνημμένα"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Ολόκληρο μήνυμα email"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Λειτουργία δημιουργίας"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Το μήνυμα παραδόθηκε"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Νέο φωνητικό μήνυμα"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Χωρίς θέμα"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Ναι σε όλα"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Κέντρο υπηρεσίας"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Φόρτωση υπηρεσίας"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Ήχος"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Δεν είναι δυνατή η αποστολή. Έχουν επισυναφθεί τύποι αρχείων που δεν υποστηρίζονται"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Λίστα συζητήσεων"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Επιλογή διεύθυνσης"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Μετακίνηση στην κάρτα SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Πρόκειται να συνδεθείτε (%s). Συνέχεια;"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "Αποτυχία ανάκτησης MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Δεν υπάρχει παραλήπτης"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Απαιτείται"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Αποθήκευση στα πρόχειρα"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Υπέρβαση μέγ. μεγέθους μηνύματος. Αλλαγή μεγέθους..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Ο συγχρονισμός ακυρώθηκε"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Επανάληψη αποστολής"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Προσθήκη καναλιού"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Μη έγκυρος παραλήπτης"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Μη έγκυροι παραλήπτες"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Δεν είναι δυνατή η αναπαραγωγή παιχνιδιού κατά την κλήση"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Δεν είναι δυνατή η αποθήκευση κατά την λειτουργία μαζικής αποθήκευσης"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Δεν είναι δυνατό το άνοιγμα κατά την λειτουργία μαζικής αποθήκευσης"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Δεν είναι δυνατή η χρήση κατά την λειτουργία μαζικής αποθήκευσης"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Να απορριφθεί το τρέχον μήνυμα;"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Επιλεγμένο"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Επιλεγμένο"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Διαγραφή;"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Αλλαγή μεγέθους..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Δεν είναι δυνατή η επισύναψη. Το μέγιστο όριο μεγέθους των αρχείων είναι %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Περιορισμός"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Δεν είναι δυνατή η προώθηση. Το αρχείο έχει προστασία κατά της προώθησης"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Προγραμματισμένο μήνυμα"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Η πολιτική ασφαλείας περιορίζει τη σύνταξη μηνυμάτων κειμένου"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Γίνεται προσθήκη. Περιμένετε..."
+
diff --git a/main/po/en.po b/main/po/en.po
new file mode 100755 (executable)
index 0000000..4380774
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Unable to open"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Retrieve"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Unable to move"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Not requested"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Maximum number of pages reached"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Requested"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Restricted mode. Unable to insert restricted content"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Delivered"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Expired"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Read"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Retrieving..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Retrieving failed"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Insert a SIM card to send messages. The message will be saved in Outbox"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d languages"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Centre address"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Duplicated"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Enter channel name"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Enter channel number"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Nothing selected"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d channels"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Same channel ID exists"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Sending failed. Try again?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Channel ID list full"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 message selected"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 person selected"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d messages selected"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d people selected"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Preview"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "File name already exists"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "No messages"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Create message"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Add to contact"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Create address"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Block list"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Tap to add number"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Create channel"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Discard"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Unable to send message"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Contacts"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Take photo"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "No address"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Alert tone"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Allow advertisement"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Allow anonymous"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Attached item list"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Auto download"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Automatic"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Auto delete"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Background colour"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Block messages"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Broadcast messages"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Activation"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "My channels"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Receiving channels"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centre %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Custom time"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Default style"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Delivery report"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Sending failed"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Every 10 minutes"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Every 2 minutes"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Every 5 minutes"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Font colour"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "From"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "General settings"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM alphabet"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Hold down the '1' key to connect to the voicemail server when you are not in an application or call"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Inserted item list"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Languages"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Maximum"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Voicemail number"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Message delivered"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Message retrieved"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Free"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Warning"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Sent"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "No size and content restrictions"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "You will be notified when size and content exceed the maximum allowed"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Fax"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Voice"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Push messages"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Read report"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Received"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manual"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Reject"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Receiving options"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Reply path"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Request delivery report"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Request read report"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Restricted"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Sending..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 days"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Low"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgent"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Sending options"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Expiry"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Priority"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Send delivery report"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Send read report"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Service type"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Address"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Exactly the same as"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Include"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Match criteria"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Once"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Page duration"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Character support"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Text"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS messages"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Text messages"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Total size"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM content"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Edit channel"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Item list"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "Seconds"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 seconds"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 seconds"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 seconds"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Home network"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Install"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Foreign network"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Slide"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Font style"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "View contact detail"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multimedia message sent"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Retrieving message failed"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Sending multimedia message failed"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "You can send image up to %d KB"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Name card"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "No name"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Welcome"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Fwd"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Unread"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Move to phone"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Add text"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Duplicated recipient"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Maximum creation size"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Maximum number of recipients (%d) reached"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Tap to add subject"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Groups"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Phonebook"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Other files"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Sound"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Add multimedia"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "OFF"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "ON"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "To"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Record sound"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Record sound"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Record video"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Text template"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Changed to MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Changed to SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Enter address"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Invalid file"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Message sent"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Message size exceeded"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d attachments available. Select up to %d attachments"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Server not responding"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Unable to attach all files. Maximum attachment capacity %d KB. Continue?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Unable to send MMS. Unrecognised error"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Calendar sync"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Font size"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Without attachments"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Entire email"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Creation mode"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Message delivered"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimedia message"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "New voicemail"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "No subject"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Yes to all"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Service centre"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Service loading"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Sound"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Unable to send. Unsupported file types attached"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Conversation list"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Select address"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Move to SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "You are about to go online(%s). Continue?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS retrieving failed"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "No recipient"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Required"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Save in Drafts?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Maximum message size exceeded. Resizing..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Synchronisation cancelled"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Resend"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Add channel"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Invalid recipient"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Invalid recipients"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Unable to play during call"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Unable to save while in Mass storage mode"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Unable to open while in Mass storage mode"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Unable to use while in Mass storage mode"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Discard current message?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Selected"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Selected"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Delete?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Resizing..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Unable to attach. Maximum size of files is %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Restricted"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Unable to forward.\nFile is forward locked"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Scheduled message"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Security policy restricts composing of text messages"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Adding. Please wait..."
+
diff --git a/main/po/es_ES.po b/main/po/es_ES.po
new file mode 100755 (executable)
index 0000000..33f395b
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "No se puede abrir"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Recuperar"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "No se puede mover"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "No solicitado"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Se ha alcanzado el número máximo de páginas"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Solicitado"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Modo restringido. No se puede insertar contenido restringido"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Entregado"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Caducado"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Leído"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Recuperando..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Error al recuperar"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Inserte una tarjeta SIM para enviar mensajes. El mensaje se guardará en la Bandeja de salida"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d idiomas"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Dirección de centro"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Duplicado"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Introducir nombre de canal"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Introducir número de canal"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "No se ha seleccionado nada"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d canales"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "ID de canal ya existente"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Error al enviar. Vuelva a intentarlo?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Lista de ID de canales llena"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 mensaje seleccionado"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 persona seleccionada"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d mensajes seleccionados"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d personas seleccionadas"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Vista previa"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "El nombre del archivo ya existe"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "No hay mensajes"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Crear mensaje"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Añadir a contacto"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Crear dirección"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Bloq lista"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Pulse para añadir un número"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Crear canal"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Descartar"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Imposible enviar mensaje"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Contactos"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Hacer foto"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Sin dirección"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Tono de alerta"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Permitir publicidad"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Permitir anónimos"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Lista de elementos adjuntos"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Descarga automática"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Automática"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Eliminación automática"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Color de fondo"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Bloquear mensajes"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Mensajes de difusión"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Activación"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Mis canales"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Recibiendo canales"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centro %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Personalizar hora"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Estilo predeterminado"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Informe de entrega"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Error al enviar"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Cada 10 minutos"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Cada 2 minutos"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Cada 5 minutos"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Color de fuente"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "De"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Ajustes generales"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "Alfabeto GSM"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Mantenga presionada la tecla '1' para conectarse al servidor de correo de voz cuando no se encuentre en una aplicación o en el curso de una llamada"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Lista de elementos insertada"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Idiomas"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Máximo"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Número de buzón de voz"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Mensaje entregado"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Mensaje recuperado"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Libre"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Aviso"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Enviado"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "No hay restricciones de tamaño ni contenido"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Se le notificará cuando el tamaño y el contenido superen el máximo permitido"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Fax"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Voz"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Mensajes push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Informe de lectura"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Recibido"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manual"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Rechazar"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Opciones de recepción"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Ruta de respuesta"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Solicitar informe de envío"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Solicitar inf. de lectura"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Restringido"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Enviando..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 días"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Baja"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgente"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Opciones de envío"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Caducidad"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioridad"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Enviar informe de entrega"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Enviar informe de lectura"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Tipo de servicio"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Dirección"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Exactamente igual a"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Incluir"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Coincidir criterios"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Una vez"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Duración de página"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Compatibilidad de caracteres"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Texto"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Mensajes de emergencia"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Mensajes de texto"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Tamaño total"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Contenido de DRM"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Editar canal"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Lista de elementos"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "Segundos"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 segundos"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 segundos"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 segundos"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Red nacional"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instalar"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Red en extranjero"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Diapositiva"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Estilo de fuente"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Ver detalles del contacto"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Mensaje multimedia enviado"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Error al recuperar mensaje"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Error al enviar mensaje multimedia"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "Puede enviar una imagen de hasta %d KB"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Tarjeta de visita"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Sin nombre"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Bienvenido"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Reenv."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "No leídos"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Mover a teléfono"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Añadir texto"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Destinatario duplicado"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Tamaño máximo de creación"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Alcanzado el número máximo de destinatarios (%d)"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Toque para añadir asunto"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Grupos"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Contactos"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Otros archivos"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Sonido"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Añadir multimedia"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "Desactivar"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "Activar"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Para"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Grabar sonido"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Grabar sonido"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Grabar vídeo"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Plantilla de texto"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Cambiado a MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Cambiado a SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Introducir dirección"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Archivo no válido"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Mensaje enviado"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Tamaño máximo de mensaje superado"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d adjuntos disponibles. Seleccione hasta %d adjuntos"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "El servidor no responde"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "No se pueden adjuntar todos los archivos. Se pueden adjuntar como máximo %d KB. ¿Continuar?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "No se puede enviar MMS. Error no reconocido"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Sincr. de calendario"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Tamaño de fuente"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Sin archivos adjuntos"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Correo electrónico completo"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Modo de creación"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Mensaje entregado"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Mensaje multimedia"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Nuevo correo de voz"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Sin asunto"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Sí a todo"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centro de servicios"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Cargando servicio"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Sonido"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "No se puede enviar. Tipos de archivos adjuntos no admitidos"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Lista de conversaciones"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Seleccionar dirección"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Mover a SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Está a punto de conectarse(%s). ¿Continuar?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "Error en recuperación MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "No hay destinatario"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Necesario"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "¿Guardar en Borradores?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Tamaño máximo de mensaje superado. Cambiando tamaño..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Sincronización cancelada"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Reenviar"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Añadir canal"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Destinatario no válido"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Destinatarios no válidos"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "No se puede reproducir durante la llamada"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "No se puede guardar en modo de almacenamiento masivo"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "No se puede abrir en modo de almacenamiento masivo"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "No se puede utilizar en modo de almacenamiento masivo"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "¿Descartar mensaje actual?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Seleccionado"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Seleccionado"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "¿Eliminar?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Ajustando tamaño..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "No se puede adjuntar. El tamaño máximo de archivos es de %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Restringido"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "No se puede reenviar.\nEl archivo está bloqueado contra reenvíos"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Mensaje programado"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "La política de seguridad restringe la redacción de mensajes de texto"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Añadiendo. Espere..."
+
diff --git a/main/po/fr_FR.po b/main/po/fr_FR.po
new file mode 100755 (executable)
index 0000000..350d3c3
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Ouverture impossible"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Récupérer"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Déplacement impossible"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Non demandé"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Nombre maximum de pages atteint"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Demandé"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Mode restreint. Impossible d'insérer un contenu restreint"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Reçu"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Date d'expiration révolue"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Lu"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Récupération..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Echec de la récupération"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Insérez une carte SIM pour envoyer des messages. Le message sera enregistré dans la boîte d'envoi"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d langues"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Numéro de messagerie"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Nom déjà existant"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Saisir le nom de la station"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Entrez numéro de chaîne"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Aucune sélection"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d canaux"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Un ID de station identique existe déjà"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Echec de l'envoi. Réessayez ultérieurement?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Liste d'ID de canaux saturée"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 message sélectionné"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 personne sélectionnée"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d messages sélectionnés"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d personnes sélectionnées"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Aperçu"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Nom de fichier déjà utilisé"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Aucun message"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Créer un message"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Ajouter aux contacts"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Créer adresse"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Liste bloquée"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Appuyez pour ajouter le numéro"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Créer chaîne"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Ne pas enregistrer"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Impossible d'envoyer le message"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Contacts"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Prendre une photo"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Aucune adresse"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Sonnerie d'alerte"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Autoriser la publicité"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Autoriser n° inconnu"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Liste d'éléments jointe"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Téléchargement auto."
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Automatique"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Suppression auto."
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Couleur d'arrière-plan"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Bloquer les messages"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Messages de diffusion"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Activation"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Mes canaux"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Canaux de réception"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centre %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Durée personnalisée"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Style par défaut"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Accusé de réception"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Echec de l'envoi"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Toutes les 10 min"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Toutes les 2 min"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Toutes les 5 min"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Couleur de la police"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "De"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Paramètres généraux"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "Alphabet GSM"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Maintenir la touche 1 enfoncée pour accéder à la messagerie vocale lorsqu'aucune application n'est ouverte ou qu'aucun appel n'est en cours"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Liste d'éléments insérée"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Langues"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Maximum"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "N° de messagerie vocale"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Message remis"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Message reçu"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Libre"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Avertissement"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Envoyé(s)"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Aucune restriction de taille et de contenu"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Vous serez informé lorsque vous aurez atteint les limites de taille et de contenu"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "O"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "Ko"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Fax"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Vocal"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Messages Push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Confirmation de lecture"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Reçu(s)"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuel"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Refuser"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Options de réception"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Chemin de réponse"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Accusé de réception"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Confirmation de lecture"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Limité"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Envoi..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 jours"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Faible"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normale"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgent"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Options d'envoi"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Expiration"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Priorité"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Accusé de réception"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Confirmation de lecture"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Type de service"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Adresse"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Identique à"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Inclure"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Critères correspondants"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Une fois"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Temps de défilement des pages"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Type d'alphabet"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Texte"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Messages SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Taille totale"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Contenu DRM"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Modifier les chaînes"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Sélection"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "secondes"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 secondes"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 secondes"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 secondes"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Réseau domestique"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Installer"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Réseau d'itinérance"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Défilement"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Police"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Afficher les détails du contact"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS envoyé"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Echec de la récupération du message"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Echec envoi MMS"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "Vous pouvez envoyer une image de %d Ko maximum"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Carte de visite"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Aucun nom"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Bienvenue"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Transf."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Non lu"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Déplacer vers le téléphone"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Ajouter texte"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Destinataire en double"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Taille de création maximale autorisée"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Nombre maximum de destinataires (%d) atteint"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Ajouter objet"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Groupes"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Répertoire"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Autres fichiers"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Son"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Ajouter multimédia"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "Désactivé"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "Activé"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "A"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Enregistrer un mémo"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Enregistrer un mémo"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Enregistrer une vidéo"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Modèle SMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Modifié en MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Modifié en SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Saisir une adresse"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Fichier non valide"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Message envoyé"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Taille de message max. dépassée"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d pièces jointes disponibles. Sélectionnez-en %d au maximum"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Pas de réponse du serveur"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Impossible de joindre tous les fichiers. La taille maximale des pièces jointes est de %d Ko. Continuer ?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Envoi MMS impossible. Erreur non reconnue"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Synchro. des calendriers"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Taille de la police"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Sans pièce jointe"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "E-mail entier"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Mode de création"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Message remis"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Nouveau message vocal"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Aucun objet"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Oui à tout"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centre de service"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Chargement du service"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Son"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Envoi impossible. Les types de fichiers joints ne sont pas pris en charge"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Liste de conversations"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Sélectionner l'adresse"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Déplacer vers la carte SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Connexion imminente (%s). Continuer ?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "Echec récupération MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Pas de destinataire"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Requis"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Enregistrer dans Brouillons ?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "La taille du message dépasse la limite autorisée. Redimensionnement..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Synchronisation annulée"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Renvoyer"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Ajouter un canal"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Destinataire non valide"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Destinataires non valides"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Lecture impossible pendant un appel"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossible d'enregistrer en mode Stockage de masse"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossible d'ouvrir en mode Stockage de masse"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Utilisation impossible en mode Stockage de masse"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Ignorer le message actuel ?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Sélectionné"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Sélectionné"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Supprimer ?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Redimensionnement..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Impossible d'ajouter la pièce jointe. La taille maximale des fichiers est de %d Ko"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Limité"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Transfert impossible.\nLe transfert du fichier est interdit"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Message programmé"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "La politique de sécurité limite la création de SMS"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Ajout. Veuillez patienter..."
+
diff --git a/main/po/it_IT.po b/main/po/it_IT.po
new file mode 100755 (executable)
index 0000000..9f3fcc6
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Impossibile aprire"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Recupera"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Impossibile spostare"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Non richiesto"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Raggiunto numero massimo di pagine"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Richiesto"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Modalità limitata. Impossibile inserire contenuto limitato"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Consegnato"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Scaduta"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Letto"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Recupero..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Errore recupero"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Inserire una scheda SIM per inviare messaggi. Il messaggio verrà salvato in In uscita"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d lingue"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Numero"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Duplicato"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Inserisci nome canale"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Inserire numero canale"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Nessun elemento selezionato"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d canali"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Esiste già lo stesso ID canale"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Invio non eseguito. Riprovare?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Elenco ID canale pieno"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 messaggio selezionato"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 persona selezionata"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d messaggi selezionati"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d persone selezionate"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Anteprima"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Nome file già in uso"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Nessun messaggio"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Crea messaggio"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Aggiungi a contatto"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Crea indirizzo"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Elenco bloccati"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Toccare per aggiungere il numero"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Crea canale"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Elimina"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Impossibile inviare messaggio"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Rubrica"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Scatta foto"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Nessun indirizzo"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Tono avviso"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Consenti pubblicità"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Consenti anonimi"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Elenco elementi allegati"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Download automatico"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Automatica"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Eliminazione automatica"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Colore sfondo"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Blocca messaggi"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Messaggi broadcast"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Attivazione"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Canali personali"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Ricezione canali"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centro %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Ora personalizzata"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Stile predefinito"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Rapporto consegna"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Invio non riuscito"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Ogni 10 minuti"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Ogni 2 minuti"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Ogni 5 minuti"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Colore carattere"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Da"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Generali"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "Alfabeto GSM"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Tenere premuto il tasto '1' per connettersi al server della segreteria telefonica mentre non è in esecuzione un'applicazione o in corso una chiamata"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Elenco elementi inseriti"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Lingue"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Massimo"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Numero segreteria telefonica"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Messaggio consegnato"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Messaggio recuperato"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Libera"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Avviso"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Inviato"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Nessuna restrizione per dimensioni e contenuto"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Verrà ricevuta una notifica in caso di superamento del limite massimo per dimensioni e contenuto"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Fax"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Voce"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Messaggi Push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Conferma lettura"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Ricevuto"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuale"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Rifiuta"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Opzioni di ricezione"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Percorso risposta"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Chiedi conferma consegna"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Conferma lettura"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Con restrizioni"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Invio..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 giorni"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Bassa"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normale"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgente"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Opzioni di invio"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Scadenza"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Priorità"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Invia conferma consegna"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Invia conferma lettura"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Tipo di servizio"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Indirizzo"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Esattamente uguale a"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Contiene"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Criteri corrispondenza"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Una volta"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Durata pagina"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Caratteri supportati"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Testo"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Messaggi SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Dimensione totale"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Contenuto DRM"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Modifica canale"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Elenco elementi"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "secondi"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 secondi"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 secondi"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 secondi"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Propria rete"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Installa"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Rete roaming"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Scorrimento"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Stile caratteri"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Visualizza dettagli contatto"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS inviato"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Impossibile recuperare messaggio"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Invio MMS non eseguito"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "È possibile inviare immagini fino a %d KB"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Biglietto da visita"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Nessun nome"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Benvenuto"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Inoltra"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Non letto"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Sposta nel telefono"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Aggiungi testo"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Destinatario duplicato"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Dimensioni massime creazione"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Raggiunto numero massimo di destinatari (%d)"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Aggiungi oggetto"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Gruppi"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Rubrica"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Altri file"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Suono"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Aggiungi file multimediale"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "DISATTIVO"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "ATTIVO"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "A"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Registra suono"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Registra suono"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Registra video"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Modello di testo"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Cambiato in MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Cambiato in SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Inserisci indirizzo"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "File non valido"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Messaggio inviato"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Superate dimensioni massime messaggio"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d allegati disponibili. Selezionare fino a %d allegati"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Il server non risponde."
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Impossibile allegare tutti i file. Capacità massima allegati %d KB. Continuare?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Impossibile inviare MMS. Errore non riconosciuto"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Sincronizza agenda"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Dimensioni carattere"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Senza allegati"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Intera e-mail"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Modalità creazione"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Messaggio consegnato"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Nuovo messaggio vocale"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Nessun oggetto"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Sì a tutti"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centro servizi"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Caricamento servizio"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Suono"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Impossibile inviare. Tipi file non supportati"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Elenco conversazioni"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Seleziona indirizzo"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Sposta in SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Connessione in corso(%s). Continuare?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "Recupero MMS fallito"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Nessun destinatario"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Richiesto"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Salvare in Bozze?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Superate dimensioni max. messaggio. Ridimensionamento..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Sincronizzazione annullata"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Invia di nuovo"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Aggiungi canale"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Destinatario non valido"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Destinatari non validi"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Impossibile riprodurre durante una chiamata"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossibile salvare in modalità Archiviazione di massa"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossibile aprire in modalità Archiviazione di massa"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossibile utilizzare in modalità Archiviazione di massa"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Eliminare messaggio corrente?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Selezionato"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Selezionato"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Eliminare?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Ridimensionamento..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Impossibile allegare. Dimensioni massime file %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Con restrizioni"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Impossibile inoltrare.\nFile bloccato per l'inoltro"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Messaggio programmato"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "I criteri di protezione limitano la composizione degli SMS"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Aggiunta. Attendere..."
+
diff --git a/main/po/ja_JP.po b/main/po/ja_JP.po
new file mode 100755 (executable)
index 0000000..7458d55
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "開け​ません"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "受信"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "移動​でき​ません。"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "要求しませんでした。"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "最大​ページ数​に​なりました"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "要求しました。"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "制限​モード​です。​制限​された​内容​を​挿入​できません"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "配信完了"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "期限切れ"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "既読"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "受信中..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "受信​できません​でした"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "SIM​カード​を​挿入​して​メッセージ​を​送信​します。​メッセージ​は​送信BOXに​保存​され​ます"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d言語​です"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "センター​アドレス"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "重複​しています"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "チャンネル名を​入力​"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "チャンネル番号を入力"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "何も​選択​されて​いません"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d​チャンネル"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "同じ​チャンネル​ID​が存在します"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "送信​に​失敗​しました。​やり直し​ますか?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "チャンネル​ID​リスト​は​いっぱい​です"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1件​の​メッセージ​を​選択​しました"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1人​選択​しました"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d件のメッセージを選択しました。"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d人​選択​しました"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "プレビュー"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "ファイル名が既にあります。"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "メッセージがありません。"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "メッセージ作成"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "電話帳に追加"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "アドレス​を​作成​"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "ブロックリスト"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "タップ​して​番号​を​追加​します"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "チャンネル​作成"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "破棄"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "メッセージ​を​送信​でき​ません"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "電話帳"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "カメラを起動"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "アドレスはありません"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "アラート​音"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "広告を​許可"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "匿名​を​許可​"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "添付​リスト"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "自動​受信"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "自動"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "メール自動消去"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "背景色"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "メッセージをブロック"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "放送​メッセージ"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "アクティベーション"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "マイチャンネル"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "受信​チャンネル"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "センター​%d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "時間​設定"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "標準​スタイル"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "配信​確認"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "送信に失敗しました。"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "10分ごと"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "2分ごと"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "5分ごと"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "文字カラー"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "送信元"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "基本設定"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM alphabet"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "アプリケーション​の​未使用中​または​通話中​に​‘1’​キー​を​押した​ままに​すると、​留守番​電話​サーバー​に​接続​され​ます"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "挿入​アイテム​リスト"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "言語"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "最大"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "留守番​電話​番号"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "メッセージ​が​配信​されました"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "メッセージ​を​受信​しました"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "フリー"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "警告"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "送信履歴"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "サイズ​および​コンテンツ​制約​は​ありません"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "サイズ​と​コンテンツ​が​最大​許可値​を​超えた​場合は​通知​され​ます"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "FAX"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "音声"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "プッシュ​メッセージ"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "レポート​を​読む"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "受信完了"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "手動で選択"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "拒否"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "受信​オプション"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "返信パス"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "配信​レポート​を​要求​"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "既読​レポート​を​要求​"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "制限されました。"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "送信中..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2日"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "低"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "標準"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "高"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "送信オプション"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "有効期限"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "優先度"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "配信​レポート​を​送信​"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "既読​レポート​を​送信​"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "サービス​タイプ"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "アドレス"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "完全一致"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "内容"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "振り分けルール"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "1回のみ"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "ページ​間隔"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "文字​コード"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "テキスト"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOSメッセージ"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "合計​の​サイズ"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM​コンテンツ"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "チャンネルを​編集​"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "アイテム​リスト"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "秒"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10秒"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2秒"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5秒"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "ホーム​ネットワーク"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "インストール"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "外部ネットワーク"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "スライド"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "フォント​スタイル"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "連絡先​詳細​を​表示"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "マルチメディア​メッセージ​が​送信​され​ました"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "メッセージ​の​受信​に​失敗​しました"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "マルチ​メディア​メッセージ​の​送信​に​失敗​しました"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "最大%dKB​まで​画像​を​送信​できます"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "名刺"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "名前なし"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "ようこそ"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "転送"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "未読"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "本体に移動"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "本文を入力"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "宛先​が​重複​して​います。"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "メール作成サイズ"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "宛先が最大件数(%d)に達しました。"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "​件名​を​追加​"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "グループ"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "電話帳"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "その他​のファイル"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "サウンド"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "マルチメディア​を​追加​"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "OFF"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "ON"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "宛先"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "ボイスレコーダー起動"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "ボイスレコーダー起動"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "ビデオカメラ起動"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "定型文"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "MMS​に​変更​しました"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "SMS​に​変更​しました"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "アドレス入力"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "ファイルが不正です"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "メッセージ​が​送信​され​ました"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "メッセージ​サイズ​を​超え​ました"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "あと<n>件 追加できます。最大%d件まで添付可能です"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "サーバー​から​応答​が​あり​ません"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "全てのファイルを添付できません。 最大添付サイズは%dKBです。 続行しますか?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "MMS​を​送信​でき​ません。​認識​されて​いない​エラー​です"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "カレンダー​同期"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "文字サイズ"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "添付​なし"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Eメール全体"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "作成​モード"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "メッセージ​が​配信​されました"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "マルチメディア​メッセージ"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "新しい​留守番電話"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "件名なし"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "全て​に​はい"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "サービス​センター"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "サービス​読込"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "サウンド"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "送信できません。未対応のファイルが添付されています。"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "会話​リスト"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "アドレスの選択"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "SIMに移動"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "オンライン​しようと​して​います​(%s)。​続行しますか?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS retrieving failed"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "受信者が​ありません"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "必要"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "下書きに保存しますか?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "メッセージの最大サイズを超えました。サイズ変更中..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "同期​が​キャンセル​され​ました"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "再送信"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "チャンネルを追加"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "宛先​が​無効​です"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "無効な宛先"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通話中​に​再生​できません。"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "マスストレージモード中​に​保存​する​ことは​できません。"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "マスストレージモード中​に​開く​ことは​できません。"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "マスストレージモード中​に​使用​する​ことは​できません。"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "現在​の​メッセージ​を​破棄​しますか​?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "1件"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "選択しました。"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "削除しますか?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "リサイズ中…"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "添付できません。ファイルの最大サイズは%dKBです。"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "制限されました。"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "転送​できません。​\nファイル​転送​は​ロック​されて​います"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "予約メッセージ"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "SMSの作成は、セキュリティポリシーによって制限されています。"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "追加中​です。​しばらく​お待ち​ください..."
+
diff --git a/main/po/ko_KR.po b/main/po/ko_KR.po
new file mode 100755 (executable)
index 0000000..1ef07d6
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "열 수 없습니다"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "본문 받기"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "이동시킬 수 없습니다"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "요청되지 않았습니다"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "최대 페이지 수를 초과하였습니다"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "요청되었습니다"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "제한 모드입니다. 제한된 컨텐츠는 삽입할 수 없습니다"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "전송되었습니다"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "기한이 만료되었습니다"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "읽기"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "가져오는 중..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "불러오지 못하였습니다"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "메시지를 전송하기 위해서는 사용 가능한 USIM 카드를 넣으세요. 전송되지 못한 메시지는 발신대기함에 저장됩니다"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d개 언어"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "메시지 서버 주소"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "같은 번호가 있습니다"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "채널 이름을 입력하세요"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "채널 번호를 입력하세요"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "선택된 것이 없습니다"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d 채널"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "같은 채널 ID가 있습니다"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "전송하지 못하였습니다. 다시 시도할까요?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "채널 ID 목록이 가득 찼습니다"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1개의 메시지가 선택되었습니다"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1명이 선택되었습니다"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d개의 메시지가 선택되었습니다"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d명이 선택되었습니다"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "미리보기"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "사용 중인 이름입니다"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "메시지가 없습니다"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "메시지 작성"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "연락처에 추가"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "주소 추가"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "차단 목록"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "전화번호를 추가하려면 누르세요"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "채널 추가"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "취소"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "메시지를 전송할 수 없습니다"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "연락처"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "사진 촬영"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "저장된 주소가 없습니다"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "알림음"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "광고 수신"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "익명 메시지 수신"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "첨부파일 목록"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "자동 다운로드"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "자동"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "자동 삭제"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "배경색"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "스팸 메시지 차단"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "방송 메시지"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "실행"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "내 채널"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "수신 채널"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "센터%d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "사용자 설정 시간"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "메시지 속성"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "수신 확인"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "전송하지 못하였습니다"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "10분마다"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "2분마다"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "5분마다"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "색깔"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "발신"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "일반 설정"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM 알파벳"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "음성사서함에 연결하려면 애플리케이션을 사용하지 않을 때나 통화 중이 아닐 때 1번 버튼을 길게 누르세요"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "첨부파일 목록"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "언어"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "최대"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "음성사서함 번호"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "메시지가 전달되었습니다"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "메시지를 수신하였습니다"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "사용 가능"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "경고"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "전송되었습니다"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "메시지와 첨부파일의 용량이 제한되어 있지 않습니다"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "메시지와 첨부파일의 용량이 허용 범위를 초과할 경우 알립니다"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "팩스"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "음성 메시지"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "푸시 메시지"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "읽음 확인 메시지"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "수신하였습니다"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "수동"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "거절"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "수신 옵션"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "회신 경로"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "수신 확인"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "읽음 확인"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "제한"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "전송 중..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2일"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "낮음"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "보통"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "긴급"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "전송 옵션"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "만료일"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "중요도"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "수신 확인 메시지 전송"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "읽음 확인 설정"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "서비스 형식"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "주소"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "입력 내용과 일치"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "포함"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "적용 기준"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "한 번만"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "페이지 표시 시간"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "지원문자 형식"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "문자"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS메시지"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "문자 메시지"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "총 크기"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "유니코드"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM 컨텐츠"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "채널 편집"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "항목 목록"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "초"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10초"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2초"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5초"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "홈 네트워크"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "설치"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "로밍 네트워크"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "슬라이드"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "글자 효과"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "연락처 상세정보 보기"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "전송되었습니다"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "메시지를 가져오지 못하였습니다"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "MMS를 전송하지 못하였습니다"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "%dKB까지 이미지를 전송할 수 있습니다"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "내 연락처"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "이름이 없습니다"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "환영합니다"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "전달"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "읽지 않음"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "휴대폰으로 이동"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "텍스트 추가"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "수신인이 중복 입력되었습니다"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "최대 작성 크기"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "추가할 수 있는 수신인(%d명)을 초과하였습니다"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "제목을 입력하려면 누르세요"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "그룹"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "연락처"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "기타"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "사운드"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "파일 추가"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "끄기"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "켜기"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "수신인"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "음성녹음"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "음성녹음"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "동영상 촬영"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "상용구"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "MMS로 전환되었습니다"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "문자 메시지로 변경되었습니다"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "주소를 입력하세요"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "사용할 수 없는 파일입니다"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "메시지가 전송되었습니다"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "전송 가능한 메시지 크기가 초과되었습니다"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "첨부파일 %d개가 있습니다. %d개까지 선택할 수 있습니다"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "서버가 응답하지 않습니다"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "모든 파일을 첨부할 수 없습니다. 첨부할 수 있는 최대 파일 용량은 %dKB입니다. 계속할까요?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "알 수 없는 오류가 발생하였습니다. MMS를 전송할 수 없습니다"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "일정 동기화"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "글자 크기"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "첨부파일 제외"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "전체 이메일"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "작성 모드"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "메시지가 전달되었습니다"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "새 음성 메시지"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "제목이 없습니다"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "모두에게 알림"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "서비스 센터"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "서비스 불러오기"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "소리"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "전송할 수 없습니다. 지원되지 않는 파일 형식이 첨부되었습니다"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "대화 목록"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "주소를 선택하세요"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "SIM으로 이동"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "%s에 접속합니다. 계속할까요?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS retrieving failed"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "수신인이 없습니다"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "요청되었습니다"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "임시보관함에 저장할까요?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "전송 가능한 메시지 크기를 초과하였습니다. 크기 조절 중..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "동기화가 취소되었습니다"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "재전송"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "채널 추가"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "수신인이 바르지 않습니다"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "수신인이 바르지 않습니다"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "통화 중에는 재생할 수 없습니다"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "대용량 저장소 모드를 실행 중일 때는 저장할 수 없습니다"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "대용량 저장소 모드를 실행 중일 때는 열 수 없습니다"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "대용량 저장소 모드를 실행 중일 때는 사용할 수 없습니다"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "현재 메시지를 삭제할까요?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "단일 선택"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "선택되었습니다"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "삭제할까요?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "크기 조절 중..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "첨부할 수 없습니다. 첨부할 수 있는 파일 크기는 %dKB까지 입니다"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "제한"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "전달할 수 없습니다.\n전달 잠금이 설정되어 있습니다"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "예약 전송"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "보안 정책에 따라 문자 메시지 작성이 제한됩니다"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "추가 중... 잠시만 기다리세요"
+
diff --git a/main/po/nl_NL.po b/main/po/nl_NL.po
new file mode 100755 (executable)
index 0000000..90f0eda
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Openen niet mogelijk"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Ophalen"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Kan niet verplaatsen"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Niet aangevraagd"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Maximumaantal pagina's bereikt"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Aangevraagd"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Beperkte modus. Kan inhoud met restricties niet invoegen"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Afgeleverd"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Verlopen"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Gelezen"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Ophalen..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Ophalen mislukt"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Plaats een SIM-kaart om berichten te verzenden. Het bericht wordt opgeslagen in het Postvak UIT"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d talen"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Adres centrale"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Gedupliceerd"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Zendernaam invoeren"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Kanaalnummer invoeren"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Niets geselecteerd"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d zenders"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Zelfde zenderinfo bestaat"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Verzenden mislukt. Opnieuw?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Lijst met kanaal-id's vol"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 bericht geselecteerd"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 persoon geselecteerd"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d berichten geselecteerd"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d personen geselecteerd"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Voorbeeld"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Bestandsnaam bestaat al"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Geen berichten"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Bericht maken"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Toevoegen aan contactpersoon"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Portugees"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Adres maken"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Blokkeerlijst"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Tikken om nummer toe te voegen"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Zender maken"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Verwijderen"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Kan bericht niet verzenden"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Contacten"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Foto maken"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Geen adres"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Waarschuwingstoon"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Reclame toestaan"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Anoniem toestaan"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Lijst met bijgevoegde items"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatisch downloaden"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Automatisch"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Automatisch verwijderen"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Achtergrondkleur"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Berichten blokkeren"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Infoberichten"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Inschakelen"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Mijn kanalen"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Ontvangstkanalen"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centrale %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Aangepast tijdstip"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Standaardstijl"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Ontvangstbevestiging"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Verzenden mislukt"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Om de 10 minuten"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Om de 2 minuten"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Om de 5 minuten"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Letterkleur"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Van"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Algemene instellingen"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM-alfabet"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Houd de toets '1' ingedrukt om verbinding te maken met de voicemailserver wanneer u niet een applicatie hebt geopend of in gesprek bent"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Lijst met ingevoegde items"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Talen"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Maximum"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Voicemailnummer"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Bericht afgeleverd"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Bericht opgehaald"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Vrij"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Waarschuwing"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Verzonden"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Geen beperkingen voor grootte en inhoud"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "U krijgt een melding wanneer grootte en inhoud de maximumgrens overschrijden"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Fax"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Spraak"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Serverberichten"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Leesbevestiging"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Ontvangen"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Handmatig"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Weigeren"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Ontvangstopties"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Antwoordpad"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Ontvangstbevestiging vragen"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Leesbevestiging vragen"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Beperkt"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Verzenden..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 dagen"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Laag"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normaal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Dringend"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Verzendopties"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Vervaldatum"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioriteit"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Ontvangstbevestiging verzenden"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Leesbevestiging verzenden"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Servicetype"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Adres"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Precies gelijk aan"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Invoegen"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Blokkeringscriteria"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Eenmalig"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Weergavetijd pagina"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Ondersteunde tekenset"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Tekst"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS-berichten"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS-berichten"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Totale omvang"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM-inhoud"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Zender bewerken"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Itemlijst"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "seconden"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 seconden"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 seconden"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 seconden"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Netwerk eigen provider"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Installeren"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Roamingnetwerk"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Pictogram"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Letterstijl"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Contactgegevens weergeven"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS-bericht verzonden"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Ophalen bericht mislukt"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Verzenden MMS mislukt"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "U kunt afbeeldingen tot %d KB verzenden"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Naamkaartje"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Geen naam"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Welkom"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Doorst."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Niet gelezen"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Verplaatsen naar telefoon"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Tekst toevoegen"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Dubbele ontvanger"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Maximumgrootte maken"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Maximumaantal ontvangers (%d) bereikt"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Tik om onderwerp toe te voegen"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Groepen"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Telefoonlijst"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Overige bestanden"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Geluid"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Multimedia toevoegen"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "UIT"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "AAN"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Aan"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Geluid opnemen"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Geluid opnemen"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Video opnemen"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Standaard SMS-berichten"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Gewijzigd in MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Gewijzigd in SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Adres invoeren"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Ongeldig bestand"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Bericht verzonden"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Maximale berichtgrootte overschreden"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d bijlagen beschikbaar. Selecteer maximaal %d bijlagen"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Server reageert niet"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Kan niet alle bestanden toevoegen. Maximumcapaciteit voor bijlagen is %d KB. Doorgaan?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Kan MMS niet verzenden. Onbekende fout"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Agenda synchroniseren"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Tekstgrootte"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Zonder bijlagen"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Volledige e-mail"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Aanmaakmodus"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Bericht afgeleverd"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS-bericht"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Nieuwe voicemail"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Geen onderwerp"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Ja op alles"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "SMS-centrale"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Service laden"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Geluid"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Kan niet verzenden. Niet-ondersteunde bestanden aangehecht."
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Gesprekslijst"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Adres selecteren"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Verplaatsen naar SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "U gaat bijna online (%s). Doorgaan?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "Ophalen MMS mislukt"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Geen ontvanger"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Vereist"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Opslaan in Concepten?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Berichtgrootte overschreden. Grootte wordt gewijzigd..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Synchronisatie geannuleerd"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Opnieuw verzenden"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Kanaal toevoegen"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Ongeldige ontvanger"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Ongeldige ontvangers"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Niet mogelijk tijdens gesprek"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Kan niet opslaan in massaopslag-modus"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Kan niet openen in massaopslag-modus"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Kan niet gebruiken in massaopslag-modus"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Huidig bericht verwijderen?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Geselecteerd"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Geselecteerd"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Verwijderen?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Grootte wordt gewijzigd..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Kan niet toevoegen. Maximumgrootte van bestanden is %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Beperkt"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Kan niet doorsturen.\nBestand is geblokkeerd voor doorsturen"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Gepland bericht"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Beveiligingsbeleid legt beperkingen op voor SMS-berichten"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Toevoegen. Even geduld..."
+
diff --git a/main/po/pt_PT.po b/main/po/pt_PT.po
new file mode 100755 (executable)
index 0000000..ac7a139
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Impossível abrir"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Receber"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Impossível mover"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Não pedido"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Número máximo de páginas atingido"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Pendente"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Modo restringido. Impossível inserir conteúdo restringido"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Entregue"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Expirado"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Ler"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "A receber..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Falha de recepção"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Insira um cartão SIM para enviar mensagens. A mensagem será guardada na Caixa de saída"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d idiomas"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Endereço do centro"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Duplicado"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Introduzir nome de canal"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Introduzir número de canal"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Nada seleccionado"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d canais"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Já existe ID de canal igual"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Falha ao enviar. Tente novamente?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Lista de ID de canais cheia"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 mensagem seleccionada"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 pessoa seleccionada"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d mensagens seleccionadas"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d pessoas seleccionadas"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Pré-visualizar"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Nome do ficheiro já existente"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Nenhuma mensagem"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Criar mensagem"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Adicionar a contacto"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Criar endereço"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Lista de bloqueios"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Tocar para adicionar número"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Criar canal"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Cancelar"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Impossível enviar mensagem"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Contactos"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Tirar fotografia"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Nenhum endereço"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Tom de alerta"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Permitir publicidade"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Permitir anón."
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Lista de itens anexados"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Transferência automática"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Automático"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Eliminação automática"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Cor de fundo"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Bloquear mensagens"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Mensagens de difusão"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Activação"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Os meus canais"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Recepção de canais"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centro %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Personalizar hora"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Estilo padrão"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Relatório de entrega"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Falha no envio"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Cada 10 minutos"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Cada 2 minutos"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Cada 5 minutos"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Cor do tipo de letra"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "De"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Defin. gerais"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "Alfabeto GSM"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Prima a tecla '1' sem soltar para ligar ao servidor de correio de voz quando não estiver numa aplicação ou numa chamada"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Lista de itens inseridos"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Idiomas"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Máximo"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Número do correio de voz"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Mensagem entregue"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Mensagem recebida"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Livre"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Aviso"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Enviada"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Sem restrições de tamanho e conteúdo"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Será notificado quando o tamanho e o conteúdo excederem o máximo permitido"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Fax"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Voz"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Mensagens push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Relatório de leitura"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Recebida"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manual"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Rejeitar"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Opções de recepção"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Caminho de resposta"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Pedir relatório de entrega"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Pedir relatório de leitura"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Restringido"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "A enviar..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 dias"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Baixa"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgente"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Opções de envio"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Expiração"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioridade"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Enviar relatório de entrega"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Enviar relatório de leitura"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Tipo de serviço"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Endereço"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Exactamente o mesmo que"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Incluir"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Corresponder critérios"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Uma vez"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Duração da página"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Suporte de caracteres"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Texto"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Mensagens SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Tamanho total"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Conteúdo DRM"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Editar canal"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Lista de itens"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "Segundos"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 segundos"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 segundos"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 segundos"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Rede local"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instalar"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Rede de roaming"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Slide"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Estilo do tipo de letra"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Ver detalhes do contacto"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS enviada"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Falha na recepção da mensagem"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Falha ao enviar mensagem multimédia"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "Pode enviar imagens até %d KB"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Cartão de visita"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Sem nome"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Bem-vindo"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Reenc."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Não lida"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Mover para o telefone"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Adicionar texto"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Destinatário duplicado"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Tamanho de criação máximo"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Número máximo de destinatários (%d) atingido"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Tocar para ad. assunto"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Grupos"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Lista telefónica"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Outros ficheiros"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Som"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Adicionar multimédia"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "DESLIGADO"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "LIGADO"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Para"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Gravar som"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Gravar som"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Gravar vídeo"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Modelo do texto"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Alterado para MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Alterado para SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Introduzir endereço"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Ficheiro inválido"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Mensagem enviada"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Tamanho máx. de mensagem excedido"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d anexos disponíveis. Seleccione até %d anexos"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "O servidor não responde"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Impossível anexar todos os ficheiros. Capacidade máxima para anexos %d KB. Continuar?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Impossível enviar MMS. Erro não reconhecido"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Sincronização da agenda"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Tamanho da fonte"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Sem anexos"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "E-mail completo"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Modo de criação"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Mensagem entregue"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Novo correio de voz"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Sem assunto"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Sim para todos"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centro de serviço"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "A carregar serviço"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Som"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Impossível enviar. Tipos de ficheiro não suportados anexados"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Lista de conversações"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Seleccionar endereço"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Mover para o SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Está prestes a ficar online (%s). Continuar?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "Falha ao recuperar MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Nenhum destinatário"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Necessário"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Guardar nos Rascunhos?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Tamanho máx. de mensagem excedido. A redimensionar..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Sincronização cancelada"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Reenviar"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Adicionar canal"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Destinatário inválido"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Destinatários inválidos"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Impossível jogar durante chamada"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossível guardar durante o modo de armazenamento de massa"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossível abrir durante modo de armazenamento de massa"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Impossível utilizar durante modo de armazenamento de massa"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Eliminar mensagem actual?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Seleccionado"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Seleccionado"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Eliminar?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "A redimensionar..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Impossível anexar. O tamanho máximo dos ficheiros é %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Restringido"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Impossível reencaminhar.\nO ficheiro tem o reencaminhamento bloqueado"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Mensagem programada"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "A política de segurança restringe a redacção de mensagens de texto"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "A adicionar. Aguarde por favor..."
+
diff --git a/main/po/ru_RU.po b/main/po/ru_RU.po
new file mode 100755 (executable)
index 0000000..9bc2ece
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Невозможно открыть"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Загрузить"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Невозможно переместить"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Не требуется"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Достигнуто максимальное число страниц"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Запрос отправлен"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Ограниченный режим. Невозможно вставить ограниченное содержимое"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Доставлено"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Срок действия уже закончен"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Прочитано"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Получение..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Сбой извлечения"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Для отправки сообщений установите SIM-карту. Сообщение будет сохранено в исходящих"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "Кол-во языков: %d"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Адрес центра"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Повторяется"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Введите имя канала"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Введите номер канала"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Ничего не выбрано"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d каналов(a)"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "ID канала уже существует"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Сбой отправки. Повторите попытку?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Список каналов заполнен"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Выбрано 1 сообщение"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "Выбран 1 человек"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Выбрано сообщений: %d"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "Выбрано людей: %d"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Просмотр"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Файл с таким именем уже существует"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Нет сообщений"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Создать сообщение"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Добавить к контакту"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Создать адрес"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Черный список"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Нажмите для добавления номера"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Создать канал"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Отменить"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Невозможно отправить сообщение"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Контакты"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Сделать фото"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Нет адреса"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Сигнал предупреждения"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Разрешить рекламу"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Разрешить анонимные"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Вложенные элементы"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Автозагрузка"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Автоматически"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Автоудаление"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Цвет фона"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Черный список"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Сообщения сети"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Активация"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Мои каналы"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Список каналов"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Центр %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Выбрать время"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Стиль по умолчанию"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Отчет о доставке"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Сбой при отправке"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Каждые 10 минут"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Каждые 2 минуты"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Каждые 5 минут"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Цвет шрифта"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "От"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Общие настройки"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM-алфавит"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Для подключения к серверу голосовой почты, нажмите и удерживайте клавишу '1' (при условии, что не открыты приложения и нет активных вызовов)"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Вставленные элементы"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Кол-во языков"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Максимум"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Голосовая почта"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Сообщение доставлено"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Сообщение получено"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Без ограничений"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Предупреждающий"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Отправлено"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Нет ограничений на размер и содержимое"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Оповещение о превышении максимально допустимого размера"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "б"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "Кб"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Факс"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Голос"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Push-сообщения"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Отчет о прочтении"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Получено"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Вручную"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Отказ"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Параметры приема"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Оплата ответа"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Отчет о доставке"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Отчет о прочтении"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Ограниченный"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Отправка..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 дня"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Низкий"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Обычный"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Высокий"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Параметры отправки"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Срок действия"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Приоритет"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "Отправить отчет о доставке"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Отправлять отчет о прочтении"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Тип контента"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Адрес"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Точное совпадение"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Содержит"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Условие совпадения"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "Один раз"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Длительность страницы"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Кодировка символов"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Текст"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS сообщения"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Общий размер"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Юникод"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Файлы DRM"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Изменить канал"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Список элементов"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "сек."
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 секунд"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 секунды"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 секунд"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Домашняя сеть"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Установить"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Роуминг"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Сдвиг"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Стиль шрифта"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Сведения о контакте"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS отправлено"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Сбой получения сообщения"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Сбой отправки сообщения MMS"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "Можно отправлять изображение размером до %d Кб"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Визитка"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "Нет имени"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Добро пожаловать"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Перес."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Непрочитанные"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Переместить на телефон"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Добавить текст"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Повторяющийся получатель"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Максимальный размер для создания"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Достигнуто максимальное число получателей (%d)"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Добавить тему"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Группы"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Контакты"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Другие файлы"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Звук"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Добавить медиа"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "Выключено"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "Включено"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Кому"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Записать звук"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Записать звук"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Записать видео"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Шаблоны SMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Изменено на MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Изменено на SMS"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Введите адрес"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Недопустимый файл"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Сообщение отправлено"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Размер сообщения превышен"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "Доступно вложений: %d. Выберите не более %d вложений"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Сервер не отвечает"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Невозможно вложить все файлы. Максимальный размер вложений — %d Кб. Продолжить?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "Невозможно отправить MMS. Неизвестная ошибка"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Синхронизация календаря"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Размер шрифта"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Без вложений"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Все сообщения электронной почты"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Режим создания"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Сообщение доставлено"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Новое сообщение голосовой почты"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Нет темы"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Да, все"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "SMS-центр"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Загрузка услуг"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Звук"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Не удалось отправить. Вложены файлы неподдерживаемого типа"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Список бесед"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Выберите адрес"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Переместить на SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Вы собираетесь выйти в сеть (%s). Продолжить?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "Сбой загрузки MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Нет получателя"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Требуется"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Сохранить в черновиках?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Превышен максимальный размер сообщения. Изменение размера..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Синхронизация отменена"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Отправить повторно"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Добавить канал"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Недопустимый получатель"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Недопустимые получатели"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Воспроизведение во время вызова невозможно"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Невозможно сохранить в режиме съемного диска"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Невозможно открыть в режиме съемного диска"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Невозможно использовать в режиме съемного диска"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Отметить текущее сообщение?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Выбранное"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Выбрано"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Удалить?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Изменение размера..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Невозможно вложить. Максимальный размер файлов: %d КБ"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Ограниченный"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Не удается переслать.\nПересылка файла заблокирована"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Отложенная отправка"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Политика безопасности ограничивает написание SMS"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Добавление. Подождите..."
+
diff --git a/main/po/tr_TR.po b/main/po/tr_TR.po
new file mode 100755 (executable)
index 0000000..6dc8a60
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Açılamıyor"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Al"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Taşınamıyor"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "Talep edilmedi"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Maksimum sayfa sayısına ulaşıldı"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "Talep edildi"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Kısıtlı mod. Kısıtlı içerik girilemedi"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "İletildi"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Sona erdi"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Oku"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Alınıyor..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "Alma başarısız"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Mesaj gönderebilmek için lütfen SIM kartını takın. Mesaj, Giden Kutusuna kaydedilecektir"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d dil"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "Merkez adresi"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "Tekrarlanan"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "Kanal adını girin"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Kanal numarası gir"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "Bir şey seçilmedi"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d kanal"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "Aynı kanal ID'si var"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "Gönderme başarısız. Yeniden deneyin?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "Kanal kimlik listesi dolu"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 mesaj seçildi"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "1 kişi seçildi"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d mesaj seçildi"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "%d kişi seçildi"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Önizleme"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Dosya adı zaten kullanılıyor"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Mesaj yok"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "Mesaj oluştur"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Rehbere ekle"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "Adres oluştur"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "Engellenenler listesi"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "Numara eklemek için dokunun"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "Kanal oluştur"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "At"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Mesaj gönderilemiyor"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "Rehber"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Fotoğraf çek"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Adres yok"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "Uyarı sesi"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "Reklama izin ver"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "Anonime izin ver"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Eklenen öğe listesi"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Oto. indirme"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "Otomatik"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "Otomatik sil"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "Arkaplan rengi"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "Mesajları engelle"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Hücre yayını mesajları"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "Etkinleştirme"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "Kanallarım"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "Alınan kanallar"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Merkez %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Özel süre"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "Varsayılan stil"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "İletim raporu"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Gönderme başarısız"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "Her 10 dakikada bir"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "Her 2 dakikada bir"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "Her 5 dakikada bir"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "Yazı tipi rengi"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Kimden"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "Genel ayarlar"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM-Alfabesi"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "Bir uygulama veya görüşme içinde değilseniz sesli posta sunucusuna bağlanmak için '1' tuşunu basılı tutun"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Dahil öğe listesi"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "Diller"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "Maksimum"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "Telesekreter numarası"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Mesaj iletildi"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Mesaj alındı"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Serbest"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Uyarı"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Gönderildi"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "Boyut ve içerik sınırlaması yok"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "Boyut ve içerik izin verilen maksimum değeri aştığında size bilgi verilecektir"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "Faks"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "Ses"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "İletim mesajları"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Okundu raporu"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Alınan"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuel"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Reddet"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Alma seçenekleri"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "Cevap yolu"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "İletim raporu talep et"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Okundu raporu iste"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Kısıtlı"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "Gönderiliyor..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 gün"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Düşük"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Acil"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "Gönderme seçenekleri"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "Sona erme"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Öncelik"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "İletim raporu gönder"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Okundu raporu gönder"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "Servis türü"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "Adres"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "Aynısı"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "Dahil et"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "Eşleşme kriterleri"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "1 kez"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Sayfa süresi"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "Karakter desteği"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "Metin"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Acil durum mesajları"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Metin mesajları"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Toplam boyut"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Çoklu dil"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM içeriği"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "Kanalı düzenle"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Öğe listesi"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "saniye"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 saniye"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 saniye"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 saniye"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Ana şebeke"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Kur"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Dış şebeke"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "Slayt"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "Yazı tipi stili"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Kişi detaylarını göster"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multimedya mesaj gönderildi"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Mesaj alınamadı"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Multimedya mesajı gönderme başarısız"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "%d KB'ye kadar resim gönderebilirsiniz"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "Kartvizit"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "İsim yok"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "Hoşgeldiniz"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "İlet"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Okunmamış"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Telefon'a taşı"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "Metin ekle"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Çoğaltılan alıcı"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "Maksimum oluşturma boyutu"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Maksimum alıcı sayısına (%d) ulaşıldı"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "Konu eklemek için dokunun"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "Gruplar"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "Rehber"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "Diğer dosyalar"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "Ses"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "Multimedya ekle"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "KAPALI"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "AÇIK"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Alıcı"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Ses kaydet"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "Ses kaydet"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Video kaydet"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "Metin şablonu"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "MMS olarak değiştirildi"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "SMS olarak değişti"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "Adresi girin"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "Geçersiz dosya"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "Mesaj gönderildi"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "Mesaj boyutu aşıldı"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d ek mevcut. %d eke kadar seçin"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "Sunucu cevap vermiyor"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Tüm dosyalar eklenemiyor. Maksimum ekleme kapasitesi %d KB. Devam edilsin mi?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "MMS gönderilemiyor. Tanımlanmayan hata"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "Takvim senkr"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Yazı tipi boyutu"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "Ekler olmadan"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "Bütün e-posta"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Oluşturma modu"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "Mesaj iletildi"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimedya mesajı"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "Yeni sesli posta"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Konu yok"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "Tümüne evet"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Servis merkezi"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "Hizmet yükleme"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "Ses"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "Gönderilemiyor. Desteklenmeyen dosya türleri eklendi"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "Görüşme listesi"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Adres seçin"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "SIM'e taşı"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Çevrimiçine(%s) geçmek üzeresiniz. Devam edilsin mi?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS alma başarısız"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "Alıcı yok"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "Gerekli"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "Taslaklara kaydedilsin mi?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "Maks. mesaj boyutu aşıldı. Yeniden boyutlandırılıyor..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "Senkronizasyon iptal edildi"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Tekrar Gönder"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "Kanal ekle"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Geçersiz alıcı"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Geçersiz alıcılar"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Görüşme sırasında çalınamaz"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Yığın depolama modunda kaydetme sağlanamıyor"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Yığın depolama modunda açma sağlanamıyor"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Yığın depolama modunda kullanma sağlanamıyor"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Geçerli mesajdan vazgeçilsin mi?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "Seçili"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Seçili"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Sil?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "Yeniden boyutlandırılıyor..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Eklenemiyor. Maksimum dosya boyutu %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Kısıtlı"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "İletilemedi.\nDosya iletilmeye karşı kilitli"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Zamanlı mesaj"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Güvenlik ilkesi metin mesajı yazımını kısıtlıyor"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Ekleniyor. Lütfen bekleyin..."
+
diff --git a/main/po/zh_CN.po b/main/po/zh_CN.po
new file mode 100755 (executable)
index 0000000..2d3def3
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "无法打开"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "取回"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "无法移动"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "未请求"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "已达页面最大数量"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "已发出请求"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "受限模式。 无法插入受限内容"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "已送达"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "已过期"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "阅读"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "取回中..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "取回失败"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "插入 SIM 卡以发送信息。信息将被存于发件箱"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d种语言"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "中心地址"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "重复"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "输入频道名称"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "输入频道号码"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "未选择"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d 个频道"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "相同频道 ID 已存在"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "发送失败。重试?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "频道 ID 列表已满"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "已选择一条信息"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "已选择1个人"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "已选择%d条信息"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "已选择%d个人"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "预览"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "文件名已存在"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "无信息"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "新建信息"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "添加到联系人"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "葡萄牙语"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "新建地址"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "阻止列表"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "点击并添加号码"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "创建频道"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "放弃"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "无法发送信息"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "联系人"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "拍照"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "无地址"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "提示音"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "允许广告"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "允许匿名"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "附件列表"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "自动下载"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "自动"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "自动删除"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "背景颜色"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "阻止信息"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "广播信息"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "启动"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "德语"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "西班牙语"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "法语"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "意大利语"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "荷兰语"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "个人频道"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "接收信道"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "中心 %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "自定时间"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "默认风格"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "发送报告"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "发送失败"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "每 10 分钟"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "每 2 分钟"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "每 5 分钟"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "字体颜色"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "发件人"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "基本设置"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM 字母系统"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "未使用应用程序或未在通话时,按住 '1' 键可连接语音信箱服务器"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "已插入项目列表"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "语言"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "最大"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "语音信箱号码"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "信息已送达"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "信息已取回"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "自由"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "警告"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "已发送"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "不限制大小和内容"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "当超过允许的最大大小和容量时将收到通知"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "传真"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "语音"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "WAP短信"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "阅读报告"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "已接收"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "手动"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "拒绝"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "接收选项"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "回复路径"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "要求送达报告"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "要求阅读报告"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "限制"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "发送中…"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 天"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "低"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "紧急"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "发送选项"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "有效期"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "优先级"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "发送送达报告"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "发送读取报告"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "服务类型"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "地址"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "完全一样"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "包括"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "匹配标准"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "一次"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "页面持续时间"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "字符支持"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "文本"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS信息"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "短信"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "总大小"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "单一码"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM 内容"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "编辑频道"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "项目列表"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "秒"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 秒"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 秒"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 秒"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "本地网络"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "安装"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "外国网络"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "幻灯片"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "字体风格"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "查看联系人详细信息"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "彩信已发送"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "取回失败"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "发送彩信失败"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "最多可发送 %d KB 的图像"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "名片"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "无名称"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "欢迎"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "转发"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "未读"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "移动到手机"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "添加文本"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "重复的收件人"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "最大新建尺寸"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "已达到最大收件人数量(%d)"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "点击并添加主题"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "分组"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "电话簿"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "其它文件"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "声音"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "增加多媒体"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "关"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "开"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "至"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "录音"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "录音"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "拍摄录像"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "文本模板"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "更改为彩信"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "已更改为短信"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "输入地址"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "无效文件"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "已发送"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "超过信息大小"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d个文件可用。至多可选择%d个附件"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "服务器无响应"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "无法附加所有文件。附件的最大容量为%dKB。继续?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "无法发送 MMS。出现无法识别的错误"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "日历同步"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "字体大小"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "不含附件"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "完整电子邮件"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "创建模式"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "信息已送达"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "彩信"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "新语音信箱"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "没有主题"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "全部确定"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "短信息服务中心"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "装载服务"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "声音"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "无法发送。附加了不支持的文件类型"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "会话列表"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "选择地址"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "移动到 SIM 卡"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "您将上网(%s)。 继续?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS 取回失败"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "无收件人"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "需要"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "保存到草稿箱?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "超过最大信息大小重整大小中......"
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "同步已取消"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "重新发送"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "添加频道"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "无效收件人"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "无效收件人"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通话中无法播放"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "大容量存储模式打开,无法保存"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "大容量存储模式打开,无法打开"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "大容量存储模式打开,无法使用"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "丢弃当前信息?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "已选择"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "已选择"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "删除?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "调整中..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "无法附加。最大文件大小是 %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "限制"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "无法转寄\n文件已锁上转寄"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "预定的信息"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "安全政策限制编写短信"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "添加中,请稍等…"
+
diff --git a/main/po/zh_HK.po b/main/po/zh_HK.po
new file mode 100755 (executable)
index 0000000..c7e3a72
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "無法開啟"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "取回"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "無法移動"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "未要求"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "頁面數目已達上限"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "已請求"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "限制模式。無法插入限制的內容"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "已傳遞"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "已過期"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "已讀取"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "正在取回..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "取回失敗"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "插入 SIM 卡以發送訊息。訊息將會儲存到寄件匣"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d 語言"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "中心地址"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "重複"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "輸入頻道名稱"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "輸入頻道數字"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "無已選擇項目"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d 頻道"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "相同頻道 ID 已存在"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "發送失敗。要重試嗎?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "頻道 ID 清單已滿"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "已選擇 1 則訊息"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "已選擇 1 人"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "已選擇 %d 則訊息"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "已選擇 %d 人"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "預覽"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "檔案名稱已存在"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "無訊息"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "建立訊息"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "加到聯絡人"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "Português"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "建立地址"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "封鎖清單"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "輕觸以加入號碼"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "建立頻道"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "捨棄"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "無法發送信息"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "聯絡人"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "拍照"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "無地址"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "提示音"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "允許廣告"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "允許暱名"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "已附加項目清單"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "自動下載"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "自動"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "自動刪除"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "背景顏色"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "封鎖訊息"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "廣播訊息"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "啟動"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "Deutsch"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "Español"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "Français"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "Italiano"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "Nederlands"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "Svenska"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "我的頻道"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "接收頻道"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "中心 %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "自訂時間"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "預設風格"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "傳遞報告"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "發送失敗"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "每 10 分鐘"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "每 2 分鐘"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "每 5 分鐘"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "字體顏色"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "由"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "一般設定"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM 字符表"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "當您不在使用應用程式或不在通話中時,可按住 '1' 鍵以連接到語音郵件伺服器"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "已插入項目清單"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "語言"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "最大"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "留言信箱號碼"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "訊息已傳遞"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "訊息已取回"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "自由"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "警告"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "已發送"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "無大小和內容的限制"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "當訊息大小及內容超過最大值時,您將收到通知"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "傳真"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "語音"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "推送訊息"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "讀取報告"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "已接收"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "手動"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "拒絕"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "接收選項"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "回覆路徑"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "要求送達報告"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "要求讀取報告"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "已限制"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "正在發送..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 日"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "低"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "緊急"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "發送選項"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "到期"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "優先次序"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "發送傳遞報告"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "發送讀取報告"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "服務類型"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "地址"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "完全相同於"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "包括"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "符合標準"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "一次"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "頁面持續時間"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "支援的字元"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "文字"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS 訊息"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "文字訊息"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "總大小"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM 內容"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "編輯頻道"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "項目清單"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "秒"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 秒"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 秒"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 秒"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "本地網絡"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "安裝"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "漫遊網絡"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "滑動"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "字體風格"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "檢視聯絡人詳細資料"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "已發送多媒體訊息"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "取回訊息失敗"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "發送多媒體訊息失敗"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "最多可以發送 %d KB 圖像"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "名片"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "無姓名"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "歡迎"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "轉寄"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "未讀"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "移動到手機"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "加入文字"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "重複的收件人"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "建立大小上限"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "已達收件人的數量上限(%d)"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "輕觸以加入主題"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "群組"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "電話簿"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "其他檔案"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "聲音"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "加入多媒體"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "關"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "開"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "至"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "錄音"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "錄音"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "錄影"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "文字範本"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "更改為 MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "已更改為短訊"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "輸入地址"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "檔案無效"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "訊息已發送"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "已超過訊息大小"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d 個附件可用。最多可選擇 %d 個附件"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "伺服器無回應"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "無法附加全部檔案。附件容量上限為 %d KB。是否繼續?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "無法發送 MMS。出現無法識別的錯誤"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "日曆同步"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "字體大小"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "無附件"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "完整電郵"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "建立模式"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "訊息已傳遞"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "多媒體訊息"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "新留言"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "無主題"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "全部確定"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "服務中心"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "服務載入"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "聲音"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "無法發送。不支援附加的檔案類型"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "對話清單"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "選擇地址"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "移動到 SIM 卡"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "您即將上網 (%s)。要繼續嗎?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS 取回失敗"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "無收件人"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "需要"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "要儲存到草稿匣嗎?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "巳超過訊息大小上限。正在重設大小..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "同步取消"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "重新發送"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "加入頻道"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "無效收件人"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "無效收件人"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通話期間無法播放"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "在大容量儲存裝置模式下,無法儲存"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "在大容量儲存裝置模式下,無法開啟"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "在大容量儲存裝置模式下,無法使用"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "捨棄目前的訊息嗎?"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "已選擇"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "已選擇"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "刪除嗎?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "正在重設大小..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "無法附加。檔案最大為%d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "已限制"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "無法轉寄。\n檔案轉寄功能已鎖定"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "預定的訊息"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "安全政策限制撰寫文字訊息"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "加入中。請稍候…"
+
diff --git a/main/po/zh_TW.po b/main/po/zh_TW.po
new file mode 100755 (executable)
index 0000000..1aa6a24
--- /dev/null
@@ -0,0 +1,651 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "無法開啟"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "擷取"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "無法移動"
+
+msgid "IDS_MSGC_BODY_NOT_REQUESTED"
+msgstr "沒有要求"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "頁數已達上限"
+
+msgid "IDS_MSGF_BODY_REQUESTED"
+msgstr "已要求"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "限制模式。無法插入限制的內容"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "已傳送"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "已過期"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "已讀取"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "正在擷取..."
+
+msgid "IDS_MSGF_POP_RETRIEVING_FAILED"
+msgstr "擷取失敗"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "插入 SIM 卡以傳送訊息。訊息將會儲存在寄件匣中"
+
+msgid "IDS_MSGF_BODY_PD_LANGUAGES"
+msgstr "%d 語言"
+
+msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS"
+msgstr "中心地址"
+
+msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED"
+msgstr "重複"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME"
+msgstr "輸入頻道名稱"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "輸入頻道號碼"
+
+msgid "IDS_MSGF_POP_NOTHINGSELECTED"
+msgstr "未選擇任何項目"
+
+msgid "IDS_MSGF_POP_N_CHANNELS"
+msgstr "%d 頻道"
+
+msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS"
+msgstr "有相同的頻道 ID 存在"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q"
+msgstr "傳送失敗。再試一次?"
+
+msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL"
+msgstr "頻道 ID 清單已滿"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "已選擇 1 則訊息"
+
+msgid "IDS_MSGF_BODY_1_PERSON_SELECTED"
+msgstr "已選擇 1 人"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "已選擇 %d 則訊息"
+
+msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED"
+msgstr "已選擇 %d 人"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "預覽"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "檔案名稱已存在"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "無訊息"
+
+msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE"
+msgstr "建立訊息"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "加到聯絡人"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_PT"
+msgstr "葡萄牙文"
+
+msgid "IDS_MSGF_BODY_CREATE_ADDRESS"
+msgstr "建立地址"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST"
+msgstr "封鎖清單"
+
+msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER"
+msgstr "輕觸以新增號碼"
+
+msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST"
+msgstr "建立頻道"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "捨棄"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "無法傳送訊息"
+
+msgid "IDS_MSGC_HEADER_CONTACTS"
+msgstr "聯絡人"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "拍照"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "無地址"
+
+msgid "IDS_MSGF_BODY_ALERT_TONE"
+msgstr "提示音"
+
+msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT"
+msgstr "允許廣告"
+
+msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS"
+msgstr "允許暱名"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "附加項目清單"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "自動下載"
+
+msgid "IDS_MSGF_BODY_AUTOMATIC"
+msgstr "自動"
+
+msgid "IDS_MSGF_BODY_AUTO_DELETE"
+msgstr "自動刪除"
+
+msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR"
+msgstr "背景顏色"
+
+msgid "IDS_MSGF_BODY_BLOCK_MESSAGES"
+msgstr "封鎖訊息"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "廣播訊息"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION"
+msgstr "啟動"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_DE"
+msgstr "德文"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_EN"
+msgstr "English"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_ES"
+msgstr "西班文語"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_FR"
+msgstr "法語"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_IT"
+msgstr "義大利文"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_NL"
+msgstr "荷蘭語"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_SV"
+msgstr "瑞典文"
+
+msgid "IDS_MSGF_BODY_CBLANGUAGE_TR"
+msgstr "Türkçe"
+
+msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS"
+msgstr "我的頻道"
+
+msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL"
+msgstr "接收頻道"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "中心 %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "自訂時間"
+
+msgid "IDS_MSGF_BODY_DEFAULT_STYLE"
+msgstr "預設樣式"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "傳遞報告"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "傳送失敗"
+
+msgid "IDS_MSGF_BODY_EVERY_10_MINUTES"
+msgstr "每 10 分鐘"
+
+msgid "IDS_MSGF_BODY_EVERY_2_MINUTES"
+msgstr "每 2 分鐘"
+
+msgid "IDS_MSGF_BODY_EVERY_5_MINUTES"
+msgstr "每 5 分鐘"
+
+msgid "IDS_MSGF_BODY_FONT_COLOUR"
+msgstr "字型顏色"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "自"
+
+msgid "IDS_MSGF_BODY_GENERAL_SETTINGS"
+msgstr "一般設定"
+
+msgid "IDS_MSGF_BODY_GSM_ALPHABET"
+msgstr "GSM 字母表"
+
+msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER"
+msgstr "當您沒有使用應用程式或沒有通話時,按下「1」鍵可連線至語音郵件伺服器"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "已插入項目清單"
+
+msgid "IDS_MSGF_BODY_LANG"
+msgstr "語言"
+
+msgid "IDS_MSGF_BODY_MAX"
+msgstr "最大"
+
+msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER"
+msgstr "語音信箱號碼"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "訊息已傳遞"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "已擷取訊息"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "可用"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "警告"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "已傳送"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE"
+msgstr "無大小及內容限制"
+
+msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING"
+msgstr "當大小及內容超過允許的上限時,您將收到通知"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_FAX"
+msgstr "傳真"
+
+msgid "IDS_MSGF_BODY_MSGTYPE_VOICE"
+msgstr "語音"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "推送訊息"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "讀取報告"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "已接收"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "手動"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "拒絕"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "接收選項"
+
+msgid "IDS_MSGF_BODY_REPLYPATH"
+msgstr "回覆路徑"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "要求傳遞報告"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "要求讀取報告"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "保密"
+
+msgid "IDS_MSGF_BODY_SENDING"
+msgstr "正在傳送..."
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY"
+msgstr "2 天"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "低"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "緊急"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONS"
+msgstr "傳送選項"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY"
+msgstr "過期"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "優先順序"
+
+msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT"
+msgstr "傳送傳遞報告"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "傳送讀取報告"
+
+msgid "IDS_MSGF_BODY_SERVICE_TYPE"
+msgstr "服務類型"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS"
+msgstr "地址"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS"
+msgstr "完全一樣"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE"
+msgstr "包括"
+
+msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA"
+msgstr "符合條件"
+
+msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE"
+msgstr "一次"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "頁面顯示時間"
+
+msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT"
+msgstr "字元支援"
+
+msgid "IDS_MSGF_BODY_SMSTYPETEXT"
+msgstr "文字"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS 訊息"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "簡訊"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "總大小"
+
+msgid "IDS_MSGF_BODY_UNICODE"
+msgstr "Unicode"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM 內容"
+
+msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST"
+msgstr "編輯頻道"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "項目清單"
+
+msgid "IDS_MSGF_HEADER_MMSDURSECONDS"
+msgstr "秒"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 秒"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 秒"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 秒"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "本地網路"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "安裝"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "外部網路"
+
+msgid "IDS_MSGF_OPT_SLIDE"
+msgstr "投影片"
+
+msgid "IDS_MSGF_OPT_SP_FONT_STYLE"
+msgstr "字型樣式"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "檢視聯絡人詳細資料"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "已傳送多媒體訊息"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "擷取訊息失敗"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "傳送多媒體訊息失敗"
+
+msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB"
+msgstr "最多可以傳送 %d KB 影像"
+
+msgid "IDS_MSGF_OPT_NAME_CARD"
+msgstr "名片"
+
+msgid "IDS_MSGF_BODY_EMAILNONAME"
+msgstr "無姓名"
+
+msgid "IDS_MSGF_BODY_WELCOME"
+msgstr "歡迎"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "轉寄"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "未讀"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "移動到手機"
+
+msgid "IDS_MSGC_BODY_ADD_TEXT"
+msgstr "加入文字"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "重覆的收件人"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE"
+msgstr "最大新建訊息"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "收件人的最大數量(%d位)已達到"
+
+msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT"
+msgstr "輕觸以加入主旨"
+
+msgid "IDS_MSGC_BUTTON_GROUPS"
+msgstr "群組"
+
+msgid "IDS_MSGC_BUTTON_PHONEBOOK"
+msgstr "電話簿"
+
+msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE"
+msgstr "其他檔案"
+
+msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND"
+msgstr "聲音"
+
+msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA"
+msgstr "加入多媒體"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF"
+msgstr "關"
+
+msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON"
+msgstr "開"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "至"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "錄音"
+
+msgid "IDS_MSGC_OPT_RECORD_SOUND"
+msgstr "錄音"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "錄影"
+
+msgid "IDS_MSGC_OPT_TEXT_TEMPLATE"
+msgstr "文字範本"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "已變更為 MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "更改為簡短訊息"
+
+msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US"
+msgstr "輸入地址"
+
+msgid "IDS_MSGC_POP_INVALID_FILE"
+msgstr "檔案無效"
+
+msgid "IDS_MSGC_POP_MESSAGESENT"
+msgstr "訊息已傳送"
+
+msgid "IDS_MSGC_POP_MSG_SIZE_OVER"
+msgstr "已超過訊息大小上限"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "加入附件/   最多至%個附件"
+
+msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING"
+msgstr "伺服器無回應"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "無法附加所有檔案,最大容量%KB。要繼續嗎?"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR"
+msgstr "無法傳送 MMS。無法辨識的錯誤"
+
+msgid "IDS_MSGF_BODY_CALENDAR_SYNC"
+msgstr "日曆同步"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "字型大小"
+
+msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS"
+msgstr "無附件"
+
+msgid "IDS_MSGF_BODY_ENTIRE_EMAIL"
+msgstr "整封電子郵件"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "建立模式"
+
+msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED"
+msgstr "訊息已傳遞"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "多媒體訊息"
+
+msgid "IDS_MSGF_BODY_NEW_VOICEMAIL"
+msgstr "新留言"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "無主旨"
+
+msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL"
+msgstr "全部選是"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "服務中心"
+
+msgid "IDS_MSGF_BODY_SERVICE_LOADING"
+msgstr "服務載入"
+
+msgid "IDS_MSGF_BODY_SOUND"
+msgstr "音效"
+
+msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED"
+msgstr "無法發送,不支援的文件類型"
+
+msgid "IDS_MSGF_HEADER_CONVERSATION_LIST"
+msgstr "對話清單"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "選擇地址"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "移動到 SIM 卡"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "您即將上線 (%s)。繼續?"
+
+msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE"
+msgstr "MMS 擷取失敗"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENT"
+msgstr "無收件人"
+
+msgid "IDS_MSGF_POP_REQUIRED"
+msgstr "必要項"
+
+msgid "IDS_MSGF_POP_SAVE_IN_DRAFT"
+msgstr "要儲存在草稿匣中嗎?"
+
+msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING"
+msgstr "超過訊息大小上限。正在重設大小..."
+
+msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED"
+msgstr "同步已取消"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "重新傳送"
+
+msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD"
+msgstr "增加頻道"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "無效的收件人"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "無效接收者"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通話期間無法播放"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "處於大容量儲存裝置模式時,無法儲存"
+
+msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "處於大容量儲存裝置模式時,無法開啟"
+
+msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "處於大容量儲存裝置模式時,無法使用"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "放棄目前訊息"
+
+msgid "IDS_MSGF_OPT_SELECTED"
+msgstr "已選擇"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "已選擇"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "要刪除嗎?"
+
+msgid "IDS_MSGF_POP_RESIZING_ING"
+msgstr "正在重設大小..."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "無法附加。最大文件%d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "保密"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "無法轉寄。\n檔案轉寄已鎖住"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "預定訊息"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "訊息安全政策限制"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "增加中。請稍候..."
+
diff --git a/packaging/org.tizen.message.spec b/packaging/org.tizen.message.spec
new file mode 100755 (executable)
index 0000000..c58ae83
--- /dev/null
@@ -0,0 +1,69 @@
+Name:       org.tizen.message
+Summary:    message application
+Version:    0.8.2
+Release:    1
+Group:      devel
+License:    Flora Software License
+Source0:    %{name}-%{version}.tar.gz
+Requires(post): /bin/touch
+BuildRequires:  pkgconfig(appcore-common)
+BuildRequires:  pkgconfig(appcore-efl)
+BuildRequires:  pkgconfig(appsvc)
+BuildRequires:  pkgconfig(bundle)
+BuildRequires:  pkgconfig(capi-appfw-application)
+BuildRequires:  pkgconfig(contacts-service)
+BuildRequires:  pkgconfig(dlog)
+BuildRequires:  pkgconfig(devman_haptic)
+BuildRequires:  pkgconfig(elementary)
+BuildRequires:  pkgconfig(ecore)
+BuildRequires:  pkgconfig(ecore-x)
+BuildRequires:  pkgconfig(ecore-input)
+BuildRequires:  pkgconfig(ecore-imf)
+BuildRequires:  pkgconfig(ecore-file)
+BuildRequires:  pkgconfig(eina)
+BuildRequires:  pkgconfig(glib-2.0)
+BuildRequires:  pkgconfig(heynoti)
+BuildRequires:  pkgconfig(icu-i18n)
+BuildRequires:  pkgconfig(msg-service)
+BuildRequires:  pkgconfig(utilX)
+BuildRequires:  pkgconfig(ui-gadget)
+BuildRequires:  libug-contacts-devel
+BuildRequires:  cmake
+BuildRequires:  edje-tools
+BuildRequires:  gettext-tools
+
+%description
+message application.
+
+%prep
+%setup -q
+
+%build
+
+%define PREFIX    "/opt/apps/org.tizen.message"
+%define RESDIR    "/opt/apps/org.tizen.message/res"
+%define DATADIR    "/opt/apps/org.tizen.message/data"
+LDFLAGS+="-Wl,--rpath=%{PREFIX}/lib -Wl,--as-needed -Wl,--hash-style=both"; export LDFLAGS
+cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX}
+# CMakeLists.Txt needs to be fixed for parallel build to work
+make #%{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+mkdir -p %{buildroot}/opt/apps/org.tizen.message/data
+
+%post
+
+%files
+%defattr(-,root,root,-)
+/opt/apps/org.tizen.message/bin/message
+/opt/apps/org.tizen.message/lib/*
+/opt/apps/org.tizen.message/bin/message-dialog
+/opt/share/applications/*.desktop
+/opt/apps/org.tizen.message/res/*
+/opt/ug/lib/*.so
+%attr(-,inhouse,inhouse) %dir /opt/apps/org.tizen.message/data
+
+%changelog
diff --git a/setting/CMakeLists.txt b/setting/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..59ed23a
--- /dev/null
@@ -0,0 +1,42 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 
+PROJECT(message C)
+
+SET (MSG_UI_SETTING msg_ui_setting)
+
+######################## 
+# Message Setting List # 
+########################
+SET(SETTING_SRCS
+       ./src/main/msg-ui-setting-gadget.c
+        ./src/main/msg-ui-setting-main.c
+        ./src/main/msg-ui-setting-callback.c
+        ./src/main/msg-ui-setting-common-util.c
+        ./src/main/msg-ui-setting-msg-service-wrapper.c
+        ./src/text/msg-ui-setting-text-message.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_SETTING_DIR}/include 
+               ${CMAKE_SOURCE_MAIN_DIR}
+               ${CMAKE_SOURCE_COMMON_DIR}
+               /usr/include/msg-service/
+)
+
+
+FOREACH(flag ${pkgs_CFLAGS}) 
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") 
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+
+ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"") 
+ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"") 
+ADD_DEFINITIONS("-DTARGET") 
+
+# Install executable and .edj files. 
+ADD_LIBRARY(ug-msg-setting-efl SHARED ${SETTING_SRCS}) 
+TARGET_LINK_LIBRARIES(ug-msg-setting-efl ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common)
+
+INSTALL(TARGETS ug-msg-setting-efl DESTINATION ${UGDIR}) 
+
+#i18n
+#ADD_SUBDIRECTORY(po)
diff --git a/setting/include/msg-ui-setting-callback.h b/setting/include/msg-ui-setting-callback.h
new file mode 100755 (executable)
index 0000000..04d433b
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_SETTING_CALLBACK_H__
+#define __DEF_MSG_UI_SETTING_CALLBACK_H__
+
+#include "msg-ui-setting-main.h"
+
+/*============================================================================
+                               FUNCTION DEFINE
+=============================================================================*/
+void msg_ui_setting_text_msg_cb(void *data, Evas_Object *obj, void *event_info);
+
+void msg_ui_setting_quit_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif
diff --git a/setting/include/msg-ui-setting-common-util.h b/setting/include/msg-ui-setting-common-util.h
new file mode 100755 (executable)
index 0000000..b10d077
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_SETTING_COMMON_UTIL_H__
+#define __DEF_MSG_UI_SETTING_COMMON_UTIL_H__
+
+#include "msg-ui-setting-main.h"
+#include "msg-ui-setting-text-message.h"
+
+#define SETTING_MAX_FIELD_COUNT 20
+#define SETTING_MAX_VALUE_COUNT 10
+
+struct _msg_ui_setting_list_item {
+       char *name;
+       void (*func)(void *data, Evas_Object *obj, void *event_info);
+};
+
+struct _msg_ui_setting_mixed_list_item {
+       char depth;
+       char *name;
+       void (*func)(void *data, Evas_Object *obj, void *event_info);
+       Elm_Genlist_Item_Type type;
+};
+
+
+/*============================================================================
+                               FUNCTION DEFINE
+=============================================================================*/
+
+Evas_Object *msg_ui_setting_common_create_bg(Evas_Object *parent);
+Evas_Object *msg_ui_setting_common_create_layout(Evas_Object *parent);
+void msg_ui_setting_common_create_back_btn(Evas_Object *nf, Evas_Smart_Cb func, void *data);
+void msg_ui_setting_common_create_title_back_btn(Evas_Object *nf, Evas_Smart_Cb func, void *data);
+Evas_Object *msg_ui_setting_common_create_title_btn(Evas_Object *nf, const char *text, Evas_Smart_Cb func, void *data);
+Evas_Object *msg_ui_setting_common_create_controlbar(Evas_Object *parent);
+
+Evas_Object *msg_ui_setting_common_create_genlist(Evas_Object *parent);
+void msg_ui_setting_common_append_genlist_separator(Evas_Object *genlist, void *data);
+
+Evas_Object *msg_ui_setting_common_create_scroller(Evas_Object *parent);
+Evas_Object *msg_ui_setting_common_create_conformant(Evas_Object *parent);
+Evas_Object *msg_ui_setting_common_create_no_content_view(Evas_Object *parent, const char *text);
+Evas_Object *msg_ui_setting_common_add_box(Evas_Object *parent);
+Evas_Object *msg_ui_setting_common_create_editfield(Evas_Object *parent, const char *label, const char *guide_label);
+
+int msg_ui_setting_common_vconf_get(const char *pKey);
+int msg_ui_setting_common_vconf_set(const char *pKey, int nSetValue);
+
+void msg_ui_setting_common_show_popup(PMSG_SETTING_DATA settingData, char *str);
+void msg_ui_setting_common_show_notify(void *data, char *str);
+void msg_ui_setting_common_show_selectioninfo(Evas_Object *parent, char *str, void *data);
+void msg_ui_setting_common_destroy_selectioninfo(void *data);
+
+
+#endif
diff --git a/setting/include/msg-ui-setting-gadget.h b/setting/include/msg-ui-setting-gadget.h
new file mode 100755 (executable)
index 0000000..61c3938
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_SETTING_GADGET_H__
+#define __DEF_MSG_UI_SETTING_GADGET_H__
+
+
+#endif /* __DEF_MSG_UI_SETTING_H__ */
diff --git a/setting/include/msg-ui-setting-main.h b/setting/include/msg-ui-setting-main.h
new file mode 100755 (executable)
index 0000000..14f73e8
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_MAIN_SETTING_H__
+#define __DEF_MSG_UI_MAIN_SETTING_H__
+
+
+#include <MapiControl.h>
+#include <MapiSetting.h>
+#include <vconf.h>
+#include "message.h"
+#include "msg-ui-util.h"
+#include <Elementary.h>
+#include "msg-ui-common-utility.h"
+#include "msg-ui-setting-types.h"
+#include "msg-ui-setting-gadget.h"
+#include "msg-ui-setting-callback.h"
+#include "msg-ui-setting-common-util.h"
+#include "msg-ui-setting-msg-service-wrapper.h"
+
+
+/*============================================================================
+                               DEFINE
+=============================================================================*/
+
+typedef enum {
+       MSG_UI_SETTING_MAIN_MENU_TEXT_MESSAGES,
+
+       MSG_UI_SETTING_MAIN_MENU_MAX
+
+} MSG_UI_SETTING_MAIN_MENU_E;
+
+
+/*============================================================================
+                               FUNCTION DEFINE
+=============================================================================*/
+
+PMSG_SETTING_DATA msg_ui_setting_get_data(void);
+
+Evas_Object *msg_ui_setting_create_navigation_layout(Evas_Object *parent);
+
+Evas_Object *msg_ui_setting_create_layout_main(Evas_Object *parent);
+
+void msg_ui_setting_launch(PMSG_SETTING_DATA settingData);
+
+void msg_ui_setting_create_main_view(PMSG_SETTING_DATA settingData);
+
+
+#endif /* __DEF_MSG_UI_MAIN_SETTING_H__ */
+
diff --git a/setting/include/msg-ui-setting-msg-service-wrapper.h b/setting/include/msg-ui-setting-msg-service-wrapper.h
new file mode 100755 (executable)
index 0000000..c330502
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_SETTING_MSG_SERVICE_WRAPPER_H__
+#define __DEF_MSG_UI_SETTING_MSG_SERVICE_WRAPPER_H__
+
+#include "msg-ui-setting-main.h"
+
+int msg_ui_setting_msg_set_config(PMSG_SETTING_DATA settingData);
+
+int msg_ui_setting_msg_get_config(PMSG_SETTING_DATA settingData);
+
+#endif
diff --git a/setting/include/msg-ui-setting-text-message.h b/setting/include/msg-ui-setting-text-message.h
new file mode 100755 (executable)
index 0000000..cd63e3b
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_SETTING_TEXT_MESSAGE_H__
+#define __DEF_MSG_UI_SETTING_TEXT_MESSAGE_H__
+
+
+#include "msg-ui-setting-main.h"
+
+
+/*============================================================================
+                               ENUMS
+=============================================================================*/
+typedef enum {
+       MSG_UI_SETTING_TEXT_MENU_REQ_DELIVERY_REPORT,
+       MSG_UI_SETTING_TEXT_MENU_MAX
+
+} MSG_UI_SETTING_TEXT_MENU_E;
+
+
+/*============================================================================
+                               FUNCTION DEFINE
+=============================================================================*/
+void msg_ui_setting_text_create_view(void *data, Evas_Object *obj, void *event_info);
+
+
+#endif
+
diff --git a/setting/include/msg-ui-setting-types.h b/setting/include/msg-ui-setting-types.h
new file mode 100755 (executable)
index 0000000..d52c8ec
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_SETTING_TYPES_H__
+#define __DEF_MSG_UI_SETTING_TYPES_H__
+
+
+#include <MsgTypes.h>
+#include <MsgSettingTypes.h>
+#include "message.h"
+
+
+#define MSG_SETTING_THEME      EDJDIR"/setting_theme.edj"
+#define MSG_SETTING_THEME_BLACK        EDJDIR"/setting_theme_black.edj"
+
+#define MAX_SETTING_CTRLBAR_BUTTON     4
+#define MAX_SMSC_LIST  SMSC_LIST_MAX
+#define MAX_SMSC_NAME_LEN      SMSC_NAME_MAX
+#define MAX_SMSC_ADDR_LEN      SMSC_ADDR_MAX
+
+/*============================================================================
+                               TYPES
+=============================================================================*/
+
+/**
+ *     The values for this type SHOULD be in _MSG_UI_SETTING_TYPE_E.
+ */
+
+typedef unsigned int MSG_UI_SETTING_TYPE_T;
+
+
+/*============================================================================
+                               ENUMS
+=============================================================================*/
+
+/**
+ *     This enum is used as the value of MSG_UI_SETTING_TYPE_T.
+ */
+enum _MSG_UI_SETTING_TYPE_E {
+       MSG_UI_SETTING_TYPE_SMS_SEND = MSG_SMS_SENDOPT,
+};
+
+
+/*============================================================================
+                               STRUCT DEFINE
+=============================================================================*/
+
+typedef struct {
+       Evas_Object *text_genlist;
+       Elm_Genlist_Item_Class text_1line_1icon_itc;
+       Evas_Object *req_delivery_rep_check;
+
+} MSG_UI_SETTING_TEXT_S;
+
+typedef struct _MSG_UI_SETTING_S {
+       MSG_UI_SETTING_TYPE_T type;
+
+       MSG_SETTING_S sms_send_opt;
+
+} MSG_UI_SETTING_S;
+
+typedef struct _MSG_SETTING_DATA {
+       struct ui_gadget *ug;
+       struct ug_cbs cbs;
+       struct ui_gadget *loaded_ug;
+
+       Evas_Object *layout_main;
+       Evas_Object *bg;
+       Evas_Object *navi_frame;
+       Evas_Object *popup;
+       Evas_Object *selectioninfo;
+       Evas_Object *selectioninfo_layout;
+
+       MSG_HANDLE_T msgHandle;
+       MSG_UI_SETTING_S msg_setting;
+
+       const char *locale;
+       int time_format;
+
+       Elm_Genlist_Item_Class grp_sep_itc;
+
+       Evas_Object *main_genlist;
+       Elm_Genlist_Item_Class main_itc;
+
+       union {
+               MSG_UI_SETTING_TEXT_S text_msg;
+
+       } list;
+
+} MSG_SETTING_DATA, *PMSG_SETTING_DATA;
+
+#endif
diff --git a/setting/src/main/msg-ui-setting-callback.c b/setting/src/main/msg-ui-setting-callback.c
new file mode 100755 (executable)
index 0000000..b54db78
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-setting-main.h"
+
+
+void msg_ui_setting_text_msg_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       msg_ui_setting_text_create_view(data, obj, event_info);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_quit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       ug_destroy_me(settingData->ug);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
diff --git a/setting/src/main/msg-ui-setting-common-util.c b/setting/src/main/msg-ui-setting-common-util.c
new file mode 100755 (executable)
index 0000000..7bd217d
--- /dev/null
@@ -0,0 +1,488 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-setting-main.h"
+#include "msg-ui-setting-common-util.h"
+
+
+/*============================================================================
+                                                               STATIC FUNCTION DEFINE
+=============================================================================*/
+static void __msg_ui_setting_common_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_common_entry_focus_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_common_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_common_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void __msg_ui_setting_common_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_common_popup_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_common_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+
+/*============================================================================
+                                                               FUNCTION IMPLEMENT
+=============================================================================*/
+
+static void __msg_ui_setting_common_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *layout = (Evas_Object *)data;
+
+       if (elm_object_focus_get(layout)) {
+               if (elm_entry_is_empty(obj))
+                       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+               else
+                       elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_common_entry_focus_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *layout = (Evas_Object *)data;
+
+       if (!elm_entry_is_empty(obj))
+               elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
+
+       elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_common_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *layout = (Evas_Object *)data;
+
+       if (elm_entry_is_empty(obj))
+               elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
+
+       elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_common_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *entry = (Evas_Object *)data;
+
+       elm_entry_entry_set(entry, "");
+       elm_object_signal_emit(obj, "elm,state,eraser,hide", "elm");
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object *msg_ui_setting_common_create_bg(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL");
+
+       Evas_Object *bg;
+
+       bg = elm_bg_add(parent);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, bg);
+       evas_object_show(bg);
+
+       return bg;
+}
+
+Evas_Object *msg_ui_setting_common_create_layout(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL");
+
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+
+       elm_layout_theme_set(layout, "layout", "application", "noindicator");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       /* elm_object_style_set(settingData->bg, "group_list"); */
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return layout;
+}
+
+void msg_ui_setting_common_create_back_btn(Evas_Object *nf, Evas_Smart_Cb func, void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, nf == NULL, "navi_frame is NULL");
+
+       Evas_Object *back_btn;
+       Elm_Object_Item *navi_it;
+
+       back_btn = elm_button_add(nf);
+       navi_it = elm_naviframe_top_item_get(nf);
+       elm_object_item_part_content_set(navi_it, "prev_btn", back_btn);
+
+       elm_object_style_set(back_btn, "naviframe/back_btn/default");
+       evas_object_smart_callback_add(back_btn, "clicked", func, (void *)data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_common_create_title_back_btn(Evas_Object *nf, Evas_Smart_Cb func, void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, nf == NULL, "nf is NULL");
+
+       Evas_Object *back_btn;
+       Elm_Object_Item *navi_it;
+
+       back_btn = elm_button_add(nf);
+       navi_it = elm_naviframe_top_item_get(nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", back_btn);
+
+       elm_object_style_set(back_btn, "naviframe/back_btn/default");
+       evas_object_smart_callback_add(back_btn, "clicked", func, (void *)data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object *msg_ui_setting_common_create_title_btn(Evas_Object *nf, const char *text, Evas_Smart_Cb func, void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, nf == NULL, NULL, "nf is NULL");
+
+       Evas_Object *button;
+
+       button = elm_button_add(nf);
+       if (button == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "elm_button_add() is failed !!");
+               return NULL;
+       }
+
+       elm_object_style_set(button, "naviframe/title/default");
+       elm_object_text_set(button, text);
+       evas_object_smart_callback_add(button, "clicked", func, (void *)data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return button;
+}
+
+Evas_Object *msg_ui_setting_common_create_controlbar(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *toolbar;
+
+       toolbar = elm_toolbar_add(parent);
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_object_style_set(toolbar, "default");
+
+       return toolbar;
+}
+
+Evas_Object *msg_ui_setting_common_create_genlist(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *genlist;
+
+       genlist = elm_genlist_add(parent);
+
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return genlist;
+}
+
+void msg_ui_setting_common_append_genlist_separator(Evas_Object *genlist, void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, genlist == NULL, "genlist is NULL");
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       Elm_Object_Item *it = NULL;
+
+       settingData->grp_sep_itc.item_style = "dialogue/separator/21/with_line";
+       settingData->grp_sep_itc.func.text_get = NULL;
+       settingData->grp_sep_itc.func.content_get = NULL;
+       settingData->grp_sep_itc.func.state_get = NULL;
+       settingData->grp_sep_itc.func.del = NULL;
+
+       it = elm_genlist_item_append(genlist, &settingData->grp_sep_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object *msg_ui_setting_common_create_scroller(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
+
+       Evas_Object *scroller;
+
+       scroller = elm_scroller_add(parent);
+
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return scroller;
+}
+
+Evas_Object *msg_ui_setting_common_create_conformant(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *conform;
+
+       elm_win_conformant_set(parent, EINA_TRUE);
+
+       conform = elm_conformant_add(parent);
+
+       elm_object_style_set(conform, "internal_layout");
+       evas_object_show(conform);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return conform;
+}
+
+Evas_Object *msg_ui_setting_common_create_no_content_view(Evas_Object *parent, const char *text)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
+
+       Evas_Object *no_content_layout;
+
+       no_content_layout = elm_layout_add(parent);
+       elm_layout_theme_set(no_content_layout, "layout", "nocontents", "text");
+
+       if (text != NULL)
+               elm_object_part_text_set(no_content_layout, "elm.text", text);
+       else
+               elm_object_part_text_set(no_content_layout, "elm.text", dgettext("sys_string", "IDS_COM_BODY_NO_ITEMS"));
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return no_content_layout;
+}
+
+Evas_Object *msg_ui_setting_common_add_box(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *box = elm_box_add(parent);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.0);
+       evas_object_show(box);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return box;
+}
+
+Evas_Object *msg_ui_setting_common_create_editfield(Evas_Object *parent, const char *label, const char *guide_label)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *layout = NULL;
+       Evas_Object *entry = NULL;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "editfield", "title");
+
+       entry = elm_entry_add(layout);
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+
+       elm_object_part_text_set(layout, "elm.text", label);
+       elm_object_part_text_set(layout, "elm.guidetext", guide_label);
+
+       evas_object_smart_callback_add(entry, "focused", __msg_ui_setting_common_entry_focus_cb, (void *)layout);
+       evas_object_smart_callback_add(entry, "unfocused", __msg_ui_setting_common_entry_unfocus_cb, (void *)layout);
+       evas_object_smart_callback_add(entry, "changed", __msg_ui_setting_common_entry_changed_cb, (void *)layout);
+       elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", __msg_ui_setting_common_eraser_clicked_cb, (void *)entry);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return layout;
+}
+
+int msg_ui_setting_common_vconf_get(const char *pKey)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       int retVal = 0;
+
+       if (vconf_get_int(pKey, &retVal) < 0)
+               return MSG_UI_RET_ERR;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "value = %d", retVal);
+
+       return retVal;
+}
+
+int msg_ui_setting_common_vconf_set(const char *pKey, int nSetValue)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       int retVal = 0;
+
+       if (vconf_set_int(pKey, nSetValue) != 0)
+               return MSG_UI_RET_ERR;
+
+       return retVal;
+}
+
+static void __msg_ui_setting_common_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (settingData->popup) {
+               evas_object_del(settingData->popup);
+               settingData->popup = NULL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_common_popup_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (settingData->popup) {
+               evas_object_del(settingData->popup);
+               settingData->popup = NULL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_common_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (settingData->popup) {
+               evas_object_del(settingData->popup);
+               settingData->popup = NULL;
+       }
+}
+
+void msg_ui_setting_common_show_popup(PMSG_SETTING_DATA settingData, char *str)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_SETTING_DATA is NULL");
+
+       settingData->popup = elm_popup_add(settingData->layout_main);
+
+       evas_object_size_hint_weight_set(settingData->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(settingData->popup, str);
+       evas_object_smart_callback_add(settingData->popup, "block,clicked", __msg_ui_setting_common_popup_block_clicked_cb, settingData);
+       elm_popup_timeout_set(settingData->popup, 2);
+       evas_object_smart_callback_add(settingData->popup, "timeout", __msg_ui_setting_common_popup_timeout_cb, settingData);
+       evas_object_show(settingData->popup);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_common_show_notify(void *data, char *str)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+       Evas_Object *btn1;
+
+       msg_ui_setting_common_show_popup(settingData, str);
+
+       btn1 = elm_button_add(settingData->popup);
+       elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK"));
+       evas_object_smart_callback_add(btn1, "clicked", __msg_ui_setting_common_popup_btn_clicked_cb, settingData);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+/**
+ * Create and show/hide selectioninfo.
+ *
+ * This fucntion create selectioninfo and show/hide it
+ *
+ * @param *parent: layout object.
+ * @param *str: if it is NULL or string length is 0, it will hide selectioninfo.
+ * @param *data: user data.
+ *
+ **/
+void msg_ui_setting_common_show_selectioninfo(Evas_Object *parent, char* str, void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (!settingData->selectioninfo) {
+               settingData->selectioninfo = elm_notify_add(parent);
+               elm_notify_orient_set(settingData->selectioninfo, ELM_NOTIFY_ORIENT_BOTTOM);
+
+               settingData->selectioninfo_layout = elm_layout_add(parent);
+               elm_layout_theme_set(settingData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_12");
+               elm_object_content_set(settingData->selectioninfo, settingData->selectioninfo_layout);
+       }
+
+       if (str == NULL || strlen(str) == 0) {
+               evas_object_hide(settingData->selectioninfo);
+       } else {
+               edje_object_part_text_set(_EDJ(settingData->selectioninfo_layout), "elm.text", str);
+               evas_object_show(settingData->selectioninfo);
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_common_destroy_selectioninfo(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (settingData->selectioninfo_layout) {
+               evas_object_del(settingData->selectioninfo_layout);
+               settingData->selectioninfo_layout = NULL;
+       }
+
+       if (settingData->selectioninfo) {
+               evas_object_del(settingData->selectioninfo);
+               settingData->selectioninfo = NULL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
diff --git a/setting/src/main/msg-ui-setting-gadget.c b/setting/src/main/msg-ui-setting-gadget.c
new file mode 100755 (executable)
index 0000000..4e40389
--- /dev/null
@@ -0,0 +1,351 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 UG_MODULE_API
+#define UG_MODULE_API __attribute__ ((visibility("default")))
+#endif
+
+
+#include "msg-ui-setting-types.h"
+#include "msg-ui-setting-main.h"
+#include "msg-ui-common-utility.h"
+
+
+static void __msg_ui_setting_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static int __msg_ui_setting_check_msg_server_ready(void);
+static void __msg_ui_setting_gadget_popup(PMSG_SETTING_DATA settingData, char *str);
+static Evas_Object *__msg_ui_setting_create_fullview(Evas_Object *parent, void *ugd);
+static Evas_Object *__msg_ui_setting_create_frameview(Evas_Object *parent, void *ugd);
+static void *__msg_ui_setting_on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv);
+static void __msg_ui_setting_on_start(struct ui_gadget *ug, bundle *data, void *priv);
+static void __msg_ui_setting_on_pause(struct ui_gadget *ug, bundle *data, void *priv);
+static void __msg_ui_setting_on_resume(struct ui_gadget *ug, bundle *data, void *priv);
+static void __msg_ui_setting_on_destroy(struct ui_gadget *ug, bundle *data, void *priv);
+static void __msg_ui_setting_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv);
+static void __msg_ui_setting_on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv);
+static void __msg_ui_setting_on_key_event(struct ui_gadget *ug, enum ug_key_event event, bundle *data, void *priv);
+
+
+static void __msg_ui_setting_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (settingData->popup) {
+               evas_object_del(settingData->popup);
+               settingData->popup = NULL;
+       }
+
+       ug_destroy_me(settingData->ug);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void
+__msg_ui_setting_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (settingData->popup) {
+               evas_object_del(settingData->popup);
+               settingData->popup = NULL;
+       }
+
+       ug_destroy_me(settingData->ug);
+}
+
+static int __msg_ui_setting_check_msg_server_ready(void)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int bMsgServerReady = 0;
+
+       if (vconf_get_bool(VCONFKEY_MSG_SERVER_READY, &bMsgServerReady) < 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_get_bool() is failed!!");
+               return MSG_UI_RET_ERR;
+       }
+
+       return bMsgServerReady;
+}
+
+static void __msg_ui_setting_gadget_popup(PMSG_SETTING_DATA settingData, char *str)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       settingData->popup = elm_popup_add(settingData->layout_main);
+
+       evas_object_size_hint_weight_set(settingData->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(settingData->popup, str);
+       evas_object_smart_callback_add(settingData->popup, "block,clicked", __msg_ui_setting_popup_block_clicked_cb, settingData);
+       elm_popup_timeout_set(settingData->popup, 2);
+       evas_object_smart_callback_add(settingData->popup, "timeout", __msg_ui_setting_popup_timeout_cb, settingData);
+       evas_object_show(settingData->popup);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *__msg_ui_setting_create_fullview(Evas_Object *parent, void *ugd)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *base;
+       Evas_Object *bg;
+       PMSG_SETTING_DATA settingData;
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ASSERT, !ugd, NULL);
+
+       settingData = (PMSG_SETTING_DATA)ugd;
+
+       bg = msg_ui_setting_common_create_bg(parent);
+       settingData->bg = bg;
+       elm_object_style_set(bg, "transparent");
+
+       /*Set default layout */
+       base = msg_ui_setting_create_layout_main(parent);
+       elm_object_part_content_set(base, "elm.swallow.bg", bg);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return base;
+}
+
+static Evas_Object *__msg_ui_setting_create_frameview(Evas_Object *parent, void *ugd)
+{
+       Evas_Object *base = NULL;
+
+       /* Create Frame view */
+
+       return base;
+}
+
+static void *__msg_ui_setting_on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *parent;
+       PMSG_SETTING_DATA ugd;
+
+       if (!ug || !priv)
+               return NULL;
+
+       bindtextdomain("message", LOCALEDIR);
+
+       ugd = (PMSG_SETTING_DATA)priv;
+       ugd->ug = ug;
+
+       ugd->cbs.layout_cb = NULL;
+       ugd->cbs.result_cb = NULL;
+       ugd->cbs.destroy_cb = NULL;
+       ugd->cbs.priv = NULL;
+
+       parent = ug_get_parent_layout(ug);
+
+       if (!parent)
+               return NULL;
+
+       if (mode == UG_MODE_FULLVIEW)
+               ugd->layout_main = __msg_ui_setting_create_fullview(parent, ugd);
+       else
+               ugd->layout_main = __msg_ui_setting_create_frameview(parent, ugd);
+
+       return ugd->layout_main;
+}
+
+static void __msg_ui_setting_on_start(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA ugd = (PMSG_SETTING_DATA)priv;
+       MSG_ERROR_T     err = MSG_SUCCESS;
+       MSG_HANDLE_T    msgHandle;
+
+       if (!__msg_ui_setting_check_msg_server_ready()) {
+               __msg_ui_setting_gadget_popup(ugd, dgettext(MESSAGE_PKGNAME, "Message server is not ready"));
+               return;
+       }
+
+       /*Set Message Handler*/
+       err = msg_open_msg_handle(&msgHandle);
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_open_msg_handle failed, Error=[%d]", err);
+               __msg_ui_setting_gadget_popup(ugd, dgettext(MESSAGE_PKGNAME, "Message server is not ready"));
+               return;
+       }
+
+       ugd->msgHandle = msgHandle;
+
+       ugd->locale = msg_common_get_default_locale();
+
+       if (appcore_get_timeformat((enum appcore_time_format *)&ugd->time_format) < 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appcore_get_timeformat() is failed!!");
+       }
+
+       if (ugd->layout_main)
+               msg_ui_setting_launch(ugd);
+       else
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "layout_main is NULL !!");
+}
+
+static void __msg_ui_setting_on_pause(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_on_resume(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_on_destroy(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA ugd;
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       if (!ug || !priv)
+               return;
+
+       ugd = (PMSG_SETTING_DATA)priv;
+
+       if (ugd->msgHandle) {
+               err = msg_close_msg_handle(&ugd->msgHandle);
+               if (err != MSG_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_open_msg_handle failed, Error=[%d]", err);
+               }
+       }
+
+       if (ugd->bg) {
+               evas_object_del(ugd->bg);
+               ugd->bg = NULL;
+       }
+
+       evas_object_del(ugd->layout_main);
+       ugd->layout_main = NULL;
+
+}
+
+static void __msg_ui_setting_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA ugd;
+
+       if (!ug || !priv)
+               return;
+
+       ugd = (PMSG_SETTING_DATA)priv;
+
+       switch (event) {
+               case UG_EVENT_LOW_MEMORY:
+                       break;
+               case UG_EVENT_LOW_BATTERY:
+                       break;
+               case UG_EVENT_LANG_CHANGE:
+                       break;
+               case UG_EVENT_REGION_CHANGE:
+
+                       ugd->locale = msg_common_get_default_locale();
+
+                       if (appcore_get_timeformat((enum appcore_time_format *)&ugd->time_format) < 0) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appcore_get_timeformat() is failed!!");
+                               ugd->time_format = APPCORE_TIME_FORMAT_UNKNOWN;
+                       }
+
+                       break;
+               default:
+                       break;
+       }
+}
+
+static void __msg_ui_setting_on_key_event(struct ui_gadget *ug, enum ug_key_event event, bundle *data, void *priv)
+{
+       D_ENTER;
+       D_LEAVE;
+}
+
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA ugd;
+
+       if (!ops)
+               return MSG_UI_RET_ERR;
+
+       ugd = calloc(1, sizeof(MSG_SETTING_DATA));
+       if (!ugd)
+               return MSG_UI_RET_ERR;
+
+       ops->create = __msg_ui_setting_on_create;
+       ops->start = __msg_ui_setting_on_start;
+       ops->pause = __msg_ui_setting_on_pause;
+       ops->resume = __msg_ui_setting_on_resume;
+       ops->destroy = __msg_ui_setting_on_destroy;
+       ops->message = __msg_ui_setting_on_message;
+       ops->event = __msg_ui_setting_on_event;
+       ops->key_event = __msg_ui_setting_on_key_event;
+       ops->priv = (void *)ugd;
+       ops->opt = UG_OPT_INDICATOR_ENABLE;
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA ugd;
+
+       if (!ops)
+               return;
+
+       ugd = (PMSG_SETTING_DATA)ops->priv;
+       if (ugd == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ugd is NULL");
+               return;
+       }
+
+       /* If msg-server isn't ready, message setting try to display error popup.
+        * In this case, popup should be destroyed in UG_MODULE_EXIT.
+        * Because, ug_create is failed. Therefore, only UG_MODULE_EXIT is called.
+        */
+       if (ugd->popup != NULL) {
+               evas_object_del(ugd->popup);
+               ugd->popup = NULL;
+       }
+
+       free(ugd);
+       ugd = NULL;
+
+}
+
+UG_MODULE_API int setting_plugin_reset(bundle *data, void *priv)
+{
+       /* To Do : Reset message settings. */
+
+       /* In case of success, it will return 0. */
+       return 0;
+}
diff --git a/setting/src/main/msg-ui-setting-main.c b/setting/src/main/msg-ui-setting-main.c
new file mode 100755 (executable)
index 0000000..1d99403
--- /dev/null
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-setting-main.h"
+
+
+static struct _msg_ui_setting_list_item main_menu_its[] = {
+       { "IDS_MSGF_BODY_TEXT_MESSAGES", msg_ui_setting_text_msg_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+
+static char *__msg_ui_setting_main_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_main_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_create_main_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+
+
+static PMSG_SETTING_DATA g_settingData = NULL;
+
+
+static char *
+__msg_ui_setting_main_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       int index = (int)data;
+
+       if (!strcmp(part, "elm.text")) {
+               if (main_menu_its[index].name) {
+                       if (strstr(main_menu_its[index].name, "IDS_COM") != NULL)
+                               return strdup(dgettext("sys_string", main_menu_its[index].name));
+                       else
+                               return strdup(dgettext(MESSAGE_PKGNAME, main_menu_its[index].name));
+               }
+       }
+       return NULL;
+}
+
+static void
+__msg_ui_setting_main_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+       int index = (int)data;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL");
+
+       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+
+       if (main_menu_its[index].func != NULL)
+               main_menu_its[index].func(settingData, obj, event_info);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *
+__msg_ui_setting_create_main_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *main_genlist;
+       int index = 0;
+
+       main_genlist = msg_ui_setting_common_create_genlist(parent);
+       settingData->main_genlist = main_genlist;
+
+       msg_ui_setting_common_append_genlist_separator(main_genlist, settingData);
+
+       settingData->main_itc.item_style = "dialogue.1text";
+       settingData->main_itc.func.text_get = __msg_ui_setting_main_gl_text_get;
+       settingData->main_itc.func.content_get = NULL;
+       settingData->main_itc.func.state_get = NULL;
+       settingData->main_itc.func.del = NULL;
+
+       for (index = 0; main_menu_its[index].name; index++) {
+               elm_genlist_item_append(main_genlist, &settingData->main_itc, (void *)index, NULL,
+                                       ELM_GENLIST_ITEM_NONE, __msg_ui_setting_main_gl_sel, (void *)index);
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return main_genlist;
+}
+
+PMSG_SETTING_DATA msg_ui_setting_get_data(void)
+{
+       if (g_settingData)
+               return g_settingData;
+       else
+               return NULL;
+}
+
+Evas_Object *msg_ui_setting_create_navigation_layout(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL");
+
+       Evas_Object *navi_frame;
+
+       navi_frame = elm_naviframe_add(parent);
+       elm_object_part_content_set(parent, "elm.swallow.content", navi_frame);
+
+       evas_object_show(navi_frame);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return navi_frame;
+}
+
+void msg_ui_setting_create_main_view(PMSG_SETTING_DATA settingData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_SETTING_DATA is NULL");
+
+       Evas_Object *main_layout;
+       Evas_Object *main_genlist;
+       Elm_Object_Item *navi_it;
+
+       Evas_Object *l_button;
+
+       /* Change background color from transparent to group_list. */
+       elm_object_style_set(settingData->bg, "group_list");
+
+       main_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+       main_genlist = __msg_ui_setting_create_main_menu(settingData->navi_frame, settingData);
+       elm_object_part_content_set(main_layout, "elm.swallow.content", main_genlist);
+
+       /* Create Left Button */
+       l_button = elm_button_add(settingData->navi_frame);
+
+       navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"), l_button, NULL, main_layout, NULL);
+
+       /* Style set should be called after elm_naviframe_item_push(). */
+       elm_object_style_set(l_button, "naviframe/back_btn/default");
+       evas_object_smart_callback_add(l_button, "clicked", msg_ui_setting_quit_cb, (void *)settingData);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_launch(PMSG_SETTING_DATA settingData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       /* Set global data. */
+       g_settingData = settingData;
+
+       /* Navigation Frame */
+       settingData->navi_frame = msg_ui_setting_create_navigation_layout(settingData->layout_main);
+
+       msg_ui_setting_create_main_view(settingData);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object *msg_ui_setting_create_layout_main(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL");
+
+       Evas_Object *layout;
+       layout = elm_layout_add(parent);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, layout == NULL, NULL, "Failed elm_layout_add.\n");
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, layout);
+       evas_object_show(layout);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return layout;
+}
diff --git a/setting/src/main/msg-ui-setting-msg-service-wrapper.c b/setting/src/main/msg-ui-setting-msg-service-wrapper.c
new file mode 100755 (executable)
index 0000000..73a8823
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-setting-msg-service-wrapper.h"
+
+
+int msg_ui_setting_msg_set_config(PMSG_SETTING_DATA settingData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       MSG_SETTING_S setting_option;
+
+       switch (settingData->msg_setting.type) {
+       case MSG_UI_SETTING_TYPE_SMS_SEND:
+               setting_option = settingData->msg_setting.sms_send_opt;
+               setting_option.type = MSG_SMS_SENDOPT;
+               break;
+       default:
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[FAIL] TYPE err %d \n", settingData->msg_setting.type);
+               return MSG_UI_RET_ERR;
+       }
+
+       err = msg_set_config(settingData->msgHandle, &setting_option);
+
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ASSERT, err != MSG_SUCCESS, -1, "[FAIL] msg_set_config of MSG FW : err %d \n", err);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return err;
+}
+
+int msg_ui_setting_msg_get_config(PMSG_SETTING_DATA settingData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       MSG_SETTING_S *setting_option;
+
+       switch (settingData->msg_setting.type) {
+       case MSG_UI_SETTING_TYPE_SMS_SEND:
+               memset(&(settingData->msg_setting.sms_send_opt), 0x00, sizeof(MSG_OPTION_TYPE_T)+sizeof(MSG_SMS_SENDOPT_S));
+               settingData->msg_setting.sms_send_opt.type = MSG_SMS_SENDOPT;
+               setting_option = &settingData->msg_setting.sms_send_opt;
+               break;
+       default:
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[FAIL] TYPE err %d \n", settingData->msg_setting.type);
+               return MSG_UI_RET_ERR;
+       }
+
+       err = msg_get_config(settingData->msgHandle, setting_option);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return err;
+}
+
diff --git a/setting/src/text/msg-ui-setting-text-message.c b/setting/src/text/msg-ui-setting-text-message.c
new file mode 100755 (executable)
index 0000000..4d48d0b
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-setting-main.h"
+#include "msg-ui-setting-text-message.h"
+
+
+static struct _msg_ui_setting_mixed_list_item text_menu_its[] = {
+       { 1, "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT", NULL, ELM_GENLIST_ITEM_NONE },
+       /* do not delete below */
+       { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+
+/*============================================================================
+                               STATIC FUNCTION DEFINE
+=============================================================================*/
+static char *__msg_ui_setting_text_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_text_save_req_delivery_report(void *data);
+static void __msg_ui_setting_text_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_text_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_text_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+
+
+/*============================================================================
+                               FUNCTION IMPLEMENT
+=============================================================================*/
+
+/************************
+ ***  Text message menu ***
+ *************************/
+
+static char *
+__msg_ui_setting_text_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       int index = (int)data;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+       if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
+               if (text_menu_its[index].name) {
+                       if (strstr(text_menu_its[index].name, "IDS_COM") != NULL)
+                               return strdup(dgettext("sys_string", text_menu_its[index].name));
+                       else
+                               return strdup(dgettext(MESSAGE_PKGNAME, text_menu_its[index].name));
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+       }
+
+       return NULL;
+}
+
+static void
+__msg_ui_setting_text_save_req_delivery_report(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+       Eina_Bool set_val = EINA_FALSE;
+
+       set_val = elm_check_state_get(settingData->list.text_msg.req_delivery_rep_check);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+       settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMS_SEND;
+       settingData->msg_setting.sms_send_opt.option.smsSendOpt.bDeliveryReport = (unsigned char)set_val;
+
+       msg_ui_setting_msg_set_config(settingData);
+}
+
+static void
+__msg_ui_setting_text_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       if (obj == settingData->list.text_msg.req_delivery_rep_check)
+               __msg_ui_setting_text_save_req_delivery_report(settingData);
+       else
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid obj = 0x%x", obj);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *
+__msg_ui_setting_text_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       int index = (int)data;
+       Evas_Object *check;
+       PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+               if (index == MSG_UI_SETTING_TEXT_MENU_REQ_DELIVERY_REPORT) {
+                       check = elm_check_add(obj);
+                       settingData->list.text_msg.req_delivery_rep_check = check;
+
+                       if (settingData->msg_setting.sms_send_opt.option.smsSendOpt.bDeliveryReport == EINA_TRUE)
+                               elm_check_state_set(check, EINA_TRUE);
+                       else
+                               elm_check_state_set(check, EINA_FALSE);
+
+                       elm_object_style_set(check, "on&off");
+
+                       evas_object_propagate_events_set(check, EINA_FALSE);
+                       evas_object_smart_callback_add(check, "changed", __msg_ui_setting_text_gl_check_clicked_cb, settingData);
+
+                       return check;
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index);
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+       }
+
+       return NULL;
+}
+
+static void
+__msg_ui_setting_text_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+       int index = (int)data;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL");
+
+       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+
+       if (index == MSG_UI_SETTING_TEXT_MENU_REQ_DELIVERY_REPORT) {
+               Eina_Bool set_val = EINA_FALSE;
+
+               set_val = elm_check_state_get(settingData->list.text_msg.req_delivery_rep_check);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+               elm_check_state_set(settingData->list.text_msg.req_delivery_rep_check, !set_val);
+
+               __msg_ui_setting_text_save_req_delivery_report((void *)settingData);
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid data : index = %d", index);
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *
+__msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *text_genlist;
+
+       int index = 0;
+
+       text_genlist = msg_ui_setting_common_create_genlist(parent);
+       settingData->list.text_msg.text_genlist = text_genlist;
+
+       msg_ui_setting_common_append_genlist_separator(text_genlist, settingData);
+
+       settingData->list.text_msg.text_1line_1icon_itc.item_style = "dialogue/1text.1icon";
+       settingData->list.text_msg.text_1line_1icon_itc.func.text_get = __msg_ui_setting_text_gl_text_get;
+       settingData->list.text_msg.text_1line_1icon_itc.func.content_get = __msg_ui_setting_text_gl_content_get;
+       settingData->list.text_msg.text_1line_1icon_itc.func.state_get = NULL;
+       settingData->list.text_msg.text_1line_1icon_itc.func.del = NULL;
+
+       for (index = 0; text_menu_its[index].name; index++) {
+               elm_genlist_item_append(text_genlist, &settingData->list.text_msg.text_1line_1icon_itc, (void *)index,
+                       NULL, text_menu_its[index].type, __msg_ui_setting_text_gl_sel, (void *)index);
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return text_genlist;
+}
+
+void msg_ui_setting_text_create_view(void *data, Evas_Object *obj, void *event_info)
+{
+       PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+       Evas_Object *text_layout;
+       Evas_Object *text_genlist;
+       Elm_Object_Item *navi_it;
+
+       settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMS_SEND;
+       msg_ui_setting_msg_get_config(settingData);
+
+       /* Initialize global variable. */
+       memset(&settingData->list.text_msg, 0x0, sizeof(settingData->list.text_msg));
+
+       text_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+       text_genlist = __msg_ui_setting_text_create_menu(settingData->navi_frame, settingData);
+       elm_object_part_content_set(text_layout, "elm.swallow.content", text_genlist);
+
+       navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_TEXT_MESSAGES"), NULL, NULL, text_layout, NULL);
+
+}
+
diff --git a/thread/include/msg-ui-thread-main.h b/thread/include/msg-ui-thread-main.h
new file mode 100755 (executable)
index 0000000..b37a8e4
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 __DEF_MSG_UI_THREAD_MAIN_H__
+#define __DEF_MSG_UI_THREAD_MAIN_H__
+
+#include <stdio.h>
+
+#include <MsgStorageTypes.h>
+#include <MapiTransport.h>
+#include <MapiControl.h>
+#include <MapiStorage.h>
+#include <MapiMessage.h>
+
+#include <libintl.h>
+#include <bundle.h>
+#include <appcore-efl.h>
+#include <Ecore.h>
+#include <Ecore_IMF.h>
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+#include <utilX.h>
+#include <time.h>
+#include <contacts-svc.h>
+
+#include "message.h"
+#include "msg-ui-util.h"
+#include "msg-ui-common-utility.h"
+
+#define MSG_THREAD_THEME       EDJDIR"/thread_genlist.edj"
+#define MSG_THREAD_CONTROLBAR_ITEM_NUM (4)
+
+typedef enum {
+       THREAD_NORMAL_VIEW = 0,
+       THREAD_EDIT_VIEW,
+       THREAD_UNLOAD_VIEW, /* when it calls other gadgets or views. */
+} ThreadViewMode;
+
+typedef enum {
+       THREAD_SEARCH_OFF = 0,
+       THREAD_SEARCH_ON,
+} ThreadSearchMode;
+
+typedef struct {
+       MSG_THREAD_ID_T threadId;
+       char threadAddr[DEF_THREAD_ADDR_LEN+1];
+       char threadName[DEF_THREAD_NAME_LEN+1];
+       char threadData[DEF_BUF_LEN_S+1];
+       time_t *threadTime;
+       MSG_DIRECTION_TYPE_T direction;
+       MSG_CONTACT_ID_T contactId;
+       int unreadCnt;
+       int smsCnt;
+       int msgType;
+
+       Evas_Object *chk;
+       Eina_Bool isCheck;
+} MSG_APP_THREAD_DATA_S, *PMSG_APP_THREAD_DATA_S;
+
+typedef struct _MSG_THREAD_DATA {
+       Elm_Theme *th;
+
+       Evas_Object *win_main;
+       Evas_Object *navi_frame;
+       Evas_Object *conform;
+       Elm_Object_Item *nf_it;
+       Evas_Object *toolbar;
+       Evas_Object *content_ly;
+       Evas_Object *noc_ly;
+       Evas_Object *sel_all_ly;
+       Evas_Object *back_btn;
+
+       Evas_Object *sel_all_box;
+       Eina_Bool sel_all_checked;
+
+       Ecore_IMF_Context *imf_ctx;
+
+       Elm_Object_Item *toolbar_item[MSG_THREAD_CONTROLBAR_ITEM_NUM];
+
+       Evas_Object *genlist;
+       Evas_Object *noc;
+
+       Evas_Object *searchbar;
+
+       Evas_Object *tickernoti;
+       Ecore_Timer *e_timer;
+
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       Evas_Object *progresslabel;
+
+       Evas_Object *select_info;
+       Evas_Object *selectioninfo_layout;
+
+       Elm_Genlist_Item_Class *itc;
+
+       Elm_Genlist_Item_Class itc_thread;
+       Elm_Genlist_Item_Class itc_empty;
+
+       MSG_HANDLE_T msgHandle;
+       ThreadViewMode viewmode;
+       ThreadSearchMode search_mode;
+       int app_state;
+
+       Elm_Object_Item *sel_gen_item;
+       int sel_thread_id;
+
+       Ecore_Thread *del_thread;
+
+       bundle *msg_b;
+
+       char *time_12h_ptn;
+       char *time_24h_ptn;
+       char *date_ptn;
+       msg_time_format time_fmt;
+       char locale[DEF_BUF_LEN];
+       int noti_fd;
+
+       Eina_List *chk_list;
+       int del_index;
+       int thread_cnt;
+       int check_cnt;
+
+       bool isIncomingMsg;     /* Check there is new incoming message when it back from edit mode to normal. */
+} MSG_THREAD_DATA, *PMSG_THREAD_DATA;
+
+/* MAIN */
+#define MSG_THREAD_UNREAD_BADGE \
+       IMGDIR"/M01_btn_Unread_message.png"
+#define MSG_THREAD_OTA_BADGE \
+       IMGDIR"/M01_icon_OTA.png"
+#define MSG_THREAD_PUSH_BADGE \
+       IMGDIR"/M01_icon_Push.png"
+#define MSG_THREAD_BROADCAST_BADGE \
+       IMGDIR"/M01_icon_broadcasting.png"
+
+#define MSG_THREAD_POPUP_DATA  "popup_data"
+#define MSG_THREAD_DEL_CONFIRM "del_confirm"
+
+void *msg_ui_thread_init_thread_data(struct appdata *ad);
+void msg_ui_thread_deinit_thread_data(void *data);
+
+void msg_ui_thread_load_thread_view(void *data, bundle *b);
+void msg_ui_thread_reset_thread_view(void *data, bundle *b);
+
+void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData);
+Evas_Object *msg_ui_thread_create_content_layout(PMSG_THREAD_DATA pData);
+Evas_Object *msg_ui_thread_create_nocontent_layout(PMSG_THREAD_DATA pData);
+Evas_Object *msg_ui_thread_create_layout_main(Evas_Object *parent);
+Evas_Object *msg_ui_thread_create_genlist(PMSG_THREAD_DATA pData);
+Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pDatat);
+
+void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData);
+
+PMSG_THREAD_DATA msg_ui_thread_get_data(void);
+void msg_ui_thread_add_navi_controlbar_item(PMSG_THREAD_DATA pData);
+
+
+/* THREAD LIST */
+void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_DATA_S thread_data, msg_thread_view_t msgThreadInfo);
+void msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_gl_empty_sel(void *data, Evas_Object *obj, void *event_info);
+void  msg_ui_thread_list_load(PMSG_THREAD_DATA ThreadData);
+void msg_ui_thread_list_update(PMSG_THREAD_DATA ThreadData);
+void msg_ui_thread_list_item_update(PMSG_THREAD_DATA ThreadData, MSG_THREAD_ID_T threadId);
+void msg_ui_thread_genlist_style_set(PMSG_THREAD_DATA ThreadData);
+void msg_ui_thread_genlist_frame_style_set(PMSG_THREAD_DATA ThreadData);
+void msg_ui_thread_gl_mode_right(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_gl_mode_left(void *data, Evas_Object *obj, void *event_info);
+
+/* THREAD CALLBACK */
+void msg_ui_thread_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T storageChangeType, MSG_MSGID_LIST_S *pMsgIdList, void *user_param);
+void msg_ui_thread_ctlbar_del_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_info);
+
+void msg_ui_thread_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_list_checked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_searchbar_entry_focus_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_searchbar_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_searchbar_entry_click_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_searchbar_cancel_click_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+void msg_ui_thread_timezone_change_cb(void *data);
+
+/* THREAD UTILS */
+void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData);
+void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData);
+
+bundle *msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data);
+
+void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_DATA pData);
+void msg_ui_thread_show_normal_mode(PMSG_THREAD_DATA pData);
+void msg_ui_thread_show_split_view(PMSG_THREAD_DATA pData);
+void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_DATA pData, int thread_id);
+void msg_ui_thread_show_notify(PMSG_THREAD_DATA threadData, const char *msg);
+void msg_ui_thread_show_del_popup(PMSG_THREAD_DATA threadData, const char *msg);
+Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_DATA threadData, int count);
+void msg_ui_thread_show_select_info(PMSG_THREAD_DATA pData);
+
+void msg_ui_thread_set_app_state(int app_state);
+int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData);
+
+#endif /* __DEF_MSG_UI_THREAD_MAIN_H__ */
diff --git a/thread/src/msg-ui-thread-callback.c b/thread/src/msg-ui-thread-callback.c
new file mode 100755 (executable)
index 0000000..3a2dc7d
--- /dev/null
@@ -0,0 +1,589 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-thread-main.h"
+
+static Eina_Bool  _search_list_load(void *data);
+
+
+static void _sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       pData->sel_all_checked = !pData->sel_all_checked;
+       elm_check_state_pointer_set(pData->sel_all_box, &pData->sel_all_checked);
+
+       msg_ui_thread_sel_all_clicked_cb(data, NULL, NULL);
+
+       MSG_UI_LEAVE();
+}
+
+static void __add_navi_edit_controlbar(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER();
+
+       if (!pData)
+               return;
+
+       int i;
+
+       for (i = 0; i < MSG_THREAD_CONTROLBAR_ITEM_NUM; i++) {
+               if (pData->toolbar_item[i])
+                       elm_object_item_del(pData->toolbar_item[i]);
+       }
+
+       pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \
+                                                                                                                               msg_ui_thread_ctlbar_del_cb, (void *)pData);
+       pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL);
+       pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL);
+       pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_CANCEL, NULL, \
+                                                                                                                               msg_ui_thread_ctlbar_cancel_cb, (void *)pData);
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE);
+
+       MSG_UI_LEAVE();
+}
+
+static void __add_navi_select_all_ly(PMSG_THREAD_DATA pData)
+{
+       if (!pData->sel_all_ly) {
+               pData->sel_all_ly = elm_layout_add(pData->navi_frame);
+               elm_layout_theme_set(pData->sel_all_ly, "genlist", "item", "select_all/default");
+               evas_object_size_hint_weight_set(pData->sel_all_ly, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+               evas_object_size_hint_align_set(pData->sel_all_ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_event_callback_add(pData->sel_all_ly, EVAS_CALLBACK_MOUSE_DOWN, _sel_all_ly_mouse_down_cb, pData);
+
+               pData->sel_all_box = elm_check_add(pData->sel_all_ly);
+               elm_check_state_pointer_set(pData->sel_all_box, &pData->sel_all_checked);
+               evas_object_propagate_events_set(pData->sel_all_box, EINA_FALSE);
+               evas_object_smart_callback_add(pData->sel_all_box, "changed", msg_ui_thread_sel_all_clicked_cb, pData);
+               evas_object_show(pData->sel_all_box);
+
+               elm_object_part_content_set(pData->sel_all_ly, "elm.icon", pData->sel_all_box);
+               elm_object_part_text_set(pData->sel_all_ly, "elm.text", dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
+       }
+
+       evas_object_show(pData->sel_all_ly);
+       elm_object_part_content_unset(pData->content_ly, "sel_all");
+       evas_object_hide(pData->searchbar);
+       elm_object_part_content_set(pData->content_ly, "sel_all", pData->sel_all_ly);
+}
+
+static void _del_finish(PMSG_THREAD_DATA ThreadData)
+{
+
+       if (ThreadData->popup) {
+               evas_object_del(ThreadData->popup);
+               ThreadData->popup = NULL;
+       }
+
+       ThreadData->del_thread = NULL;
+
+       msg_ui_thread_show_normal_mode(ThreadData);
+       msg_ui_thread_list_load(ThreadData);
+
+}
+
+static void _del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !thread || !data || !msg_data);
+
+       PMSG_THREAD_DATA ThreadData = (PMSG_THREAD_DATA)data;
+       char buf[DEF_BUF_LEN_S] = {0,};
+       int *ret = msg_data;
+
+       if (*ret == MSG_SUCCESS) {
+               if (ThreadData->progressbar) {
+                       snprintf(buf, sizeof(buf), "%d/%d %s", ThreadData->del_index+1, ThreadData->check_cnt, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+                       elm_object_text_set(ThreadData->progresslabel, buf);
+                       elm_progressbar_value_set(ThreadData->progressbar, (double)(ThreadData->del_index+1)/ThreadData->check_cnt);
+               }
+       } else {
+               msg_ui_thread_show_notify(ThreadData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+               _del_finish(ThreadData);
+               return;
+       }
+
+       if (ThreadData->del_index + 1 == ThreadData->check_cnt)
+               _del_finish(ThreadData);
+       else
+               ThreadData->del_index++;
+
+       if (ret)
+               free(ret);
+
+}
+
+static void _del_thread_fn(void *data, Ecore_Thread *thread)
+{
+       D_ENTER;
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       PMSG_THREAD_DATA ThreadData = (PMSG_THREAD_DATA)data;
+
+       Eina_List *l;
+       PMSG_APP_THREAD_DATA_S item_data = NULL;
+
+       EINA_LIST_FOREACH(ThreadData->chk_list, l, item_data) {
+               int *ret = calloc(1, sizeof(int));
+
+               if (item_data) {
+                       *ret = msg_delete_thread_message_list(ThreadData->msgHandle, item_data->threadId);
+
+                       ecore_thread_feedback(thread, (void *)ret);
+
+                       if (*ret != MSG_SUCCESS)
+                               return;
+               } else {
+                       *ret = MSG_ERR_NULL_POINTER;
+                       ecore_thread_feedback(thread, (void *)ret);
+                       return;
+               }
+       }
+
+}
+
+static void _insert_and_select_gen_item(PMSG_THREAD_DATA ThreadData)
+{
+       int sel_thread_id = 0;
+
+       if (ThreadData->sel_gen_item)
+               sel_thread_id = ThreadData->sel_thread_id;
+
+       if (ThreadData->search_mode == THREAD_SEARCH_ON)
+               _search_list_load(ThreadData);
+       else
+               msg_ui_thread_list_load(ThreadData);
+
+       msg_ui_thread_select_item_by_thread_id(ThreadData, sel_thread_id);
+
+}
+
+void msg_ui_thread_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T type, MSG_MSGID_LIST_S *pMsgIdList, void *user_param)
+{
+       MSG_UI_ENTER();
+
+       if (!user_param || !pMsgIdList)
+               return;
+
+       PMSG_THREAD_DATA ThreadData = user_param;
+       if (msg_ui_thread_get_app_state(ThreadData) == MSG_UI_STATE_DESTROY)
+               return;
+
+       if (type == MSG_STORAGE_CHANGE_CONTACT) {
+               msg_ui_thread_list_update(ThreadData);
+       } else if (type == MSG_STORAGE_CHANGE_INSERT) {
+               if(ThreadData->viewmode == THREAD_EDIT_VIEW) {
+                       ThreadData->isIncomingMsg = true;
+                       D_MSG("Current mode is EDIT.");
+                       return;
+               }
+               _insert_and_select_gen_item(ThreadData);
+       } else if (type == MSG_STORAGE_CHANGE_UPDATE) {
+               int i;
+
+               for (i = 0; i < pMsgIdList->nCount; i++) {
+                       msg_message_t msg = msg_new_message();
+                       MSG_SENDINGOPT_S sendOpt = {0};
+                       MSG_ERROR_T err = MSG_SUCCESS;
+
+                       err = msg_get_message(ThreadData->msgHandle, pMsgIdList->msgIdList[i], msg, &sendOpt);
+
+                       if (err != MSG_SUCCESS) {
+                               msg_release_message(&msg);
+                               return;
+                       }
+
+                       msg_ui_thread_list_item_update(ThreadData, msg_get_ith_thread_id(msg, 0));
+
+                       msg_release_message(&msg);
+               }
+       }
+
+       MSG_UI_LEAVE();
+}
+
+
+void msg_ui_thread_ctlbar_del_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pData->del_thread);
+
+       if (pData->popup) {
+               evas_object_del(pData->popup);
+               pData->popup = NULL;
+       }
+
+       pData->popup = msg_ui_thread_show_notify_with_progressbar(pData, pData->check_cnt);
+
+       pData->del_thread = ecore_thread_feedback_run(_del_thread_fn, _del_thread_feedback_fn, NULL, NULL, (void *)pData, EINA_TRUE);
+
+}
+
+void msg_ui_thread_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       char buf[DEF_BUF_LEN_S] = {0};
+       pData->viewmode = THREAD_EDIT_VIEW;
+       pData->check_cnt = 0;
+       pData->del_index = 0;
+
+       elm_genlist_decorate_mode_set(pData->genlist, EINA_TRUE);
+       elm_genlist_select_mode_set(pData->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+
+       snprintf(buf, sizeof(buf), "%s %s", dgettext("sys_string", "IDS_COM_SK_SELECT"), dgettext("sys_string", "IDS_COM_BODY_MESSAGES"));
+       elm_object_item_text_set(pData->nf_it, buf);
+
+       __add_navi_edit_controlbar(pData);
+       __add_navi_select_all_ly(pData);
+
+       elm_object_item_part_content_unset(pData->nf_it, "prev_btn");
+       if (pData->back_btn) {
+               evas_object_del(pData->back_btn);
+               pData->back_btn = NULL;
+       }
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       bundle *b = bundle_create();
+
+       if (!b)
+               return;
+
+       if (msg_ui_load_composer_ug(b) == MSG_UI_RET_ERR)
+               D_MSG("Failed to load composer ug");
+
+       bundle_free(b);
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       if (pData->isIncomingMsg == true) {
+               msg_ui_thread_list_load(pData);
+               pData->isIncomingMsg = false;
+       }
+
+       msg_ui_thread_show_normal_mode(pData);
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+       PMSG_APP_THREAD_DATA_S item_data = NULL;
+       Elm_Object_Item *it;
+
+       if (pData->sel_all_checked)
+               pData->check_cnt = pData->thread_cnt;
+       else {
+               pData->check_cnt = 0;
+               pData->chk_list = eina_list_free(pData->chk_list);
+       }
+
+       it = elm_genlist_first_item_get(pData->genlist);
+
+       while (it) {
+               item_data = elm_object_item_data_get(it);
+               if (item_data)
+                       item_data->isCheck = pData->sel_all_checked;
+
+               if (pData->sel_all_checked && !eina_list_data_find(pData->chk_list, item_data))
+                       pData->chk_list = eina_list_append(pData->chk_list, item_data);
+
+               it = elm_genlist_item_next_get(it);
+       }
+
+       elm_genlist_realized_items_update(pData->genlist);
+
+       msg_ui_thread_show_select_info(pData);
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_list_checked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+       PMSG_APP_THREAD_DATA_S item_data = NULL;
+
+       item_data = evas_object_data_get(obj, "item_data");
+
+       if (item_data->isCheck) {
+               pData->check_cnt++;
+               if (!eina_list_data_find(pData->chk_list, item_data))
+                       pData->chk_list = eina_list_append(pData->chk_list, item_data);
+       } else {
+               pData->check_cnt--;
+               pData->chk_list = eina_list_remove(pData->chk_list, item_data);
+       }
+
+       if (pData->thread_cnt == pData->check_cnt)
+               elm_check_state_set(pData->sel_all_box, EINA_TRUE);
+       else
+               elm_check_state_set(pData->sel_all_box, EINA_FALSE);
+
+       msg_ui_thread_show_select_info(pData);
+
+       MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER();
+
+       if (!data)
+               return;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       elm_win_lower(pData->win_main);
+
+       MSG_UI_LEAVE();
+}
+
+static Eina_Bool  _search_list_load(void *data)
+{
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !data, EINA_FALSE);
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       Evas_Object *entry = NULL;
+       char *search_str = NULL;
+
+       MSG_THREAD_VIEW_LIST_S search_list;
+       PMSG_APP_THREAD_DATA_S item_data = NULL;
+       int idx = 0;
+       MSG_ERROR_T err = MSG_SUCCESS;
+
+       if (pData->searchbar) {
+               entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content");
+               search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str);
+
+       err =  msg_search_message_for_thread_view(pData->msgHandle, search_str, &search_list);
+
+       if (search_str)
+               free(search_str);
+
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_search_message failed!!");
+               msg_ui_thread_list_load(pData);
+               return EINA_FALSE;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search result [ count = %d ] ", search_list.nCount);
+
+       Evas_Object *swl_ly = elm_object_part_content_get(pData->content_ly, "thread_list");
+
+       if (swl_ly != pData->genlist) {
+               evas_object_hide(swl_ly);
+               elm_object_part_content_unset(pData->content_ly, "thread_list");
+               elm_object_part_content_set(pData->content_ly, "thread_list", pData->genlist);
+       }
+
+       if (search_list.nCount > 0) {
+               elm_genlist_clear(pData->genlist);
+
+               while (idx < search_list.nCount) {
+                       item_data = (PMSG_APP_THREAD_DATA_S)calloc(1, sizeof(MSG_APP_THREAD_DATA_S));
+                       msg_ui_thread_set_msg_data(item_data, search_list.msgThreadInfo[idx]);
+
+                       elm_genlist_item_append(pData->genlist, pData->itc, item_data, \
+                                                               NULL, ELM_GENLIST_ITEM_NONE, \
+                                                               msg_ui_thread_gl_sel, pData);
+                       idx++;
+               }
+       } else {
+               elm_genlist_clear(pData->genlist);
+
+               elm_genlist_item_append(pData->genlist, &pData->itc_empty, NULL, \
+                                                               NULL, ELM_GENLIST_ITEM_NONE, \
+                                                               msg_ui_thread_gl_empty_sel, NULL);
+       }
+
+       msg_release_thread_view_list(&search_list);
+
+       return EINA_FALSE;
+
+}
+
+void msg_ui_thread_searchbar_entry_focus_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+       pData->search_mode = THREAD_SEARCH_ON;
+
+       if (!elm_entry_is_empty(obj))
+               elm_object_signal_emit(pData->searchbar, "elm,state,eraser,show", "elm");
+
+       elm_object_signal_emit(pData->searchbar, "elm,state,guidetext,hide", "elm");
+       elm_object_signal_emit(pData->searchbar, "cancel,in", "");
+
+       evas_object_smart_callback_add(obj, "changed",  msg_ui_thread_searchbar_entry_change_cb, data);
+
+       D_LEAVE;
+}
+
+void msg_ui_thread_searchbar_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       evas_object_smart_callback_del(obj, "changed", msg_ui_thread_searchbar_entry_change_cb);
+
+       if (!data)
+               return;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       elm_object_signal_emit(pData->searchbar, "cancel,out", "");
+       elm_object_signal_emit(pData->searchbar, "elm,state,eraser,hide", "elm");
+
+       if (elm_entry_is_empty(obj)) {
+               elm_object_signal_emit(pData->searchbar, "elm,state,guidetext,show", "elm");
+               pData->search_mode = THREAD_SEARCH_OFF;
+       }
+
+       D_LEAVE;
+}
+
+void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       if (!data)
+               return;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       if (elm_object_focus_get(obj)) {
+               if (elm_entry_is_empty(obj))
+                       elm_object_signal_emit(pData->searchbar, "elm,state,eraser,hide", "elm");
+               else
+                       elm_object_signal_emit(pData->searchbar, "elm,state,eraser,show", "elm");
+       }
+
+       _search_list_load(data);
+
+       D_LEAVE;
+}
+
+void msg_ui_thread_searchbar_cancel_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       D_ENTER;
+
+       if (!data)
+               return;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+       pData->search_mode = THREAD_SEARCH_OFF;
+
+       Evas_Object *entry = NULL;
+       entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content");
+       elm_object_text_set(entry, "");
+
+       evas_object_hide(obj);
+
+       elm_object_focus_set(pData->back_btn, EINA_TRUE);
+
+       msg_ui_thread_list_load(pData);
+
+       D_LEAVE;
+}
+
+void msg_ui_thread_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       D_ENTER;
+
+       if (!data)
+               return;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       Evas_Object *entry = NULL;
+       entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content");
+       elm_object_text_set(entry, "");
+
+       elm_object_signal_emit(pData->searchbar, "elm,state,eraser,hide", "elm");
+
+       D_LEAVE;
+}
+
+void msg_ui_thread_timezone_change_cb(void *data)
+{
+       D_ENTER;
+
+       PMSG_THREAD_DATA ThreadData = (PMSG_THREAD_DATA)data;
+
+       char *timezone_id = NULL;
+       UChar utimezone_id[DEF_BUF_LEN] = {0,};
+       UErrorCode status = U_ZERO_ERROR;
+
+       timezone_id = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
+
+       if (!timezone_id)
+               return;
+
+       u_uastrcpy(utimezone_id, timezone_id);
+
+       ucal_setDefaultTimeZone(utimezone_id, &status);
+
+       if (U_FAILURE(status))
+               return;
+
+       msg_ui_thread_get_locale(ThreadData);
+       msg_ui_thread_get_time_format(ThreadData);
+       ThreadData->time_12h_ptn = msg_common_get_date_best_pattern(ThreadData->locale, MSG_UI_TIME_PATTERN_12H);
+       ThreadData->time_24h_ptn = msg_common_get_date_best_pattern(ThreadData->locale, MSG_UI_TIME_PATTERN_24H);
+       ThreadData->date_ptn = msg_common_get_date_best_pattern(ThreadData->locale, UDAT_YEAR_NUM_MONTH_DAY);
+
+       elm_genlist_realized_items_update(ThreadData->genlist);
+
+       D_LEAVE;
+}
+
diff --git a/thread/src/msg-ui-thread-list.c b/thread/src/msg-ui-thread-list.c
new file mode 100755 (executable)
index 0000000..ccaf24d
--- /dev/null
@@ -0,0 +1,497 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-thread-main.h"
+
+int msg_ui_thread_init_genlist(PMSG_THREAD_DATA ThreadData);
+char *msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part);
+Evas_Object *msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part);
+void msg_ui_thread_gl_del(void *data, Evas_Object *obj);
+char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part);
+
+int msg_ui_thread_init_genlist(PMSG_THREAD_DATA ThreadData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (ThreadData->genlist)
+               elm_genlist_clear(ThreadData->genlist);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return MSG_UI_RET_SUCCESS;
+}
+
+void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_DATA_S thread_data, msg_thread_view_t msgThreadInfo)
+{
+       if (thread_data == NULL || msgThreadInfo == NULL)
+               return;
+
+       thread_data->threadId = msg_thread_view_get_thread_id(msgThreadInfo);
+
+       bzero(thread_data->threadAddr, sizeof(thread_data->threadAddr));
+       strncpy(thread_data->threadAddr, msg_thread_view_get_address(msgThreadInfo), DEF_THREAD_ADDR_LEN);
+
+       bzero(thread_data->threadName, sizeof(thread_data->threadName));
+       strncpy(thread_data->threadName, msg_thread_view_get_name(msgThreadInfo), DEF_THREAD_NAME_LEN);
+
+       bzero(thread_data->threadData, sizeof(thread_data->threadData));
+       strncpy(thread_data->threadData, msg_thread_view_get_data(msgThreadInfo), DEF_BUF_LEN_S);
+
+       if (thread_data->threadTime == NULL)
+               thread_data->threadTime = (time_t *) calloc(1, sizeof(time_t));
+
+       if (thread_data->threadTime) {
+               bzero(thread_data->threadTime, sizeof(time_t));
+               memcpy(thread_data->threadTime, msg_thread_view_get_time(msgThreadInfo), sizeof(time_t));
+       }
+
+       thread_data->direction = msg_thread_view_get_direction(msgThreadInfo);
+       thread_data->contactId = msg_thread_view_get_contact_id(msgThreadInfo);
+       thread_data->smsCnt = msg_thread_view_get_sms_cnt(msgThreadInfo);
+       thread_data->msgType = msg_thread_view_get_message_type(msgThreadInfo);
+
+       PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+       if (pData && pData->sel_thread_id == thread_data->threadId)
+               thread_data->unreadCnt = 0;
+       else
+               thread_data->unreadCnt = msg_thread_view_get_unread_cnt(msgThreadInfo);
+
+}
+
+char *msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+
+       PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+       PMSG_APP_THREAD_DATA_S item_data = (PMSG_APP_THREAD_DATA_S) data;
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pData || !item_data, NULL);
+
+       time_t *msg_t;
+       time_t cur_t;
+       unsigned long int msg_day, cur_day;
+       int diffday;
+       struct tm msg_time;
+       struct tm cur_time;
+       char buf[DEF_BUF_LEN] = { 0, };
+
+       if (g_strcmp0(part, "elm.text.1") == 0) {
+               if (item_data->contactId > 0) {
+                       if (item_data->threadName[0] != '\0')
+                               snprintf(buf, sizeof(buf), "%s", item_data->threadName);
+                       else
+                               snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
+               }
+
+               else {
+                       if (item_data->threadAddr[0] != '\0')
+                               snprintf(buf, sizeof(buf), "%s", item_data->threadAddr);
+                       else
+                               snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+               }
+       } else if (g_strcmp0(part, "elm.text.2") == 0) {
+               int idx = 0;
+               char msg[DEF_BUF_LEN] = { 0, };
+
+               if (item_data->threadData[0] != '\0') {
+                       strncpy(msg, item_data->threadData, sizeof(msg) - 1);
+                       while (msg[idx]) {
+                               if (g_ascii_iscntrl(msg[idx]))
+                                       msg[idx] = ' ';
+                               idx++;
+                       }
+                       snprintf(buf, sizeof(buf), "%s", msg);
+               }
+       } else if (g_strcmp0(part, "elm.text.3") == 0) {
+               char *date_str = NULL;
+
+               msg_t = item_data->threadTime;
+               cur_t = time(NULL);
+
+               localtime_r(msg_t, &msg_time);
+               localtime_r(&cur_t, &cur_time);
+
+               msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4;
+               cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4;
+
+               diffday = cur_day - msg_day;
+
+               if (diffday == 1)
+                       snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_YESTERDAY"));
+               else if (diffday > 1) {
+                       date_str = msg_common_get_formatted_date(pData->locale, pData->date_ptn, msg_t);
+                       snprintf(buf, sizeof(buf), " %s ", date_str);
+               } else {
+                       if (pData->time_fmt == MSG_TIME_FORMAT_24H) {
+                               date_str = msg_common_get_formatted_date(pData->locale, pData->time_24h_ptn, msg_t);
+                               snprintf(buf, sizeof(buf), " %s ", date_str);
+                       } else { /* MSG_TIME_FORMAT_12H */
+                               date_str = msg_common_get_formatted_date(pData->locale, pData->time_12h_ptn, msg_t);
+                               snprintf(buf, sizeof(buf), " %s ", date_str);
+                       }
+               }
+
+               if (date_str)
+                       free(date_str);
+       } else if (g_strcmp0(part, "elm.badge.text") == 0) {
+               if (item_data->unreadCnt > 0) {
+                       snprintf(buf, sizeof(buf), "%d", item_data->unreadCnt);
+               }
+       } else if (g_strcmp0(part, "elm.slide.text.1") == 0) {
+               if (item_data->contactId > 0) {
+                       if (item_data->threadName[0] != '\0')
+                               snprintf(buf, sizeof(buf), "%s", item_data->threadName);
+                       else
+                               snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
+               } else {
+                       if (item_data->threadAddr[0] != '\0')
+                               snprintf(buf, sizeof(buf), "%s", item_data->threadAddr);
+                       else
+                               snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+               }
+       }
+
+       return strdup(buf);
+}
+
+Evas_Object *msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       PMSG_APP_THREAD_DATA_S item_data = (PMSG_APP_THREAD_DATA_S) data;
+       PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pData || !item_data, NULL);
+
+       Evas_Object *ic = NULL;
+
+       if (g_strcmp0(part, "elm.icon") == 0) {
+               if (item_data->unreadCnt) {
+                       char unreadCnt[DEF_BUF_LEN_L] = { 0, };
+                       ic = elm_layout_add(obj);
+                       elm_layout_file_set(ic, MSG_THREAD_THEME, "msg_frame_badge_ly");
+                       snprintf(unreadCnt, sizeof(unreadCnt), "%d", item_data->unreadCnt);
+                       edje_object_part_text_set(_EDJ(ic), "elm.badge.text", unreadCnt);
+               }
+       }
+
+       if (elm_genlist_decorate_mode_get(obj)) {
+               if (!strcmp(part, "elm.edit.icon.1")) {
+                       ic = elm_check_add(obj);
+                       elm_check_state_pointer_set(ic, &item_data->isCheck);
+                       evas_object_data_set(ic, "item_data", item_data);
+                       evas_object_smart_callback_add(ic, "changed", msg_ui_thread_list_checked_cb, pData);
+                       item_data->chk = ic;
+               }
+       }
+
+       return ic;
+}
+
+void msg_ui_thread_gl_del(void *data, Evas_Object *obj)
+{
+       PMSG_APP_THREAD_DATA_S del_data = (PMSG_APP_THREAD_DATA_S) data;
+       if (del_data) {
+               if (del_data->threadTime) {
+                       free(del_data->threadTime);
+                       del_data->threadTime = NULL;
+               }
+               free(del_data);
+               del_data = NULL;
+       }
+}
+
+char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[DEF_BUF_LEN] = { '0', };
+
+       PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+       if (pData && pData->search_mode == THREAD_SEARCH_ON)
+               snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_SEARCH_RESULTS"));
+       else
+               snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_POP_EMPTY"));
+
+       return strdup(buf);
+}
+
+void msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA) data;
+       Elm_Object_Item *item = NULL;
+       PMSG_APP_THREAD_DATA_S item_data = NULL;
+       bundle *b = NULL;
+
+       item = (Elm_Object_Item *) event_info;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, !item, "Item is  NULL or Item is not Message item\n");
+
+       item_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(item);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, item_data == NULL, "item_data is NULL");
+
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, pData->sel_thread_id == item_data->threadId, "Already selected item.");
+
+       elm_genlist_item_selected_set(item, 0);
+
+       switch (pData->viewmode) {
+               case THREAD_NORMAL_VIEW:
+               case THREAD_UNLOAD_VIEW:
+                       pData->sel_gen_item = item;
+                       pData->sel_thread_id = item_data->threadId;
+
+                       b = msg_ui_thread_get_bubble_data(item_data);
+
+                       if (msg_ui_load_composer_ug(b) == MSG_UI_RET_ERR)
+                               D_MSG("Failed to load composer ug");
+
+                       if (b)
+                               bundle_free(b);
+
+                       item_data->unreadCnt = 0;
+                       elm_genlist_item_update(item);
+                       break;
+               case THREAD_EDIT_VIEW:
+                       item_data->isCheck = !item_data->isCheck;
+                       elm_genlist_item_fields_update(item, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       evas_object_smart_callback_call(item_data->chk, "changed", NULL);
+                       break;
+               default:
+                       break;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_thread_gl_empty_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Elm_Object_Item *item = NULL;
+
+       item = (Elm_Object_Item *) event_info;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, !item, "Item is  NULL or Item is not Message item\n");
+
+       elm_genlist_item_selected_set(item, 0);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_thread_list_load(PMSG_THREAD_DATA ThreadData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!ThreadData)
+               return;
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_SORT_RULE_S sortRule = { 0, };
+       MSG_THREAD_VIEW_LIST_S peerList = { 0, };
+       PMSG_APP_THREAD_DATA_S cur_sel_thread = NULL;
+       int row;
+
+       msg_ui_thread_init_genlist(ThreadData);
+
+       sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
+       sortRule.bAscending = false;
+
+       err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList);
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "peercount : %d, err : %d", peerList.nCount, err);
+       ThreadData->thread_cnt = peerList.nCount;
+
+       Evas_Object *swl_ly = elm_object_part_content_get(ThreadData->content_ly, "thread_list");
+
+       if (peerList.nCount <= 0 || err != MSG_SUCCESS) {
+               elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+
+               if (!ThreadData->noc_ly)
+                       ThreadData->noc_ly = msg_ui_thread_create_nocontent_layout(ThreadData);
+
+               if (swl_ly != ThreadData->noc_ly) {
+                       evas_object_hide(swl_ly);
+                       elm_object_part_content_unset(ThreadData->content_ly, "thread_list");
+                       elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->noc_ly);
+               }
+
+       } else {
+               if (swl_ly != ThreadData->genlist) {
+                       evas_object_hide(swl_ly);
+                       elm_object_part_content_unset(ThreadData->content_ly, "thread_list");
+                       elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->genlist);
+               }
+
+               elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE);
+
+               for (row = 0; row < peerList.nCount; row++) {
+                       cur_sel_thread = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S));
+                       msg_ui_thread_set_msg_data(cur_sel_thread, peerList.msgThreadInfo[row]);
+
+                       elm_genlist_item_append(ThreadData->genlist, ThreadData->itc, cur_sel_thread, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_sel, ThreadData);
+               }
+
+               msg_release_thread_view_list(&peerList);
+
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+}
+
+void msg_ui_thread_list_update(PMSG_THREAD_DATA ThreadData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!ThreadData)
+               return;
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_SORT_RULE_S sortRule = { 0, };
+       MSG_THREAD_VIEW_LIST_S peerList = { 0, };
+       PMSG_APP_THREAD_DATA_S cur_sel_thread = NULL;
+       Elm_Object_Item *gen_item = NULL;
+       int row = 0;
+
+       Evas_Object *swl_ly = elm_object_part_content_get(ThreadData->content_ly, "thread_list");
+
+       sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
+       sortRule.bAscending = false;
+
+       err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList);
+
+       if (peerList.nCount <= 0 || err != MSG_SUCCESS) {
+               elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+
+               if (!ThreadData->noc_ly)
+                       ThreadData->noc_ly = msg_ui_thread_create_nocontent_layout(ThreadData);
+
+               if (swl_ly != ThreadData->noc_ly) {
+                       evas_object_hide(swl_ly);
+                       elm_object_part_content_unset(ThreadData->content_ly, "thread_list");
+                       elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->noc_ly);
+               }
+
+       } else {
+               if (swl_ly != ThreadData->genlist) {
+                       evas_object_hide(swl_ly);
+                       elm_object_part_content_unset(ThreadData->content_ly, "thread_list");
+                       elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->genlist);
+               }
+
+               elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE);
+
+               gen_item = elm_genlist_first_item_get(ThreadData->genlist);
+
+               while(gen_item) {
+                       cur_sel_thread = elm_object_item_data_get(gen_item);
+                       msg_ui_thread_set_msg_data(cur_sel_thread, peerList.msgThreadInfo[row]);
+                       elm_object_item_data_set(gen_item, cur_sel_thread);
+                       gen_item = elm_genlist_item_next_get(gen_item);
+                       row++;
+               }
+       }
+
+       msg_release_thread_view_list(&peerList);
+
+       elm_genlist_realized_items_update(ThreadData->genlist);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_thread_list_item_update(PMSG_THREAD_DATA ThreadData, MSG_THREAD_ID_T threadId)
+{
+       MSG_UI_ENTER();
+
+       MSG_ERROR_T err = MSG_SUCCESS;
+       MSG_SORT_RULE_S sortRule = { 0, };
+       MSG_THREAD_VIEW_LIST_S peerList = { 0, };
+       PMSG_APP_THREAD_DATA_S item_data = NULL;
+       PMSG_APP_THREAD_DATA_S insert_data = NULL;
+       int row = 0;
+       Elm_Object_Item *gen_item = NULL;
+
+       sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
+       sortRule.bAscending = false;
+
+       err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS);
+
+       gen_item = elm_genlist_first_item_get(ThreadData->genlist);
+
+       /* Update genlist item */
+       while (gen_item) {
+               item_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(gen_item);
+               if (item_data && threadId == item_data->threadId) {
+                       break;
+               }
+               gen_item = elm_genlist_item_next_get(gen_item);
+       }
+
+       if (!gen_item)
+               return;
+
+       for (row = 0; row < peerList.nCount; row++) {
+               if (msg_thread_view_get_thread_id(peerList.msgThreadInfo[row]) == threadId) {
+                       insert_data = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S));
+                       if (!insert_data)
+                               return;
+
+                       msg_ui_thread_set_msg_data(insert_data, peerList.msgThreadInfo[row]);
+                       break;
+               }
+       }
+
+       msg_release_thread_view_list(&peerList);
+
+       insert_data->chk = item_data->chk;
+       insert_data->isCheck = item_data->isCheck;
+
+       elm_object_item_data_set(gen_item, insert_data);
+       elm_genlist_item_update(gen_item);
+
+       if (ThreadData->viewmode == THREAD_EDIT_VIEW) {
+               if (eina_list_data_find(ThreadData->chk_list, item_data)) {
+                       ThreadData->chk_list = eina_list_remove(ThreadData->chk_list, item_data);
+                       ThreadData->chk_list = eina_list_append(ThreadData->chk_list, insert_data);
+               }
+       }
+
+       if (item_data) {
+               if (item_data->threadTime) {
+                       free(item_data->threadTime);
+               }
+               free(item_data);
+       }
+
+       MSG_UI_LEAVE();
+}
+void msg_ui_thread_genlist_style_set(PMSG_THREAD_DATA ThreadData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ThreadData);
+
+       ThreadData->itc_thread.item_style = "3text.1icon.custom";
+       ThreadData->itc_thread.func.text_get = msg_ui_thread_gl_text_get;
+       ThreadData->itc_thread.func.content_get = msg_ui_thread_gl_content_get;
+       ThreadData->itc_thread.func.state_get = NULL;
+       ThreadData->itc_thread.func.del = msg_ui_thread_gl_del;
+       ThreadData->itc_thread.decorate_all_item_style = "edit_default";
+
+       ThreadData->itc_empty.item_style = "1text";
+       ThreadData->itc_empty.func.text_get = msg_ui_thread_gl_empty_get;
+       ThreadData->itc_empty.func.content_get = NULL;
+       ThreadData->itc_empty.func.state_get = NULL;
+       ThreadData->itc_empty.func.del = NULL;
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
diff --git a/thread/src/msg-ui-thread-main.c b/thread/src/msg-ui-thread-main.c
new file mode 100755 (executable)
index 0000000..a39bf68
--- /dev/null
@@ -0,0 +1,372 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-thread-main.h"
+
+PMSG_THREAD_DATA g_data = NULL;
+
+
+void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pData == NULL, "pData is NULL");
+
+       Evas_Object *back_btn = NULL;
+
+       pData->toolbar = elm_toolbar_add(pData->navi_frame);
+       elm_toolbar_shrink_mode_set(pData->toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pData->toolbar == NULL, "Navigation controlbar is NULL");
+
+       msg_ui_thread_add_navi_controlbar_item(pData);
+
+       pData->content_ly = msg_ui_thread_create_content_layout(pData);
+       pData->noc_ly = msg_ui_thread_create_nocontent_layout(pData);
+
+       pData->searchbar = msg_ui_thread_create_searchbar_layout(pData);
+       elm_object_part_content_set(pData->content_ly, "sel_all", pData->searchbar);
+
+       pData->genlist = msg_ui_thread_create_genlist(pData);
+       elm_object_part_content_set(pData->content_ly, "thread_list", pData->genlist);
+
+       back_btn = elm_button_add(pData->navi_frame);
+       elm_object_style_set(back_btn, "naviframe/back_btn/default");
+       evas_object_smart_callback_add(back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *)pData);
+       pData->back_btn = back_btn;
+
+       elm_win_conformant_set(pData->win_main, 1);
+       pData->conform = elm_conformant_add(pData->navi_frame);
+       elm_object_style_set(pData->conform, "internal_layout");
+
+       evas_object_size_hint_weight_set(pData->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(pData->conform);
+       elm_object_content_set(pData->conform, pData->content_ly);
+
+       pData->nf_it = elm_naviframe_item_push(pData->navi_frame, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"), back_btn, NULL, pData->conform, NULL);
+       elm_object_item_part_content_set(pData->nf_it, "controlbar", pData->toolbar);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void *msg_ui_thread_init_thread_data(struct appdata *ad)
+{
+       PMSG_THREAD_DATA thread_data = NULL;
+
+       thread_data = (PMSG_THREAD_DATA)calloc(1, sizeof(MSG_THREAD_DATA));
+
+       if (!thread_data)
+               return NULL;
+
+       thread_data->msgHandle = ad->msgHandle;
+
+       thread_data->viewmode = THREAD_NORMAL_VIEW;
+
+       thread_data->win_main = ad->win_main;
+
+       thread_data->th = elm_theme_new();
+       elm_theme_ref_set(thread_data->th, NULL);
+       elm_theme_extension_add(thread_data->th, MSG_THREAD_THEME);
+
+       g_data = thread_data;
+
+       msg_ui_thread_reg_msg_cb_func(thread_data);
+       msg_ui_thread_get_locale(thread_data);
+       msg_ui_thread_get_time_format(thread_data);
+       thread_data->time_12h_ptn = msg_common_get_date_best_pattern(thread_data->locale, MSG_UI_TIME_PATTERN_12H);
+       thread_data->time_24h_ptn = msg_common_get_date_best_pattern(thread_data->locale, MSG_UI_TIME_PATTERN_24H);
+       thread_data->date_ptn = msg_common_get_date_best_pattern(thread_data->locale, UDAT_YEAR_NUM_MONTH_DAY);
+
+       /* Register callback to apply time change. */
+       thread_data->noti_fd = heynoti_init();
+       if (thread_data->noti_fd == -1) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_init() is failed!!");
+       }
+       else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_init() is success : fd = %d\n", thread_data->noti_fd);
+
+               if (heynoti_subscribe(thread_data->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb, (void *)thread_data) == -1) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_subscribe(setting_time_changed) is failed!!");
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_subscribe(setting_time_changed) is success !!");
+               }
+
+               if (heynoti_attach_handler(thread_data->noti_fd) == -1) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_attach_handler() is failed !!");
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_attach_handler() is success.");
+               }
+       }
+
+       return (void *)thread_data;
+}
+
+void msg_ui_thread_deinit_thread_data(void *data)
+{
+       if (!data)
+               return;
+
+       PMSG_THREAD_DATA thread_data = data;
+
+       if (thread_data->date_ptn) {
+               free(thread_data->date_ptn);
+               thread_data->date_ptn = NULL;
+       }
+
+       if (thread_data->time_12h_ptn) {
+               free(thread_data->time_12h_ptn);
+               thread_data->time_12h_ptn = NULL;
+       }
+
+       if (thread_data->time_24h_ptn) {
+               free(thread_data->time_24h_ptn);
+               thread_data->time_24h_ptn = NULL;
+       }
+
+       if (thread_data->del_thread) {
+               if (ecore_thread_cancel(thread_data->del_thread) == EINA_FALSE) {
+                       D_MSG("ecore_thread_cancel is done.");
+               } else {
+                       D_MSG("ecore_thread_cancel is failed.");
+               }
+               thread_data->del_thread = NULL;
+       }
+
+       if (thread_data->e_timer) {
+               ecore_timer_del(thread_data->e_timer);
+               thread_data->e_timer = NULL;
+       }
+
+       if (thread_data->th) {
+               elm_theme_extension_del(thread_data->th, MSG_THREAD_THEME);
+               elm_theme_free(thread_data->th);
+               thread_data->th = NULL;
+       }
+
+       if (thread_data->noti_fd) {
+               if (heynoti_unsubscribe(thread_data->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb) == -1) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_unsubscribe() is failed !!");
+               }
+               heynoti_close(thread_data->noti_fd);
+       }
+}
+
+Evas_Object *msg_ui_thread_create_layout_main(Evas_Object *parent)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL");
+
+       PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+       Evas_Object *bg;
+       Evas_Object *layout;
+
+       bg = elm_bg_add(parent);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(bg);
+
+       layout = elm_layout_add(parent);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, layout == NULL, NULL, "Failed elm_layout_add.\n");
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, bg);
+       elm_object_part_content_set(layout, "elm.swallow.bg", bg);
+       evas_object_show(layout);
+
+       pData->navi_frame = elm_naviframe_add(layout);
+       elm_object_part_content_set(layout, "elm.swallow.content", pData->navi_frame);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return layout;
+}
+
+Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!pData)
+               return NULL;
+
+       Evas_Object *layout = NULL;
+       layout = elm_layout_add(pData->content_ly);
+       elm_layout_theme_set(layout, "layout", "searchbar", "cancel_button");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       Evas_Object *entry = NULL;
+       entry = elm_entry_add(layout);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_NO_IMAGE);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+       elm_object_part_text_set(layout, "elm.guidetext", dgettext("sys_string", "IDS_COM_BODY_SEARCH"));
+
+       pData->imf_ctx = elm_entry_imf_context_get(entry);
+
+       Evas_Object *cancel_button = NULL;
+       cancel_button = elm_button_add(layout);
+       elm_object_part_content_set(layout, "button_cancel", cancel_button);
+       elm_object_style_set(cancel_button, "searchbar/default");
+       elm_object_text_set(cancel_button, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+       limit_filter_data.max_char_count = 0;
+       limit_filter_data.max_byte_count = DEF_MAX_MSG_TEXT_LEN;
+       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
+
+       evas_object_smart_callback_add(entry, "focused",  msg_ui_thread_searchbar_entry_focus_cb, (void *)pData);
+       evas_object_smart_callback_add(entry, "unfocused",  msg_ui_thread_searchbar_entry_unfocus_cb, (void *)pData);
+       evas_object_smart_callback_add(cancel_button, "clicked", msg_ui_thread_searchbar_cancel_click_cb, (void *)pData);
+       elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", msg_ui_thread_searchbar_eraser_clicked_cb, (void *)pData);
+
+       evas_object_show(layout);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return layout;
+}
+
+Evas_Object *msg_ui_thread_create_genlist(PMSG_THREAD_DATA pData)
+{
+       D_ENTER;
+
+       if (!pData)
+               return NULL;
+
+       Evas_Object *genlist = NULL;
+
+       genlist = elm_genlist_add(pData->content_ly);
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       elm_object_theme_set(genlist, pData->th);
+
+       msg_ui_thread_genlist_style_set(pData);
+
+       pData->itc = &(pData->itc_thread); /* default setting */
+
+       D_LEAVE;
+
+       return genlist;
+}
+
+Evas_Object *msg_ui_thread_create_content_layout(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       /* Content layout */
+       Evas_Object *layout;
+       layout = elm_layout_add(pData->navi_frame);
+       elm_layout_file_set(layout, MSG_THREAD_THEME, "thread_content");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return layout;
+}
+
+
+Evas_Object *msg_ui_thread_create_nocontent_layout(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       Evas_Object *noc_layout = NULL;
+
+       noc_layout = elm_layout_add(pData->navi_frame);
+       elm_layout_theme_set(noc_layout, "layout", "nocontents", "text");
+       elm_object_part_text_set(noc_layout, "elm.text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NOMESSAGES"));
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return noc_layout;
+}
+
+void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pData == NULL, "PMSG_THREAD_DATA is NULL");
+
+       msg_reg_storage_change_callback(pData->msgHandle, &msg_ui_thread_storage_change_cb, pData);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_thread_load_thread_view(void *data, bundle *b)
+{
+       if (!data)
+               return;
+
+       PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+       msg_ui_thread_fullview_launch(pData);
+
+       msg_ui_thread_list_load(pData);
+
+       /* Search mode from live-box */
+       if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_SEARCH_MODE) == 0) {
+               if (pData->searchbar)
+                       elm_object_focus_set(pData->searchbar, EINA_TRUE);
+       }
+
+}
+
+void msg_ui_thread_reset_thread_view(void *data, bundle *b)
+{
+       if (!data)
+               return;
+}
+
+PMSG_THREAD_DATA msg_ui_thread_get_data(void)
+{
+
+       if (g_data)
+               return g_data;
+       else
+               return NULL;
+
+}
+
+void msg_ui_thread_add_navi_controlbar_item(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       if (!pData)
+               return;
+
+       int i;
+
+       for (i = 0; i < MSG_THREAD_CONTROLBAR_ITEM_NUM; i++) {
+               if (pData->toolbar_item[i])
+                       elm_object_item_del(pData->toolbar_item[i]);
+       }
+
+       pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_EDIT, NULL, \
+                                                                                                                               msg_ui_thread_ctlbar_edit_cb, (void *)pData);
+       pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL);
+       pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_COMPOSE, NULL, \
+                                                                                                                               msg_ui_thread_ctlbar_compose_cb, (void *)pData);
+       pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL);
+
+       if (pData->thread_cnt <= 0)
+               elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+       elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
diff --git a/thread/src/msg-ui-thread-util.c b/thread/src/msg-ui-thread-util.c
new file mode 100755 (executable)
index 0000000..0de6db4
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.tizenopensource.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 "msg-ui-thread-main.h"
+#include "appsvc.h"
+
+void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData)
+{
+       int r;
+       enum appcore_time_format timeformat;
+
+       r = appcore_get_timeformat(&timeformat);
+       if (r == MSG_UI_RET_ERR)
+               timeformat = APPCORE_TIME_FORMAT_UNKNOWN;
+
+       if (timeformat == APPCORE_TIME_FORMAT_24)
+               pData->time_fmt = MSG_TIME_FORMAT_24H;
+       else
+               pData->time_fmt = MSG_TIME_FORMAT_12H;
+
+       D_MSG("%s", pData->time_fmt == MSG_TIME_FORMAT_24H ? "TIME FORMAT = 24h" : "TIME FORMAT = 12h");
+}
+
+void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData)
+{
+       const char *locale;
+
+       locale = msg_common_get_default_locale();
+
+       if (locale) {
+               strncpy(pData->locale, locale, sizeof(pData->locale)-1);
+       }
+
+       D_MSG("Locale = %s", pData->locale);
+}
+
+bundle *msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data)
+{
+       MSG_UI_ENTER();
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL);
+
+       char buf[DEF_BUF_LEN_S] = {'0',};
+       char buf_contact[DEF_BUF_LEN_S] = {'0',};
+
+       bundle *b = bundle_create();
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !b, NULL);
+
+       snprintf(buf, DEF_BUF_LEN_S, "%d", item_data->threadId);
+       bundle_add(b, MSG_BUNDLE_KEY_THREAD_ID, buf);
+       bundle_add(b, MSG_BUNDLE_KEY_THREAD_NAME, item_data->threadName);
+       bundle_add(b, MSG_BUNDLE_KEY_THREAD_ADDRESS, item_data->threadAddr);
+       snprintf(buf_contact, DEF_BUF_LEN_S, "%d", item_data->contactId);
+       bundle_add(b, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact);
+
+       MSG_UI_LEAVE();
+       return b;
+}
+
+void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_DATA pData)
+{
+       D_ENTER;
+
+       Elm_Object_Item *it;
+       PMSG_APP_THREAD_DATA_S item_data = NULL;
+
+       elm_check_state_set(pData->sel_all_box, EINA_FALSE);
+
+       it = elm_genlist_first_item_get(pData->genlist);
+
+       while (it) {
+               item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(it);
+               if (item_data)
+                       item_data->isCheck = EINA_FALSE;
+
+               it = elm_genlist_item_next_get(it);
+       }
+
+       pData->chk_list = eina_list_free(pData->chk_list);
+
+       elm_object_part_content_unset(pData->content_ly, "sel_all");
+       evas_object_hide(pData->sel_all_ly);
+       elm_object_part_content_set(pData->content_ly, "sel_all", pData->searchbar);
+
+       elm_genlist_decorate_mode_set(pData->genlist, EINA_FALSE);
+       elm_genlist_select_mode_set(pData->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
+
+       pData->viewmode = THREAD_NORMAL_VIEW;
+
+}
+void msg_ui_thread_show_normal_mode(PMSG_THREAD_DATA pData)
+{
+       D_ENTER;
+
+       elm_object_item_text_set(pData->nf_it, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"));
+       elm_naviframe_item_title_visible_set(pData->nf_it, EINA_TRUE);
+
+       if (pData->viewmode == THREAD_EDIT_VIEW)
+               msg_ui_thread_cancel_edit_mode(pData);
+
+       if (pData->select_info) {
+               evas_object_del(pData->select_info);
+               pData->select_info = NULL;
+       }
+
+       msg_ui_thread_add_navi_controlbar_item(pData);
+
+       if (!pData->back_btn) {
+               pData->back_btn = elm_button_add(pData->navi_frame);
+               evas_object_smart_callback_add(pData->back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *) pData);
+               elm_object_style_set(pData->back_btn, "naviframe/back_btn/default");
+       }
+       elm_object_item_part_content_set(pData->nf_it, "prev_btn", pData->back_btn);
+
+       D_LEAVE;
+}
+
+void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_DATA pData, int thread_id)
+{
+
+       if (thread_id <= 0)
+               return;
+
+       Elm_Object_Item *gen_item = NULL;
+
+       gen_item = elm_genlist_first_item_get(pData->genlist);
+
+       while (gen_item) {
+               PMSG_APP_THREAD_DATA_S item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(gen_item);
+               if (thread_id == item_data->threadId) {
+                       pData->sel_gen_item = gen_item;
+                       break;
+               }
+
+               gen_item = elm_genlist_item_next_get(gen_item);
+       }
+
+       elm_genlist_item_show(gen_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+}
+
+static void __popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !data);
+
+       PMSG_THREAD_DATA threadData = (PMSG_THREAD_DATA)data;
+
+       if ((int)event_info != 5 && obj) {
+               evas_object_del(obj);
+               threadData->popup = NULL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_thread_show_notify(PMSG_THREAD_DATA threadData, const char *msg)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !threadData);
+
+       Evas_Object *popup;
+
+       popup = elm_popup_add(threadData->navi_frame);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, msg);
+
+       evas_object_smart_callback_add(popup, "timeout", __popup_response_cb, threadData);
+       elm_popup_timeout_set(popup, 0.8);
+       evas_object_show(popup);
+
+       threadData->popup = popup;
+
+}
+
+Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_DATA threadData, int count)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !threadData, NULL);
+
+       Evas_Object *popup, *progressbar, *box, *label;
+       char buf[DEF_BUF_LEN_S] = {0,};
+
+       popup = elm_popup_add(threadData->navi_frame);
+
+       label = elm_label_add(popup);
+       snprintf(buf, sizeof(buf), "0/%d %s", count, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+       elm_object_text_set(label, buf);
+       evas_object_show(label);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_progress");
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(progressbar, 0.0);
+       evas_object_show(progressbar);
+
+       box = elm_box_add(popup);
+       elm_box_pack_end(box, label);
+       elm_box_pack_end(box, progressbar);
+       evas_object_show(box);
+
+       elm_object_content_set(popup, box);
+
+       evas_object_show(popup);
+
+       threadData->progressbar = progressbar;
+       threadData->progresslabel = label;
+
+       return popup;
+}
+
+void msg_ui_thread_show_select_info(PMSG_THREAD_DATA pData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData);
+
+       if (!pData->select_info) {
+               pData->select_info = elm_notify_add(pData->navi_frame);
+               elm_notify_orient_set(pData->select_info, ELM_NOTIFY_ORIENT_BOTTOM);
+
+               pData->selectioninfo_layout = elm_layout_add(pData->navi_frame);
+               elm_object_content_set(pData->select_info, pData->selectioninfo_layout);
+       }
+
+       elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64");
+
+       if (pData->check_cnt == 0) {
+               evas_object_hide(pData->select_info);
+               elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+       } else {
+               char text[DEF_BUF_LEN_S] =  {'0',};
+               snprintf(text, sizeof(text), "%s (%d)", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_POP_SPACE_SELECTED"), pData->check_cnt);
+               edje_object_part_text_set(_EDJ(pData->selectioninfo_layout), "elm.text", text);
+               evas_object_show(pData->select_info);
+
+               elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE);
+       }
+}
+
+void msg_ui_thread_set_app_state(int app_state)
+{
+       if (app_state <= MSG_UI_STATE_NONE || app_state >= MSG_UI_STATE_MAX)
+               return;
+
+       PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+       if (!pData)
+               return;
+
+       pData->app_state = app_state;
+}
+
+int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData)
+{
+       if (!pData)
+               return MSG_UI_STATE_NONE;
+
+       return pData->app_state;
+}
diff --git a/thread/theme/thread_genlist.edc b/thread/theme/thread_genlist.edc
new file mode 100755 (executable)
index 0000000..38e3f0a
--- /dev/null
@@ -0,0 +1,550 @@
+#define FONT_LIST_ITEM "HelveticaNeueRom"
+
+#define SLP_FONT_BOLD  "SLP:style=Bold";
+#define SLP_FONT_MEDIUM        "SLP:style=Medium";
+#define SLP_FONT_ROMAN "SLP:style=Roman";
+
+#define MSG_UI_SEL_ALL_H       90
+#define GENLIST_PART_LIST_BG_COLOR_INC 0 0 0 255
+#define GENLIST_PART_LIST_PRESS_COLOR_INC 0 140 210 255
+#define GENLIST_PART_LIST_LINE_COLOR_INC 68 68 68 255
+
+#define GENLIST_PART_BASE(param_item_height) \
+       part \
+       { \
+               name : "base"; \
+               type : RECT; \
+               repeat_events : 1; \
+               scale : 1; \
+               description \
+               { \
+                       state : "default" 0.0; \
+                       min : 0 param_item_height; \
+                       color: 249 249 249 255; \
+               } \
+       }
+
+#define GENLIST_PART_BG_IMAGE \
+       part { \
+               name: "bg_image"; \
+               type: RECT; \
+               clip_to: "disclip"; \
+               mouse_events: 0; \
+               description { state: "default" 0.0; \
+               color: GENLIST_PART_LIST_BG_COLOR_INC; \
+       } \
+       description { \
+               state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_PART_LIST_PRESS_COLOR_INC; \
+       } \
+}
+
+#define GENLIST_PART_BOTTOM_LINE \
+       part { \
+               name: "bottom_line"; \
+               type: RECT; \
+               mouse_events: 0; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 0 1; \
+                       fixed: 0 1; \
+                       visible: 1; \
+                       color: GENLIST_PART_LIST_LINE_COLOR_INC; \
+                       rel1 { \
+                               relative: 0.0 1.0; \
+                               offset: 0 -1; \
+                       } \
+               } \
+       }
+
+#define GENLIST_PART_PADDING_TOP( param_padding_size ) \
+       part { name: "elm.padding.top"; \
+            type: RECT; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               min: 0 param_padding_size; \
+               fixed: 0 1; \
+               visible: 0; \
+               rel2.relative: 1.0 0.0; \
+               align: 0.0 0.0; \
+            } \
+         }
+
+#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \
+       part { name: "elm.padding.bottom"; \
+            type: RECT; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: 0 param_padding_size; \
+               fixed: 0 1; \
+               visible: 0; \
+               rel1.relative: 0.0 1.0; \
+               align: 0.0 1.0; \
+            } \
+         }
+
+#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \
+         part { name: "elm.padding.left"; \
+            type: RECT; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: param_padding_size 0; \
+               fixed: 1 0; \
+               visible: 0; \
+               rel2.relative: 0.0 1.0; \
+               align: 0.0 0.0; \
+            } \
+         }
+
+#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \
+       part { name: "elm.padding.right"; \
+            type: RECT; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: param_padding_size 0; \
+               fixed: 1 0; \
+               visible: 0; \
+               rel1.relative: 1.0  0.0; \
+               align: 1.0 0.0; \
+            } \
+         }
+
+ #define GENLIST_DESCRIPTION_FLIP_ENABLED \
+            description { state: "flip_enabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            }
+
+
+#define GENLIST_PROGRAM_FLIP_3TEXT_1ICON \
+         program { name: "flip_enabled"; \
+            signal: "elm,state,flip,enabled"; \
+            source: "elm"; \
+            action: STATE_SET "flip_enabled" 0.0; \
+            target: "elm.text.1"; \
+            target: "elm.text.2"; \
+            target: "elm.text.3"; \
+            target: "elm.icon"; \
+            target: "elm.flip.content"; \
+         } \
+         program { name: "flip_disabled"; \
+            signal: "elm,state,flip,disabled"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "elm.text.1"; \
+            target: "elm.text.2"; \
+            target: "elm.text.3"; \
+            target: "elm.icon"; \
+            target: "elm.flip.content"; \
+         }
+
+#define GENLIST_PART_FLIP \
+         part { name: "elm.flip.content"; \
+            clip_to: "disclip"; \
+            type: SWALLOW; \
+            mouse_events: 1; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               visible: 0; \
+               fixed: 1 1; \
+               rel1 { \
+                  relative: 1.0  0.5; \
+                  to_x: "elm.padding.left"; \
+               } \
+               rel2 { \
+                  relative: 0.0  0.5; \
+                  to_x: "elm.padding.right"; \
+               } \
+            } \
+            description { state: "flip_enabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+         }
+
+ #define GENLIST_PART_DISCLIP \
+        part { name: "disclip"; \
+            type: RECT; \
+            description { state: "default" 0.0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               color: 255 255 255 110; \
+            } \
+         }
+
+
+collections{
+
+       group{
+               name : "thread_content";
+
+               parts{
+                       part{
+                               name : "base";
+                               type : RECT;
+                               scale : 1;
+                               description{
+                                       state :  "default" 0.0;
+                                       color : 0 0 0 0;
+                               }
+                       }
+                       part{
+                               name : "sel_all";
+                               type : SWALLOW;
+                               scale : 1;
+                               description{
+                                       state: "default" 0.0;
+                                       fixed : 1 1;
+                                       min : 0 MSG_UI_SEL_ALL_H;
+                                       align : 0.0 0.0;
+                                       rel1 {to: "base"; relative:0.0 0.0;}
+                                       rel2 {to: "base"; relative:1.0 0.0;}
+                               }
+                       }
+                       part{
+                               name : "thread_list";
+                               type : SWALLOW;
+                               scale : 1;
+                               description{
+                                       state: "default" 0.0;
+                                       fixed : 1 1;
+                                       min : 0 0;
+                                       align : 0.0 0.0;
+                                       rel1 {to: "sel_all"; relative:0.0 1.0;}
+                                       rel2 {to: "base"; relative:1.0 1.0;}
+                               }
+                       }
+               }
+       }
+       group
+       {
+               name : "elm/genlist/item/thread_list_blank/default";
+               alias : "elm/genlist/item_odd/thread_list_blank/default";
+               alias : "elm/genlist/tem_compress/thread_list_blank/default";
+               alias : "elm/genlist/tem_compress_odd/thread_list_blank/default";
+
+               data.item : "stacking" "above";
+               data.item: "treesize" "20";
+
+               parts {
+                       GENLIST_PART_BASE(90)
+               }
+       }
+
+       group
+       {
+           name: "msg_frame_badge_ly";
+
+           images {
+                   image : "M01_btn_Unread_message_HD.png" COMP;
+                               image : "M01_btn_Unread_message_white_theme.png" COMP;
+           }
+
+           parts {
+                       part{
+                               name : "base";
+                               type : RECT;
+                               scale : 1;
+                               description{
+                                       state : "default" 0.0;
+                                       min : 64 64;
+                                       rel1 {relative: 0.0 0.0;}
+                                       rel2 {relative: 1.0 1.0;}
+                                       color: 0 0 0 0;
+                               }
+                       }
+               part {
+                   name: "elm.badge.bg";
+                   type: IMAGE;
+                   scale: 1;
+                   description {
+                       state: "default" 0.0;
+                       rel1 { relative: 0.0 0.0; to : "base"; }
+                       rel2 { relative: 1.0 1.0; to : "base"; }
+                       image.normal: "M01_btn_Unread_message_HD.png";
+                       image.border: 20 20 20 20;
+                       image.border_scale:1;
+                   }
+                   description {
+                       state: "white-theme" 0.0;
+                       inherit : "default" 0.0;
+                       image.normal: "M01_btn_Unread_message_white_theme.png";
+                       image.border: 5 5 5 5;
+                       image.border_scale:1;
+                   }
+
+               }
+
+               part {
+                   name: "elm.badge.text";
+                               type: TEXT;
+                   scale: 1;
+                   description {
+                       state: "default" 0.0;
+                       fixed: 1 1;
+                       rel1 { relative: 0.0 0.0; to: "elm.badge.bg"; }
+                       rel2 { relative: 1.0 1.0; to: "elm.badge.bg"; }
+                       text {
+                               font: "SLP";
+                               size: 32;
+                               min: 1 1;
+                               align: 0.5 0.5;
+                       }
+                       color: 0 0 0 255;
+                   }
+                   description {
+                       state: "white-theme" 0.0;
+                       inherit : "default" 0.0;
+                       color: 255 255 255 255;
+                   }
+               }
+           }
+               programs {
+                       program {
+                               name: "white_theme";
+                               signal: "unread_icon_change";
+                               action: STATE_SET "white-theme" 0.0;
+                               target: "elm.badge.bg";
+                               target: "elm.badge.text";
+                       }
+               }
+
+       }
+       group {
+               name: "elm/genlist/item/3text.1icon.custom/default";
+               alias: "elm/genlist/item_odd/3text.1icon.custom/default";
+               alias: "elm/genlist/item_compress/3text.1icon.custom/default";
+               alias: "elm/genlist/item_compress_odd/3text.1icon.custom/default";
+               data.item: "stacking" "above";
+               data.item: "selectraise" "on";
+               data.item: "texts" "elm.text.1 elm.text.2 elm.text.3";
+               data.item: "contents" "elm.icon";
+               data.item: "flips" "elm.flip.content";
+               images {
+                       image: "00_list_bar_press_1x80.png" COMP;
+               }
+               parts {
+                       GENLIST_PART_BASE(129)
+                       GENLIST_PART_BG_IMAGE
+                       GENLIST_PART_BOTTOM_LINE
+                       GENLIST_PART_PADDING_TOP( 10 )
+                       GENLIST_PART_PADDING_BOTTOM( 10 )
+                       GENLIST_PART_PADDING_LEFT( 16 )
+                       GENLIST_PART_PADDING_RIGHT( 16 )
+                       part {
+                               name: "elm.text.3";
+                               clip_to: "disclip";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 133 48;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom";
+                                       }
+                                       align: 1.0 1.0;
+                                       color: 100 100 100 255;
+                                       text {
+                                               font: "SLP:style=Medium";
+                                               size: 24;
+                                               min: 0 1;
+                                               align: 1.0 0.5;
+                                       }
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 249 249 249 255;
+                               }
+                               GENLIST_DESCRIPTION_FLIP_ENABLED
+                       }
+
+                       part {
+                               name: "elm.padding.text3.left";
+                               clip_to: "disclip";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 32 0;
+                                       fixed: 1 0;
+                                       rel1.to_x: "elm.text.3";
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.text.3";
+                                       }
+                                       align: 1.0 0.5;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "elm.icon";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 32 32;
+                                       max: 32 32;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.text.3";
+                                       }
+                                       align: 1.0 0.5;
+                               }
+                               GENLIST_DESCRIPTION_FLIP_ENABLED
+                       }
+                       part {
+                               name: "elm.padding.icon.left";
+                               clip_to: "disclip";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 16 0;
+                                       fixed: 1 0;
+                                       rel1.to_x: "elm.icon";
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.icon";
+                                       }
+                                       align: 1.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "elm.text.1";
+                               clip_to: "disclip";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.icon.left";
+                                               to_y: "elm.text.3";
+                                       }
+                                       align: 0.0 0.5;
+                                       color: 249 249 249 255;
+                                       text {
+                                               font: "SLP:style=Roman";
+                                               size: 44;
+                                               min: 0 1;
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 249 249 249 255;
+                               }
+                               GENLIST_DESCRIPTION_FLIP_ENABLED
+                       }
+                       part { name: "elm.text.2";
+                               clip_to: "disclip";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.text.1";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.text3.left";
+                                               to_y: "elm.padding.bottom";
+                                       }
+                                       align: 0.0 0.5;
+                                       color: 100 100 100 255;
+                                       text {
+                                               font: "SLP:style=Medium";
+                                               size: 32;
+                                               min: 0 1;
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 249 249 249 255;
+                               }
+                               GENLIST_DESCRIPTION_FLIP_ENABLED
+                       }
+                       GENLIST_PART_FLIP
+                       GENLIST_PART_DISCLIP
+               }
+               programs {
+               // signal: elm,state,%s,active
+               //   a "check" item named %s went active
+               // signal: elm,state,%s,passive
+               //   a "check" item named %s went passive
+               // default is passive
+                       program {
+                               name: "go_active";
+                               signal: "elm,state,selected";
+                               source: "elm";
+                               action: STATE_SET "selected" 0.0;
+                               target: "bg_image";
+                               target: "elm.text.1";
+                               target: "elm.text.2";
+                               target: "elm.text.3";
+                       }
+                       program {
+                               name: "go_passive";
+                               signal: "elm,state,unselected";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "bg_image";
+                               target: "elm.text.1";
+                               target: "elm.text.2";
+                               target: "elm.text.3";
+                               transition: LINEAR 0.1;
+                       }
+                       program {
+                               name: "go_disabled";
+                               signal: "elm,state,disabled";
+                               source: "elm";
+                               action: STATE_SET "disabled" 0.0;
+                               target: "disclip";
+                       }
+                       program {
+                               name: "go_enabled";
+                               signal: "elm,state,enabled";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "disclip";
+                       }
+                       GENLIST_PROGRAM_FLIP_3TEXT_1ICON
+               }
+       }
+}
+