summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaeyun Jeong <jyjeong@samsung.com>2012-08-21 18:40:43 +0900
committerJaeyun Jeong <jyjeong@samsung.com>2012-08-21 18:40:43 +0900
commit92abf425ce0d141f966ddaecf1c4bc325fc9e189 (patch)
tree411d692f37dbfbd292f19c41f9cd717523c18295
parent5f6271abd18e2d811315f56c48ecd927c9e9436c (diff)
downloadmessage-app-92abf425ce0d141f966ddaecf1c4bc325fc9e189.tar.gz
message-app-92abf425ce0d141f966ddaecf1c4bc325fc9e189.tar.bz2
message-app-92abf425ce0d141f966ddaecf1c4bc325fc9e189.zip
Implement tizen 2.0 beta.
Change-Id: Ifea6bc144e2628ddfaa3cafa8f4f250d78005356
-rwxr-xr-xCMakeLists.txt4
-rwxr-xr-xclass0/CMakeLists.txt49
-rwxr-xr-xclass0/msg-ui-class0-main.c488
-rwxr-xr-xclass0/msg-ui-class0-main.h61
-rwxr-xr-xcommon/CMakeLists.txt32
-rwxr-xr-xcommon/data/edc_image/00_MessageBubble_date_bg.png (renamed from common/data/edc_image/00_sweep_list_bg.png)bin2806 -> 2799 bytes
-rwxr-xr-xcommon/data/edc_image/00_btn_circle_bg_normal.pngbin0 -> 5130 bytes
-rwxr-xr-xcommon/data/edc_image/00_btn_circle_bg_press.png (renamed from common/data/image/controlbar/01_controlbar_icon_info.png)bin3779 -> 5141 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_03_dim.pngbin586 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_03_focus.pngbin583 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_03_normal.pngbin586 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_03_press.pngbin593 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_04_dim.pngbin0 -> 3398 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_04_normal.pngbin0 -> 3398 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_04_normal_focus.png (renamed from common/data/edc_image/M01_btn_Unread_message_white_theme.png)bin2949 -> 3003 bytes
-rwxr-xr-xcommon/data/edc_image/00_button_04_press.pngbin0 -> 3411 bytes
-rwxr-xr-xcommon/data/edc_image/00_list_bar_group_middle_focus.pngbin629 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/00_list_bar_press_1x80.pngbin371 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/00_list_photo_default.pngbin816 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/07_message_add files_bg.PNGbin253 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/07_message_bubble_readmessage.pngbin439 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/07_message_bubble_reponsible_message.pngbin632 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/07_message_bubble_sentmessage.pngbin423 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/07_message_list_badge_01.pngbin852 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/07_message_list_bg.PNGbin135 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/07_message_sweep_list_bg.pngbin155 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/27_textinput_predictive_btn_arrow_down.pngbin284 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/27_textinput_predictive_btn_arrow_up.pngbin278 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/M01_btn_add_plus.png (renamed from common/data/edc_image/M01_btn_Unread_message.png)bin2949 -> 2972 bytes
-rwxr-xr-xcommon/data/edc_image/M01_input_bg.png (renamed from common/data/edc_image/white/M01_search_input_field_bg.png)bin2869 -> 2815 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_next.pngbin0 -> 3203 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_next_press.pngbin0 -> 5167 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_pause.png (renamed from common/data/edc_image/white/M01_icon_minus.png)bin2896 -> 2882 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_pause_press.pngbin0 -> 3846 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_play.png (renamed from common/data/edc_image/M01_btn_Unread_message_HD.png)bin3076 -> 3095 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_play_press.pngbin0 -> 4334 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_previous.pngbin0 -> 3190 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_previous_press.pngbin0 -> 5175 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_volume.pngbin0 -> 3361 bytes
-rwxr-xr-xcommon/data/edc_image/M01_play_btn_volume_press.pngbin0 -> 5468 bytes
-rwxr-xr-xcommon/data/edc_image/M01_player_bg.png (renamed from common/data/image/white/M01_icon_minus.png)bin2896 -> 2834 bytes
-rwxr-xr-xcommon/data/edc_image/M01_player_progress_bar.pngbin0 -> 2808 bytes
-rwxr-xr-xcommon/data/edc_image/M01_player_progress_bg.pngbin0 -> 2803 bytes
-rwxr-xr-xcommon/data/edc_image/M01_search_input_field_attach_bg.pngbin0 -> 3205 bytes
-rwxr-xr-xcommon/data/edc_image/M01_search_input_field_bg.pngbin3096 -> 3370 bytes
-rwxr-xr-xcommon/data/edc_image/M01_title_btn_bg.pngbin0 -> 3131 bytes
-rwxr-xr-xcommon/data/edc_image/M01_title_btn_bg_press.pngbin0 -> 3105 bytes
-rwxr-xr-xcommon/data/edc_image/Seven_IM_input_field_01.pngbin349 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/Seven_IM_input_field_02.pngbin450 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/black/07_message_add files_bg.PNGbin253 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/black/M01_search_input_field_bg.pngbin3096 -> 0 bytes
-rwxr-xr-xcommon/data/edc_image/nf_title_separator.pngbin0 -> 2802 bytes
-rwxr-xr-xcommon/data/edc_image/optionheader_arrow.pngbin0 -> 3190 bytes
-rwxr-xr-xcommon/data/edc_image/white/07_message_add files_bg.PNGbin253 -> 0 bytes
-rwxr-xr-xcommon/data/image/00_list_photo_default.pngbin816 -> 0 bytes
-rwxr-xr-xcommon/data/image/01_controllbar_icon_add_to_contact.pngbin0 -> 1472 bytes
-rwxr-xr-xcommon/data/image/01_dialog_field_bg.pngbin549 -> 0 bytes
-rwxr-xr-xcommon/data/image/01_dialog_field_bg_dim.pngbin544 -> 0 bytes
-rwxr-xr-xcommon/data/image/01_dialogue_field_bg_press.pngbin549 -> 0 bytes
-rwxr-xr-xcommon/data/image/01_navi_icon_delete.pngbin431 -> 0 bytes
-rwxr-xr-xcommon/data/image/07_message_title_button.pngbin802 -> 0 bytes
-rwxr-xr-xcommon/data/image/17_default_image.pngbin1786 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_btn_Unread_message_press_HD.pngbin3076 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_btn_delete.pngbin0 -> 4565 bytes
-rwxr-xr-xcommon/data/image/M01_btn_message_send.pngbin0 -> 3507 bytes
-rwxr-xr-xcommon/data/image/M01_icon_DRM.pngbin0 -> 446 bytes
-rwxr-xr-xcommon/data/image/M01_icon_DRM_64x64.pngbin0 -> 408 bytes
-rwxr-xr-xcommon/data/image/M01_icon_OTA_HD.pngbin3514 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_OTA_press_HD.pngbin3514 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_Push_HD.pngbin3930 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_Push_press.pngbin3645 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_Push_press_HD.pngbin3930 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_Unsupported.pngbin0 -> 851 bytes
-rwxr-xr-xcommon/data/image/M01_icon_attach_voice.pngbin0 -> 3572 bytes
-rwxr-xr-xcommon/data/image/M01_icon_broadcasting_HD.pngbin3876 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_broadcasting_press.pngbin3349 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_broadcasting_press_HD.pngbin3876 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_minus.pngbin2952 -> 0 bytes
-rwxr-xr-xcommon/data/image/M01_icon_save.png (renamed from common/data/image/M01_btn_Unread_message_HD.png)bin3076 -> 3517 bytes
-rwxr-xr-xcommon/data/image/M01_icon_video_call.pngbin0 -> 3183 bytes
-rwxr-xr-xcommon/data/image/M01_icon_view_contact.pngbin0 -> 3237 bytes
-rwxr-xr-xcommon/data/image/M01_icon_voice.png (renamed from common/data/image/M01_btn_Unread_message.png)bin3076 -> 3492 bytes
-rwxr-xr-xcommon/data/image/M01_icon_voice_call.pngbin0 -> 3249 bytes
-rwxr-xr-xcommon/data/image/M01_photo_btn_delete.png (renamed from common/data/image/M01_icon_OTA_press.png)bin3361 -> 4274 bytes
-rwxr-xr-xcommon/data/image/Seven_IM_clip_nor.pngbin0 -> 1531 bytes
-rwxr-xr-xcommon/data/image/attach_icon.pngbin0 -> 1530 bytes
-rwxr-xr-xcommon/data/image/controlbar/01_controlbar_icon_Play.pngbin0 -> 375 bytes
-rwxr-xr-xcommon/data/image/controlbar/01_controlbar_icon_move.pngbin1130 -> 0 bytes
-rwxr-xr-xcommon/data/image/controlbar/01_controlbar_icon_pause.pngbin0 -> 243 bytes
-rwxr-xr-xcommon/data/image/controlbar/01_controlbar_icon_save.pngbin0 -> 510 bytes
-rwxr-xr-xcommon/data/image/controlbar/01_controlbar_icon_settings.pngbin0 -> 1604 bytes
-rwxr-xr-xcommon/data/image/controlbar/01_controllbar_icon_add_to_contact.pngbin4210 -> 0 bytes
-rwxr-xr-xcommon/data/image/controlbar/M01_controlbar_icon_attach.png (renamed from common/data/image/controlbar/01_controlbar_icon_call.png)bin3801 -> 3926 bytes
-rwxr-xr-xcommon/data/image/controlbar/M01_controlbar_icon_more.pngbin0 -> 3060 bytes
-rwxr-xr-xcommon/data/image/controlbar/M01_controlbar_icon_reply.pngbin0 -> 3386 bytes
-rwxr-xr-xcommon/data/image/controlbar/M01_controlbar_icon_resend.pngbin0 -> 3403 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_etc.pngbin0 -> 5229 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_excel.pngbin0 -> 5986 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_html.pngbin0 -> 6416 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_images.pngbin0 -> 1454 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_java.pngbin0 -> 3005 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_music.pngbin0 -> 4425 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_pdf.pngbin0 -> 4794 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_ppt.pngbin0 -> 5417 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_rss.pngbin0 -> 5082 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_svg.pngbin0 -> 5890 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_swf.pngbin0 -> 5653 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_text.png (renamed from common/data/image/M01_btn_Unread_message_press.png)bin3076 -> 4023 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_video.pngbin0 -> 8062 bytes
-rwxr-xr-xcommon/data/image/myfile_icon_word.pngbin0 -> 5865 bytes
-rwxr-xr-xcommon/data/image/org.tizen.message.cb.pngbin15608 -> 2901 bytes
-rwxr-xr-xcommon/data/image/org.tizen.message.noti.pngbin15608 -> 4721 bytes
-rwxr-xr-xcommon/data/image/org.tizen.message.pngbin15608 -> 6073 bytes
-rwxr-xr-xcommon/data/image/org.tizen.message.voice.pngbin15608 -> 4650 bytes
-rwxr-xr-xcommon/data/msg_button.edc1097
-rwxr-xr-xcommon/data/msg_common.edc222
-rwxr-xr-xcommon/data/msg_custom_winset.edc4
-rwxr-xr-xcommon/msg-ui-bundle.h15
-rwxr-xr-xcommon/msg-ui-common-utility.c667
-rwxr-xr-xcommon/msg-ui-common-utility.h183
-rwxr-xr-xcommon/msg-ui-image-resource.h76
-rwxr-xr-xcommon/msg-ui-util.h34
-rwxr-xr-xcomposer/CMakeLists.txt19
-rwxr-xr-xcomposer/data/composer_edc/composer_main.edc10
-rwxr-xr-xcomposer/data/composer_edc/msg-ui-composer-attachment.edc264
-rwxr-xr-xcomposer/data/composer_edc/msg-ui-composer-body.edc675
-rwxr-xr-xcomposer/data/composer_edc/msg-ui-composer-bubble.edc182
-rwxr-xr-xcomposer/data/composer_edc/msg-ui-composer-custom.edc208
-rwxr-xr-xcomposer/data/composer_edc/msg-ui-composer-data.edc45
-rwxr-xr-xcomposer/data/composer_edc/msg-ui-composer-main.edc88
-rwxr-xr-xcomposer/data/composer_edc/msg-ui-composer-subject.edc160
-rwxr-xr-xcomposer/data/composer_edc/white_theme_composer.edc18
-rwxr-xr-xcomposer/include/msg-ui-composer-attachment.h38
-rwxr-xr-xcomposer/include/msg-ui-composer-body-callback.h11
-rwxr-xr-xcomposer/include/msg-ui-composer-body-page.h14
-rwxr-xr-xcomposer/include/msg-ui-composer-body.h38
-rwxr-xr-xcomposer/include/msg-ui-composer-bubble.h101
-rwxr-xr-xcomposer/include/msg-ui-composer-common.h34
-rwxr-xr-xcomposer/include/msg-ui-composer-core.h46
-rwxr-xr-xcomposer/include/msg-ui-composer-data.h228
-rwxr-xr-xcomposer/include/msg-ui-composer-external.h33
-rwxr-xr-xcomposer/include/msg-ui-composer-main.h19
-rwxr-xr-xcomposer/include/msg-ui-composer-message-data.h37
-rwxr-xr-xcomposer/include/msg-ui-composer-message.h45
-rwxr-xr-xcomposer/include/msg-ui-composer-pageduration.h33
-rwxr-xr-xcomposer/include/msg-ui-composer-popup.h21
-rwxr-xr-xcomposer/include/msg-ui-composer-predictsearch.h1
-rwxr-xr-xcomposer/include/msg-ui-composer-recipient-callback.h5
-rwxr-xr-xcomposer/include/msg-ui-composer-recipient.h16
-rwxr-xr-xcomposer/include/msg-ui-composer-res.h35
-rwxr-xr-xcomposer/include/msg-ui-composer-string.h9
-rwxr-xr-xcomposer/include/msg-ui-composer-subject.h32
-rwxr-xr-xcomposer/src/bubble/msg-ui-composer-bubble-callback.c764
-rwxr-xr-xcomposer/src/bubble/msg-ui-composer-bubble-list.c911
-rwxr-xr-xcomposer/src/bubble/msg-ui-composer-bubble-main.c243
-rwxr-xr-xcomposer/src/bubble/msg-ui-composer-bubble-util.c369
-rwxr-xr-xcomposer/src/core/msg-ui-composer-core.c310
-rwxr-xr-xcomposer/src/external/msg-ui-composer-external.c1018
-rwxr-xr-xcomposer/src/gadget/msg-ui-composer-gadget.c147
-rwxr-xr-xcomposer/src/message/msg-ui-composer-message.c902
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-attachment.c551
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-body-callback.c430
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-body-page.c710
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-body.c884
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-common.c1033
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-main.c1381
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-pageduration.c180
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-popup.c141
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-predictsearch.c26
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-recipient-callback.c123
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-recipient.c721
-rwxr-xr-xcomposer/src/ui-composer/msg-ui-composer-subject.c433
-rwxr-xr-xcomposer/src/util/msg-ui-composer-util.c261
-rwxr-xr-xcomposer/src/util/msg-ui-composer-util.h12
-rwxr-xr-x[-rw-r--r--]debian/changelog6
-rwxr-xr-xdebian/control2
-rwxr-xr-xdebian/org.tizen.message.install.in1
-rwxr-xr-xdebian/org.tizen.message.postinst.in1
-rwxr-xr-xdebian/rules15
-rwxr-xr-xdialog/CMakeLists.txt3
-rwxr-xr-xdialog/message-dialog.c126
-rwxr-xr-xdialog/message-dialog.h3
-rwxr-xr-xmain/CMakeLists.txt6
-rwxr-xr-xmain/message.c751
-rwxr-xr-xmain/message.h26
-rwxr-xr-xmain/org.tizen.message.desktop.in27
-rwxr-xr-xmain/po/CMakeLists.txt5
-rw-r--r--main/po/ar.po504
-rw-r--r--main/po/bg.po504
-rw-r--r--main/po/ca.po504
-rw-r--r--main/po/cs.po504
-rw-r--r--main/po/da.po504
-rw-r--r--[-rwxr-xr-x]main/po/de_DE.po553
-rw-r--r--[-rwxr-xr-x]main/po/el_GR.po551
-rw-r--r--[-rwxr-xr-x]main/po/en.po549
-rw-r--r--main/po/en_US.po504
-rw-r--r--[-rwxr-xr-x]main/po/es_ES.po549
-rw-r--r--main/po/fi.po504
-rw-r--r--[-rwxr-xr-x]main/po/fr_FR.po549
-rw-r--r--main/po/he.po504
-rw-r--r--main/po/hi.po504
-rw-r--r--main/po/hr.po504
-rw-r--r--main/po/hu.po504
-rw-r--r--main/po/id.po504
-rw-r--r--[-rwxr-xr-x]main/po/it_IT.po551
-rw-r--r--[-rwxr-xr-x]main/po/ja_JP.po563
-rw-r--r--[-rwxr-xr-x]main/po/ko_KR.po559
-rw-r--r--main/po/lt.po504
-rw-r--r--main/po/lv.po504
-rw-r--r--main/po/ms.po504
-rw-r--r--[-rwxr-xr-x]main/po/nl_NL.po549
-rw-r--r--main/po/no.po504
-rw-r--r--main/po/pl.po504
-rw-r--r--[-rwxr-xr-x]main/po/pt_PT.po551
-rw-r--r--main/po/ro.po504
-rw-r--r--[-rwxr-xr-x]main/po/ru_RU.po559
-rw-r--r--main/po/sk.po504
-rw-r--r--main/po/sl.po504
-rw-r--r--main/po/sr.po504
-rw-r--r--main/po/sv.po504
-rw-r--r--main/po/th.po504
-rw-r--r--[-rwxr-xr-x]main/po/tr_TR.po549
-rw-r--r--main/po/uk.po504
-rw-r--r--main/po/vi.po504
-rw-r--r--[-rwxr-xr-x]main/po/zh_CN.po553
-rw-r--r--[-rwxr-xr-x]main/po/zh_HK.po551
-rw-r--r--[-rwxr-xr-x]main/po/zh_TW.po549
-rwxr-xr-xorg.tizen.message.xml83
-rwxr-xr-xpackaging/org.tizen.message.spec33
-rwxr-xr-xsetting/CMakeLists.txt10
-rwxr-xr-xsetting/include/msg-ui-setting-callback.h7
-rwxr-xr-xsetting/include/msg-ui-setting-common-util.h4
-rwxr-xr-xsetting/include/msg-ui-setting-gadget.h1
-rwxr-xr-xsetting/include/msg-ui-setting-general-setting.h61
-rwxr-xr-xsetting/include/msg-ui-setting-main.h10
-rwxr-xr-xsetting/include/msg-ui-setting-mm-message.h76
-rwxr-xr-xsetting/include/msg-ui-setting-msg-service-wrapper.h1
-rwxr-xr-xsetting/include/msg-ui-setting-text-message.h16
-rwxr-xr-xsetting/include/msg-ui-setting-types.h144
-rwxr-xr-xsetting/src/general/msg-ui-setting-general-block-message.c1129
-rwxr-xr-xsetting/src/general/msg-ui-setting-general-setting.c243
-rwxr-xr-xsetting/src/main/msg-ui-setting-callback.c28
-rwxr-xr-xsetting/src/main/msg-ui-setting-common-util.c2
-rwxr-xr-xsetting/src/main/msg-ui-setting-font-size.c240
-rwxr-xr-xsetting/src/main/msg-ui-setting-gadget.c80
-rwxr-xr-xsetting/src/main/msg-ui-setting-main.c136
-rwxr-xr-xsetting/src/main/msg-ui-setting-msg-service-wrapper.c56
-rwxr-xr-xsetting/src/multimedia/msg-ui-setting-mm-message.c734
-rwxr-xr-xsetting/src/multimedia/msg-ui-setting-mm-recv-option.c638
-rwxr-xr-xsetting/src/text/msg-ui-setting-text-message.c56
-rwxr-xr-xsetting/src/text/msg-ui-setting-text-service-center.c601
-rwxr-xr-xthread/include/msg-ui-thread-main.h315
-rwxr-xr-xthread/src/msg-ui-thread-callback.c983
-rwxr-xr-xthread/src/msg-ui-thread-list.c1849
-rwxr-xr-xthread/src/msg-ui-thread-main.c588
-rwxr-xr-xthread/src/msg-ui-thread-util.c772
-rwxr-xr-xthread/theme/thread_genlist.edc478
-rwxr-xr-xviewer/CMakeLists.txt65
-rwxr-xr-xviewer/include/msg-ui-viewer-drm-list.h100
-rwxr-xr-xviewer/include/msg-ui-viewer-drm-utility.h127
-rwxr-xr-xviewer/include/msg-ui-viewer-item-list.h101
-rwxr-xr-xviewer/include/msg-ui-viewer-main.h177
-rwxr-xr-xviewer/include/msg-ui-viewer-play-view.h310
-rwxr-xr-xviewer/include/msg-ui-viewer-types.h48
-rwxr-xr-xviewer/include/msg-ui-viewer-utility.h138
-rwxr-xr-xviewer/smil-player/include/msg-smil-content-manager.h234
-rwxr-xr-xviewer/smil-player/include/msg-smil-event-manager.h166
-rwxr-xr-xviewer/smil-player/include/msg-smil-player-interface.h125
-rwxr-xr-xviewer/smil-player/include/msg-smil-player.h167
-rwxr-xr-xviewer/smil-player/include/msg-smil-render.h195
-rwxr-xr-xviewer/smil-player/include/msg-smil-types.h176
-rwxr-xr-xviewer/smil-player/include/msg-smil-util.h48
-rwxr-xr-xviewer/smil-player/src/msg-smil-content-manager.c1193
-rwxr-xr-xviewer/smil-player/src/msg-smil-event-manager.c1299
-rwxr-xr-xviewer/smil-player/src/msg-smil-media-render.c1411
-rwxr-xr-xviewer/smil-player/src/msg-smil-player-interface.c75
-rwxr-xr-xviewer/smil-player/src/msg-smil-player.c449
-rwxr-xr-xviewer/smil-player/src/msg-smil-render.c681
-rwxr-xr-xviewer/smil-player/src/msg-smil-text-render.c253
-rwxr-xr-xviewer/smil-player/src/msg-smil-util.c75
-rwxr-xr-xviewer/src/msg-ui-viewer-callback.c132
-rwxr-xr-xviewer/src/msg-ui-viewer-drm-list.c505
-rwxr-xr-xviewer/src/msg-ui-viewer-drm-utility.c392
-rwxr-xr-xviewer/src/msg-ui-viewer-gadget.c533
-rwxr-xr-xviewer/src/msg-ui-viewer-item-list.c896
-rwxr-xr-xviewer/src/msg-ui-viewer-main.c494
-rwxr-xr-xviewer/src/msg-ui-viewer-play-view-callback.c2267
-rwxr-xr-xviewer/src/msg-ui-viewer-play-view.c2635
-rwxr-xr-xviewer/src/msg-ui-viewer-utility.c369
-rwxr-xr-xviewer/theme/msg_viewer.edc1051
290 files changed, 55790 insertions, 9275 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4d8f0a3..589d35f 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,8 @@ 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_VIEWER_DIR "${CMAKE_SOURCE_DIR}/viewer")
+SET(CMAKE_SOURCE_CLASS0_DIR "${CMAKE_SOURCE_DIR}/class0")
SET(CMAKE_SOURCE_DIALOG_DIR "${CMAKE_SOURCE_DIR}/dialog")
SET(PREFIX ${CMAKE_INSTALL_PREFIX})
@@ -34,4 +36,6 @@ ADD_SUBDIRECTORY(common)
ADD_SUBDIRECTORY(main)
ADD_SUBDIRECTORY(composer)
ADD_SUBDIRECTORY(setting)
+ADD_SUBDIRECTORY(viewer)
+ADD_SUBDIRECTORY(class0)
ADD_SUBDIRECTORY(dialog)
diff --git a/class0/CMakeLists.txt b/class0/CMakeLists.txt
new file mode 100755
index 0000000..95a37d4
--- /dev/null
+++ b/class0/CMakeLists.txt
@@ -0,0 +1,49 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(message C)
+
+SET(MSG_UI_CLASS0 msg-ui-class0)
+SET(SRCS ./msg-ui-class0-main.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_CLASS0_DIR}
+ /usr/include/msg-service/
+)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED elementary aul dlog msg-service capi-appfw-application)
+
+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(${MSG_UI_CLASS0} ${SRCS})
+TARGET_LINK_LIBRARIES(${MSG_UI_CLASS0} ${pkgs_LDFLAGS})
+
+INSTALL(TARGETS ${MSG_UI_CLASS0} DESTINATION bin)
+
+# install desktop file & icon
+
+# i18n
+#ADD_SUBDIRECTORY(po)
diff --git a/class0/msg-ui-class0-main.c b/class0/msg-ui-class0-main.c
new file mode 100755
index 0000000..9d3794f
--- /dev/null
+++ b/class0/msg-ui-class0-main.c
@@ -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-class0-main.h"
+
+static Eina_Bool __msg_ui_class0_keydown_cb(void *data, int type, void *event);
+static int __msg_ui_class0_load_msg_data(void *data);
+static char *__msg_ui_str_append(char *str, const char *txt, int *len, int *alloc);
+static char *__msg_ui_text_to_markup(const char *text);
+static void __msg_ui_class0_btn_clicked_event(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_class0_create_contents(void *data);
+static int __msg_ui_class0_create_view(void *data);
+
+static void __msg_ui_class0_win_del(void *data, Evas_Object *obj, void *event);
+static Evas_Object *__msg_ui_class0_create_win(const char *name);
+
+
+void msg_ui_class0_exit(void *data)
+{
+ struct appdata *ad = data;
+
+ int ret = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+ if (ad->msgInfo != NULL) {
+ msg_release_struct(&ad->msgInfo);
+ ad->msgInfo = NULL;
+ }
+
+ if (ad->msgHandle != NULL) {
+ ret = msg_close_msg_handle(&ad->msgHandle);
+ if (ret != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_close_msg_handle() is failed !! : ret value is %d", ret);
+ }
+ }
+
+ elm_exit();
+}
+
+static Eina_Bool __msg_ui_class0_keydown_cb(void *data, int type, void *event)
+{
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+ if (data == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is null, calling elm_exit...\n");
+ elm_exit();
+ }
+
+ Ecore_Event_Key *ev = event;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY = %s\n", ev->keyname);
+
+ if (!strcmp(ev->keyname, KEY_END)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "keyname = %s ...calling elm_exit...\n", ev->keyname);
+ elm_exit();
+ }
+
+ return EINA_FALSE;
+}
+
+static int __msg_ui_class0_load_msg_data(void *data)
+{
+ struct appdata *ad = data;
+
+ msg_error_t err = MSG_SUCCESS;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+ if (ad->msgHandle == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msgHandle is NULL !!");
+ return MSG_UI_RET_ERR;
+ }
+
+ ad->msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ if (ad->msgInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_new_message() is failed!");
+ return MSG_UI_RET_ERR;
+ }
+
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(ad->msgHandle, ad->msg_id, ad->msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message is failed! : %d", err);
+ if (ad->msgInfo != NULL) {
+ msg_release_struct(&ad->msgInfo);
+ ad->msgInfo = NULL;
+ }
+
+ return MSG_UI_RET_ERR;
+ } else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message is success");
+
+ return MSG_UI_RET_SUCCESS;
+}
+
+static char *
+__msg_ui_str_append(char *str, const char *txt, int *len, int *alloc)
+{
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+ int txt_len = strlen(txt);
+
+ if (txt_len <= 0)
+ return str;
+
+ if ((*len + txt_len) >= *alloc) {
+ char *str2;
+ int alloc2;
+
+ alloc2 = *alloc + txt_len + 128;
+ str2 = realloc(str, alloc2);
+ if (!str2)
+ return str;
+
+ *alloc = alloc2;
+ str = str2;
+ }
+
+ strcpy(str + *len, txt);
+ *len += txt_len;
+ return str;
+}
+
+static char *
+__msg_ui_text_to_markup(const char *text)
+{
+ char *str = NULL;
+ int str_len = 0, str_alloc = 0;
+ int ch, pos = 0, pos2 = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+ if (!text)
+ return NULL;
+
+ for (;;) {
+ pos = pos2;
+ pos2 = evas_string_char_next_get(text, pos2, &ch);
+ if ((ch <= 0) || (pos2 <= 0))
+ break;
+
+ if (ch == '\n')
+ str = __msg_ui_str_append(str, "<br>", &str_len, &str_alloc);
+ else if (ch == '\t')
+ str = __msg_ui_str_append(str, "<\t>", &str_len, &str_alloc);
+ else if (ch == '<')
+ str = __msg_ui_str_append(str, "&lt;", &str_len, &str_alloc);
+ else if (ch == '>')
+ str = __msg_ui_str_append(str, "&gt;", &str_len, &str_alloc);
+ else if (ch == '&')
+ str = __msg_ui_str_append(str, "&amp;", &str_len, &str_alloc);
+ else {
+ char tstr[16];
+
+ strncpy(tstr, text + pos, pos2 - pos);
+ tstr[pos2 - pos] = 0;
+ str = __msg_ui_str_append(str, tstr, &str_len, &str_alloc);
+ }
+ }
+
+ return str;
+}
+
+static void __msg_ui_class0_btn_clicked_event(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = data;
+
+ int err = MSG_SUCCESS;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "obj = 0x%x", obj);
+
+ if (obj == ad->right_btn) {
+ /* Save it to Inbox. */
+ err = msg_move_msg_to_folder(ad->msgHandle, ad->msg_id, MSG_INBOX_ID);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_move_msg_to_folder() is failed : err = %d", err);
+ }
+
+ msg_ui_class0_exit(ad);
+ } else if (obj == ad->left_btn) {
+ /* Discard this message */
+ err = msg_delete_message(ad->msgHandle, ad->msg_id);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_message() is failed : err = %d", err);
+ }
+
+ msg_ui_class0_exit(ad);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid obj = 0x%x", obj);
+ return;
+ }
+}
+
+static Evas_Object*
+__msg_ui_class0_create_contents(void *data)
+{
+ struct appdata *ad = data;
+
+ Evas_Object *scroller = NULL;
+
+ char buf[2048] = { 0, };
+ char *str = NULL;
+
+ int msgSize = 0;
+ char pMsgBody[2048] = {0,};
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+ /* Create scroller. */
+ scroller = elm_scroller_add(ad->navi_frame);
+ evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_scroller_page_relative_set(scroller, 0.0, 0.0);
+ elm_scroller_bounce_set(scroller, FALSE, TRUE);
+ evas_object_show(scroller);
+
+ /* Create label. */
+ ad->label = elm_label_add(scroller);
+ elm_object_style_set(ad->label, "detail_view/description");
+ evas_object_size_hint_align_set(ad->label, EVAS_HINT_FILL, 0.0);
+ evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, 0.0);
+
+ msg_get_int_value(ad->msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize);
+ if (msgSize > 0) {
+ msg_get_str_value(ad->msgInfo, MSG_MESSAGE_SMS_DATA_STR, pMsgBody, sizeof(pMsgBody));
+ if (pMsgBody[0] != '\0') {
+ snprintf(buf, sizeof(buf), "%s", pMsgBody);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_sms_get_message_body() is failed !!");
+ snprintf(buf, sizeof(buf), "Message is empty !!");
+ }
+ } else {
+ snprintf(buf, sizeof(buf), "Message is empty !!");
+ }
+
+ buf[2047] = '\n';
+
+ str = __msg_ui_text_to_markup(buf);
+ elm_object_text_set(ad->label, str);
+ elm_label_line_wrap_set(ad->label, TRUE);
+ elm_object_content_set(scroller, ad->label);
+ evas_object_show(ad->label);
+
+ if (str)
+ free(str);
+
+ return scroller;
+}
+
+static int __msg_ui_class0_create_view(void *data)
+{
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " ");
+
+ struct appdata *ad = data;
+
+ Evas_Object *content = NULL;
+
+ Evas_Object *ctrl_bar;
+ Evas_Object *ctrl_btn_left;
+ Evas_Object *ctrl_btn_right;
+ Elm_Object_Item *ctrl_left_item;
+ Elm_Object_Item *ctrl_right_item;
+ Evas_Object *icon_left;
+ Evas_Object *icon_right;
+
+ char buf[DEF_BUF_LEN_S];
+
+ /* Create layout */
+ ad->layout_main = elm_layout_add(ad->win_main);
+ elm_layout_theme_set(ad->layout_main, "layout", "application", "default");
+ 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);
+ evas_object_show(ad->layout_main);
+
+ /* Create navi_frame */
+ ad->navi_frame = elm_naviframe_add(ad->layout_main);
+ elm_object_part_content_set(ad->layout_main, "elm.swallow.content", ad->navi_frame);
+ evas_object_show(ad->navi_frame);
+
+ content = __msg_ui_class0_create_contents(ad);
+ if (content == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_class0_create_contents() is failed !!");
+ return MSG_UI_RET_ERR;
+ }
+
+ ctrl_bar = elm_toolbar_add(ad->navi_frame);
+ elm_toolbar_shrink_mode_set(ctrl_bar, ELM_TOOLBAR_SHRINK_EXPAND);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_DEBUG, ctrl_bar == NULL, MSG_UI_RET_ERR, "ctrl_bar is NULL !!");
+
+ elm_object_style_set(ctrl_bar, "naviframe");
+
+ ctrl_btn_left = elm_button_add(ctrl_bar);
+ elm_object_style_set(ctrl_btn_left, "naviframe_control/left");
+ evas_object_size_hint_align_set(ctrl_btn_left, EVAS_HINT_FILL, 0.5);
+ icon_left = elm_icon_add(ctrl_btn_left);
+ memset(buf, 0x0, sizeof(buf));
+ snprintf(buf, sizeof(buf), "%s", MSG_HEADER_ICON_CANCEL);
+ elm_icon_file_set(icon_left, buf, NULL);
+ elm_object_part_content_set(ctrl_btn_left, "elm.swallow.content", icon_left);
+ elm_object_text_set(ctrl_btn_left, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DISCARD"));
+ evas_object_show(ctrl_btn_left);
+ evas_object_smart_callback_add(ctrl_btn_left, "clicked", __msg_ui_class0_btn_clicked_event, ad);
+ ad->left_btn = ctrl_btn_left;
+
+ ctrl_btn_right = elm_button_add(ctrl_bar);
+ elm_object_style_set(ctrl_btn_right, "naviframe_control/right");
+ evas_object_size_hint_align_set(ctrl_btn_right, EVAS_HINT_FILL, 0.5);
+ icon_right = elm_icon_add(ctrl_btn_right);
+ memset(buf, 0x0, sizeof(buf));
+ snprintf(buf, sizeof(buf), "%s", MSG_HEADER_ICON_DONE);
+ elm_icon_file_set(icon_right, buf, NULL);
+ elm_object_part_content_set(ctrl_btn_right, "elm.swallow.content", icon_right);
+ elm_object_text_set(ctrl_btn_right, dgettext("sys_string", "IDS_COM_SK_SAVE"));
+ evas_object_show(ctrl_btn_right);
+ evas_object_smart_callback_add(ctrl_btn_right, "clicked", __msg_ui_class0_btn_clicked_event, ad);
+ ad->right_btn = ctrl_btn_right;
+
+ ctrl_left_item = elm_toolbar_item_append(ctrl_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_part_content_set(ctrl_left_item, "object", ctrl_btn_left);
+ elm_toolbar_item_append(ctrl_bar, NULL, NULL, NULL, NULL);
+ ctrl_right_item = elm_toolbar_item_append(ctrl_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_part_content_set(ctrl_right_item, "object", ctrl_btn_right);
+
+ Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->navi_frame, dgettext(MESSAGE_PKGNAME, "Class 0 message"), NULL, NULL, content, NULL);
+ elm_object_item_part_content_set(nf_it, "optionheader", ctrl_bar);
+
+ return MSG_UI_RET_SUCCESS;
+}
+
+static void __msg_ui_class0_win_del(void *data, Evas_Object *obj, void *event)
+{
+ elm_exit();
+}
+
+static Evas_Object *__msg_ui_class0_create_win(const char *name)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ Evas_Object *eo;
+ int w, h;
+
+ eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (eo) {
+ elm_win_title_set(eo, name);
+ evas_object_smart_callback_add(eo, "delete,request", __msg_ui_class0_win_del, NULL);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(eo, w, h);
+ }
+
+ return eo;
+}
+
+static bool app_create(void *data)
+{
+ struct appdata *ad = data;
+
+ int ret = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg ID = %d", ad->msg_id);
+
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __msg_ui_class0_keydown_cb, ad);
+
+ ret = msg_open_msg_handle(&ad->msgHandle);
+ if (ret != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_open_msg_handle() is failed : ret = %d", ret);
+ msg_ui_class0_exit(ad);
+ return FALSE;
+ }
+
+ /* init internationalization */
+ if (bindtextdomain(MESSAGE_PKGNAME, LOCALEDIR) == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "bindtextdomain() is failed : ret = %d", ret);
+ return FALSE;
+ }
+
+ if (textdomain(MESSAGE_PKGNAME) == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "textdomain() is failed : ret = %d", ret);
+ return FALSE;
+ }
+
+ ad->win_main = __msg_ui_class0_create_win(PACKAGE);
+ if (ad->win_main == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "Main window is NULL");
+ return FALSE;
+ } else {
+ evas_object_show(ad->win_main);
+ }
+
+ /* Indicator */
+ elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
+
+ evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "main window width[%d], height[%d]", ad->root_w, ad->root_h);
+
+ /* draw background image */
+ ad->bg = elm_bg_add(ad->win_main);
+ evas_object_size_hint_weight_set(ad->bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(ad->win_main, ad->bg);
+ evas_object_show(ad->bg);
+
+ return TRUE;
+}
+
+static void app_terminate(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ msg_ui_class0_exit(data);
+}
+
+static void app_pause(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+static void app_resume(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+static void app_service(service_h service, void *data)
+{
+ struct appdata *ad = data;
+
+ char *strMsgId = NULL;
+ int ret = 0;
+
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ service_get_extra_data(service, MSG_BUNDLE_KEY_MSG_ID, &strMsgId);
+
+ if (strMsgId == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_get_extra_data() is failed !!");
+ return;
+ } else {
+ ad->msg_id = atoi(strMsgId);
+
+ /* Load message data by using message ID. */
+ ret = __msg_ui_class0_load_msg_data(ad);
+ if (ret < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "__msg_ui_class0_load_msg_data() is failed : ret = %d", ret);
+ msg_ui_class0_exit(ad);
+ return;
+ }
+
+ /* Create main view */
+ __msg_ui_class0_create_view(ad);
+
+ evas_object_show(ad->win_main);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ struct appdata ad;
+ memset(&ad, 0x0, sizeof(struct appdata));
+
+ app_event_callback_s event_callback;
+
+ event_callback.create = app_create;
+ event_callback.terminate = app_terminate;
+ event_callback.pause = app_pause;
+ event_callback.resume = app_resume;
+ event_callback.service = app_service;
+ event_callback.low_memory = NULL;
+ event_callback.low_battery = NULL;
+ event_callback.device_orientation = NULL;
+ event_callback.language_changed = NULL;
+ event_callback.region_format_changed = NULL;
+
+ return app_efl_main(&argc, &argv, &event_callback, &ad);
+}
diff --git a/class0/msg-ui-class0-main.h b/class0/msg-ui-class0-main.h
new file mode 100755
index 0000000..6d94037
--- /dev/null
+++ b/class0/msg-ui-class0-main.h
@@ -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 __DEF_msg_ui_class0_main_H__
+#define __DEF_msg_ui_class0_main_H__
+
+#include <stdio.h>
+#include <app.h>
+#include <utilX.h>
+#include <Ecore_X.h>
+#include "msg-ui-util.h"
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
+#include <Elementary.h>
+
+#define PACKAGE "msg-ui-class0" /* for i18n */
+#define GRP_MAIN "main"
+
+struct appdata {
+ int root_w;
+ int root_h;
+ int root_x;
+ int root_y;
+ double w_ratio, h_ratio;
+
+ Evas *evas;
+ Evas_Object *win_main;
+ Evas_Object *bg;
+ Evas_Object *layout_main;
+ Evas_Object *layout;
+ Evas_Object *navi_frame;
+ Evas_Object *label;
+ Evas_Object *left_btn;
+ Evas_Object *right_btn;
+ msg_handle_t msgHandle;
+
+ /* argument */
+ int msg_id;
+
+ msg_struct_t msgInfo;
+};
+
+void msg_ui_class0_exit(void *data);
+int main(int argc, char **argv);
+
+#endif /* __DEF_msg_ui_class0_main_H__ */
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 3529d93..3ddad7d 100755
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -16,18 +16,22 @@ INCLUDE_DIRECTORIES(
INCLUDE(FindPkgConfig)
pkg_check_modules(pkgs REQUIRED
- appcore-common appcore-efl appsvc
+ appsvc
bundle
capi-appfw-application contacts-service
- dlog devman_haptic
+ dlog drm-client drm-trusted devman_haptic
elementary ecore ecore-x ecore-input ecore-imf ecore-file eina
glib-2.0
heynoti
icu-i18n
msg-service
- ui-gadget
+ mm-common mm-player mm-session mmutil-jpeg mmutil-imgp mm-fileinfo
+ ui-gadget-1
utilX
vconf
+ syspopup-caller
+ capi-media-sound-manager
+ status
)
FOREACH(flag ${pkgs_CFLAGS})
@@ -40,10 +44,32 @@ SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"")
ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"")
ADD_DEFINITIONS("-DTARGET")
+ADD_DEFINITIONS("-DSLP_PROF")
ADD_LIBRARY(${PROJECT_NAME} SHARED ${COMMON_SRCS})
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION} )
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${CMAKE_LDFLAGS})
+ADD_CUSTOM_TARGET(msg_common.edj
+ COMMAND edje_cc -id
+ ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image
+ ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edc
+ ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edj
+ DEPENDS ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edc
+)
+
+ADD_CUSTOM_TARGET(msg_custom_winset.edj
+ COMMAND edje_cc -id
+ ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image
+ ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edc
+ ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edj
+ DEPENDS ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edc
+)
+
+ADD_DEPENDENCIES(${PROJECT_NAME} msg_common.edj)
+ADD_DEPENDENCIES(${PROJECT_NAME} msg_custom_winset.edj)
+
# Install so files.
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})
+INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edj DESTINATION ${EDJDIR})
diff --git a/common/data/edc_image/00_sweep_list_bg.png b/common/data/edc_image/00_MessageBubble_date_bg.png
index b08f111..b0fb761 100755
--- a/common/data/edc_image/00_sweep_list_bg.png
+++ b/common/data/edc_image/00_MessageBubble_date_bg.png
Binary files differ
diff --git a/common/data/edc_image/00_btn_circle_bg_normal.png b/common/data/edc_image/00_btn_circle_bg_normal.png
new file mode 100755
index 0000000..981d624
--- /dev/null
+++ b/common/data/edc_image/00_btn_circle_bg_normal.png
Binary files differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_info.png b/common/data/edc_image/00_btn_circle_bg_press.png
index 12a5b06..bc5f8b2 100755
--- a/common/data/image/controlbar/01_controlbar_icon_info.png
+++ b/common/data/edc_image/00_btn_circle_bg_press.png
Binary files differ
diff --git a/common/data/edc_image/00_button_03_dim.png b/common/data/edc_image/00_button_03_dim.png
deleted file mode 100755
index 118cbb9..0000000
--- a/common/data/edc_image/00_button_03_dim.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/00_button_03_focus.png b/common/data/edc_image/00_button_03_focus.png
deleted file mode 100755
index e0f8ebf..0000000
--- a/common/data/edc_image/00_button_03_focus.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/00_button_03_normal.png b/common/data/edc_image/00_button_03_normal.png
deleted file mode 100755
index 118cbb9..0000000
--- a/common/data/edc_image/00_button_03_normal.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/00_button_03_press.png b/common/data/edc_image/00_button_03_press.png
deleted file mode 100755
index 2f0dbc3..0000000
--- a/common/data/edc_image/00_button_03_press.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/00_button_04_dim.png b/common/data/edc_image/00_button_04_dim.png
new file mode 100755
index 0000000..76865ec
--- /dev/null
+++ b/common/data/edc_image/00_button_04_dim.png
Binary files differ
diff --git a/common/data/edc_image/00_button_04_normal.png b/common/data/edc_image/00_button_04_normal.png
new file mode 100755
index 0000000..76865ec
--- /dev/null
+++ b/common/data/edc_image/00_button_04_normal.png
Binary files differ
diff --git a/common/data/edc_image/M01_btn_Unread_message_white_theme.png b/common/data/edc_image/00_button_04_normal_focus.png
index 68772aa..06c39d8 100755
--- a/common/data/edc_image/M01_btn_Unread_message_white_theme.png
+++ b/common/data/edc_image/00_button_04_normal_focus.png
Binary files differ
diff --git a/common/data/edc_image/00_button_04_press.png b/common/data/edc_image/00_button_04_press.png
new file mode 100755
index 0000000..2c43c71
--- /dev/null
+++ b/common/data/edc_image/00_button_04_press.png
Binary files 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
deleted file mode 100755
index 96374f5..0000000
--- a/common/data/edc_image/00_list_bar_group_middle_focus.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index 0e0becb..0000000
--- a/common/data/edc_image/00_list_bar_press_1x80.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/00_list_photo_default.png b/common/data/edc_image/00_list_photo_default.png
deleted file mode 100755
index 2d15281..0000000
--- a/common/data/edc_image/00_list_photo_default.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index 074b806..0000000
--- a/common/data/edc_image/07_message_add files_bg.PNG
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/07_message_bubble_readmessage.png b/common/data/edc_image/07_message_bubble_readmessage.png
deleted file mode 100755
index 5b57efe..0000000
--- a/common/data/edc_image/07_message_bubble_readmessage.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index 1e0f324..0000000
--- a/common/data/edc_image/07_message_bubble_reponsible_message.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/07_message_bubble_sentmessage.png b/common/data/edc_image/07_message_bubble_sentmessage.png
deleted file mode 100755
index 7ae30ba..0000000
--- a/common/data/edc_image/07_message_bubble_sentmessage.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index d1acc0d..0000000
--- a/common/data/edc_image/07_message_list_badge_01.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/07_message_list_bg.PNG b/common/data/edc_image/07_message_list_bg.PNG
deleted file mode 100755
index 2ba50b9..0000000
--- a/common/data/edc_image/07_message_list_bg.PNG
+++ /dev/null
Binary files 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
deleted file mode 100755
index d32d1e3..0000000
--- a/common/data/edc_image/07_message_sweep_list_bg.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index 41932ca..0000000
--- a/common/data/edc_image/27_textinput_predictive_btn_arrow_down.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index 2fdda91..0000000
--- a/common/data/edc_image/27_textinput_predictive_btn_arrow_up.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/M01_btn_Unread_message.png b/common/data/edc_image/M01_btn_add_plus.png
index 68772aa..7080f43 100755
--- a/common/data/edc_image/M01_btn_Unread_message.png
+++ b/common/data/edc_image/M01_btn_add_plus.png
Binary files differ
diff --git a/common/data/edc_image/white/M01_search_input_field_bg.png b/common/data/edc_image/M01_input_bg.png
index f5aaa5e..1c78dbb 100755
--- a/common/data/edc_image/white/M01_search_input_field_bg.png
+++ b/common/data/edc_image/M01_input_bg.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_next.png b/common/data/edc_image/M01_play_btn_next.png
new file mode 100755
index 0000000..3fe0def
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_next.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_next_press.png b/common/data/edc_image/M01_play_btn_next_press.png
new file mode 100755
index 0000000..18a21c1
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_next_press.png
Binary files differ
diff --git a/common/data/edc_image/white/M01_icon_minus.png b/common/data/edc_image/M01_play_btn_pause.png
index 1943f8d..d3578d2 100755
--- a/common/data/edc_image/white/M01_icon_minus.png
+++ b/common/data/edc_image/M01_play_btn_pause.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_pause_press.png b/common/data/edc_image/M01_play_btn_pause_press.png
new file mode 100755
index 0000000..b851280
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_pause_press.png
Binary files differ
diff --git a/common/data/edc_image/M01_btn_Unread_message_HD.png b/common/data/edc_image/M01_play_btn_play.png
index 55004f5..3460a6a 100755
--- a/common/data/edc_image/M01_btn_Unread_message_HD.png
+++ b/common/data/edc_image/M01_play_btn_play.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_play_press.png b/common/data/edc_image/M01_play_btn_play_press.png
new file mode 100755
index 0000000..cdccbb4
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_play_press.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_previous.png b/common/data/edc_image/M01_play_btn_previous.png
new file mode 100755
index 0000000..405917c
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_previous.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_previous_press.png b/common/data/edc_image/M01_play_btn_previous_press.png
new file mode 100755
index 0000000..7169310
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_previous_press.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_volume.png b/common/data/edc_image/M01_play_btn_volume.png
new file mode 100755
index 0000000..ecb8d3a
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_volume.png
Binary files differ
diff --git a/common/data/edc_image/M01_play_btn_volume_press.png b/common/data/edc_image/M01_play_btn_volume_press.png
new file mode 100755
index 0000000..e209bd0
--- /dev/null
+++ b/common/data/edc_image/M01_play_btn_volume_press.png
Binary files differ
diff --git a/common/data/image/white/M01_icon_minus.png b/common/data/edc_image/M01_player_bg.png
index 1943f8d..b313430 100755
--- a/common/data/image/white/M01_icon_minus.png
+++ b/common/data/edc_image/M01_player_bg.png
Binary files differ
diff --git a/common/data/edc_image/M01_player_progress_bar.png b/common/data/edc_image/M01_player_progress_bar.png
new file mode 100755
index 0000000..a7bf3ca
--- /dev/null
+++ b/common/data/edc_image/M01_player_progress_bar.png
Binary files differ
diff --git a/common/data/edc_image/M01_player_progress_bg.png b/common/data/edc_image/M01_player_progress_bg.png
new file mode 100755
index 0000000..b56bbc4
--- /dev/null
+++ b/common/data/edc_image/M01_player_progress_bg.png
Binary files differ
diff --git a/common/data/edc_image/M01_search_input_field_attach_bg.png b/common/data/edc_image/M01_search_input_field_attach_bg.png
new file mode 100755
index 0000000..0f7cbe3
--- /dev/null
+++ b/common/data/edc_image/M01_search_input_field_attach_bg.png
Binary files 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
index 038da87..79aac96 100755
--- a/common/data/edc_image/M01_search_input_field_bg.png
+++ b/common/data/edc_image/M01_search_input_field_bg.png
Binary files differ
diff --git a/common/data/edc_image/M01_title_btn_bg.png b/common/data/edc_image/M01_title_btn_bg.png
new file mode 100755
index 0000000..b109553
--- /dev/null
+++ b/common/data/edc_image/M01_title_btn_bg.png
Binary files differ
diff --git a/common/data/edc_image/M01_title_btn_bg_press.png b/common/data/edc_image/M01_title_btn_bg_press.png
new file mode 100755
index 0000000..ba66399
--- /dev/null
+++ b/common/data/edc_image/M01_title_btn_bg_press.png
Binary files 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
deleted file mode 100755
index 6125f7e..0000000
--- a/common/data/edc_image/Seven_IM_input_field_01.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index fed0b36..0000000
--- a/common/data/edc_image/Seven_IM_input_field_02.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index 074b806..0000000
--- a/common/data/edc_image/black/07_message_add files_bg.PNG
+++ /dev/null
Binary files 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
deleted file mode 100755
index 038da87..0000000
--- a/common/data/edc_image/black/M01_search_input_field_bg.png
+++ /dev/null
Binary files differ
diff --git a/common/data/edc_image/nf_title_separator.png b/common/data/edc_image/nf_title_separator.png
new file mode 100755
index 0000000..e287978
--- /dev/null
+++ b/common/data/edc_image/nf_title_separator.png
Binary files differ
diff --git a/common/data/edc_image/optionheader_arrow.png b/common/data/edc_image/optionheader_arrow.png
new file mode 100755
index 0000000..508c2c8
--- /dev/null
+++ b/common/data/edc_image/optionheader_arrow.png
Binary files 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
deleted file mode 100755
index 074b806..0000000
--- a/common/data/edc_image/white/07_message_add files_bg.PNG
+++ /dev/null
Binary files differ
diff --git a/common/data/image/00_list_photo_default.png b/common/data/image/00_list_photo_default.png
deleted file mode 100755
index 2d15281..0000000
--- a/common/data/image/00_list_photo_default.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/01_controllbar_icon_add_to_contact.png b/common/data/image/01_controllbar_icon_add_to_contact.png
new file mode 100755
index 0000000..5e92417
--- /dev/null
+++ b/common/data/image/01_controllbar_icon_add_to_contact.png
Binary files differ
diff --git a/common/data/image/01_dialog_field_bg.png b/common/data/image/01_dialog_field_bg.png
deleted file mode 100755
index 67d3908..0000000
--- a/common/data/image/01_dialog_field_bg.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/01_dialog_field_bg_dim.png b/common/data/image/01_dialog_field_bg_dim.png
deleted file mode 100755
index 25c4acf..0000000
--- a/common/data/image/01_dialog_field_bg_dim.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/01_dialogue_field_bg_press.png b/common/data/image/01_dialogue_field_bg_press.png
deleted file mode 100755
index 8686f16..0000000
--- a/common/data/image/01_dialogue_field_bg_press.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/01_navi_icon_delete.png b/common/data/image/01_navi_icon_delete.png
deleted file mode 100755
index 4f0f16e..0000000
--- a/common/data/image/01_navi_icon_delete.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/07_message_title_button.png b/common/data/image/07_message_title_button.png
deleted file mode 100755
index 3c6909b..0000000
--- a/common/data/image/07_message_title_button.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/17_default_image.png b/common/data/image/17_default_image.png
deleted file mode 100755
index 780985e..0000000
--- a/common/data/image/17_default_image.png
+++ /dev/null
Binary files 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
deleted file mode 100755
index 55004f5..0000000
--- a/common/data/image/M01_btn_Unread_message_press_HD.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_btn_delete.png b/common/data/image/M01_btn_delete.png
new file mode 100755
index 0000000..0ac1428
--- /dev/null
+++ b/common/data/image/M01_btn_delete.png
Binary files differ
diff --git a/common/data/image/M01_btn_message_send.png b/common/data/image/M01_btn_message_send.png
new file mode 100755
index 0000000..4b34e1f
--- /dev/null
+++ b/common/data/image/M01_btn_message_send.png
Binary files differ
diff --git a/common/data/image/M01_icon_DRM.png b/common/data/image/M01_icon_DRM.png
new file mode 100755
index 0000000..a239ccb
--- /dev/null
+++ b/common/data/image/M01_icon_DRM.png
Binary files differ
diff --git a/common/data/image/M01_icon_DRM_64x64.png b/common/data/image/M01_icon_DRM_64x64.png
new file mode 100755
index 0000000..c010fc6
--- /dev/null
+++ b/common/data/image/M01_icon_DRM_64x64.png
Binary files differ
diff --git a/common/data/image/M01_icon_OTA_HD.png b/common/data/image/M01_icon_OTA_HD.png
deleted file mode 100755
index ffeb5d3..0000000
--- a/common/data/image/M01_icon_OTA_HD.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_OTA_press_HD.png b/common/data/image/M01_icon_OTA_press_HD.png
deleted file mode 100755
index ffeb5d3..0000000
--- a/common/data/image/M01_icon_OTA_press_HD.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_Push_HD.png b/common/data/image/M01_icon_Push_HD.png
deleted file mode 100755
index b6be564..0000000
--- a/common/data/image/M01_icon_Push_HD.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_Push_press.png b/common/data/image/M01_icon_Push_press.png
deleted file mode 100755
index c229030..0000000
--- a/common/data/image/M01_icon_Push_press.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_Push_press_HD.png b/common/data/image/M01_icon_Push_press_HD.png
deleted file mode 100755
index b6be564..0000000
--- a/common/data/image/M01_icon_Push_press_HD.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_Unsupported.png b/common/data/image/M01_icon_Unsupported.png
new file mode 100755
index 0000000..91c5600
--- /dev/null
+++ b/common/data/image/M01_icon_Unsupported.png
Binary files differ
diff --git a/common/data/image/M01_icon_attach_voice.png b/common/data/image/M01_icon_attach_voice.png
new file mode 100755
index 0000000..92323d5
--- /dev/null
+++ b/common/data/image/M01_icon_attach_voice.png
Binary files differ
diff --git a/common/data/image/M01_icon_broadcasting_HD.png b/common/data/image/M01_icon_broadcasting_HD.png
deleted file mode 100755
index bd4d650..0000000
--- a/common/data/image/M01_icon_broadcasting_HD.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_broadcasting_press.png b/common/data/image/M01_icon_broadcasting_press.png
deleted file mode 100755
index 038cd2a..0000000
--- a/common/data/image/M01_icon_broadcasting_press.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_broadcasting_press_HD.png b/common/data/image/M01_icon_broadcasting_press_HD.png
deleted file mode 100755
index bd4d650..0000000
--- a/common/data/image/M01_icon_broadcasting_press_HD.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_icon_minus.png b/common/data/image/M01_icon_minus.png
deleted file mode 100755
index bddc2cf..0000000
--- a/common/data/image/M01_icon_minus.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/M01_btn_Unread_message_HD.png b/common/data/image/M01_icon_save.png
index 55004f5..4bcf587 100755
--- a/common/data/image/M01_btn_Unread_message_HD.png
+++ b/common/data/image/M01_icon_save.png
Binary files differ
diff --git a/common/data/image/M01_icon_video_call.png b/common/data/image/M01_icon_video_call.png
new file mode 100755
index 0000000..6eaecd8
--- /dev/null
+++ b/common/data/image/M01_icon_video_call.png
Binary files differ
diff --git a/common/data/image/M01_icon_view_contact.png b/common/data/image/M01_icon_view_contact.png
new file mode 100755
index 0000000..bb35882
--- /dev/null
+++ b/common/data/image/M01_icon_view_contact.png
Binary files differ
diff --git a/common/data/image/M01_btn_Unread_message.png b/common/data/image/M01_icon_voice.png
index 55004f5..a682ffb 100755
--- a/common/data/image/M01_btn_Unread_message.png
+++ b/common/data/image/M01_icon_voice.png
Binary files differ
diff --git a/common/data/image/M01_icon_voice_call.png b/common/data/image/M01_icon_voice_call.png
new file mode 100755
index 0000000..13f496d
--- /dev/null
+++ b/common/data/image/M01_icon_voice_call.png
Binary files differ
diff --git a/common/data/image/M01_icon_OTA_press.png b/common/data/image/M01_photo_btn_delete.png
index 7dcdb30..fdb4f0a 100755
--- a/common/data/image/M01_icon_OTA_press.png
+++ b/common/data/image/M01_photo_btn_delete.png
Binary files differ
diff --git a/common/data/image/Seven_IM_clip_nor.png b/common/data/image/Seven_IM_clip_nor.png
new file mode 100755
index 0000000..65f7dfa
--- /dev/null
+++ b/common/data/image/Seven_IM_clip_nor.png
Binary files differ
diff --git a/common/data/image/attach_icon.png b/common/data/image/attach_icon.png
new file mode 100755
index 0000000..062ce45
--- /dev/null
+++ b/common/data/image/attach_icon.png
Binary files differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_Play.png b/common/data/image/controlbar/01_controlbar_icon_Play.png
new file mode 100755
index 0000000..9de9162
--- /dev/null
+++ b/common/data/image/controlbar/01_controlbar_icon_Play.png
Binary files differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_move.png b/common/data/image/controlbar/01_controlbar_icon_move.png
deleted file mode 100755
index fdc8c8a..0000000
--- a/common/data/image/controlbar/01_controlbar_icon_move.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_pause.png b/common/data/image/controlbar/01_controlbar_icon_pause.png
new file mode 100755
index 0000000..8419334
--- /dev/null
+++ b/common/data/image/controlbar/01_controlbar_icon_pause.png
Binary files differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_save.png b/common/data/image/controlbar/01_controlbar_icon_save.png
new file mode 100755
index 0000000..2d8db38
--- /dev/null
+++ b/common/data/image/controlbar/01_controlbar_icon_save.png
Binary files differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_settings.png b/common/data/image/controlbar/01_controlbar_icon_settings.png
new file mode 100755
index 0000000..bbea504
--- /dev/null
+++ b/common/data/image/controlbar/01_controlbar_icon_settings.png
Binary files 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
deleted file mode 100755
index 65d47e4..0000000
--- a/common/data/image/controlbar/01_controllbar_icon_add_to_contact.png
+++ /dev/null
Binary files differ
diff --git a/common/data/image/controlbar/01_controlbar_icon_call.png b/common/data/image/controlbar/M01_controlbar_icon_attach.png
index b8b7806..67959f0 100755
--- a/common/data/image/controlbar/01_controlbar_icon_call.png
+++ b/common/data/image/controlbar/M01_controlbar_icon_attach.png
Binary files differ
diff --git a/common/data/image/controlbar/M01_controlbar_icon_more.png b/common/data/image/controlbar/M01_controlbar_icon_more.png
new file mode 100755
index 0000000..e5589d3
--- /dev/null
+++ b/common/data/image/controlbar/M01_controlbar_icon_more.png
Binary files differ
diff --git a/common/data/image/controlbar/M01_controlbar_icon_reply.png b/common/data/image/controlbar/M01_controlbar_icon_reply.png
new file mode 100755
index 0000000..cb86286
--- /dev/null
+++ b/common/data/image/controlbar/M01_controlbar_icon_reply.png
Binary files differ
diff --git a/common/data/image/controlbar/M01_controlbar_icon_resend.png b/common/data/image/controlbar/M01_controlbar_icon_resend.png
new file mode 100755
index 0000000..1d97a6c
--- /dev/null
+++ b/common/data/image/controlbar/M01_controlbar_icon_resend.png
Binary files differ
diff --git a/common/data/image/myfile_icon_etc.png b/common/data/image/myfile_icon_etc.png
new file mode 100755
index 0000000..0cc767d
--- /dev/null
+++ b/common/data/image/myfile_icon_etc.png
Binary files differ
diff --git a/common/data/image/myfile_icon_excel.png b/common/data/image/myfile_icon_excel.png
new file mode 100755
index 0000000..109b7de
--- /dev/null
+++ b/common/data/image/myfile_icon_excel.png
Binary files differ
diff --git a/common/data/image/myfile_icon_html.png b/common/data/image/myfile_icon_html.png
new file mode 100755
index 0000000..78646b4
--- /dev/null
+++ b/common/data/image/myfile_icon_html.png
Binary files differ
diff --git a/common/data/image/myfile_icon_images.png b/common/data/image/myfile_icon_images.png
new file mode 100755
index 0000000..4dd3be3
--- /dev/null
+++ b/common/data/image/myfile_icon_images.png
Binary files differ
diff --git a/common/data/image/myfile_icon_java.png b/common/data/image/myfile_icon_java.png
new file mode 100755
index 0000000..a083ee6
--- /dev/null
+++ b/common/data/image/myfile_icon_java.png
Binary files differ
diff --git a/common/data/image/myfile_icon_music.png b/common/data/image/myfile_icon_music.png
new file mode 100755
index 0000000..9909d9c
--- /dev/null
+++ b/common/data/image/myfile_icon_music.png
Binary files differ
diff --git a/common/data/image/myfile_icon_pdf.png b/common/data/image/myfile_icon_pdf.png
new file mode 100755
index 0000000..2480d81
--- /dev/null
+++ b/common/data/image/myfile_icon_pdf.png
Binary files differ
diff --git a/common/data/image/myfile_icon_ppt.png b/common/data/image/myfile_icon_ppt.png
new file mode 100755
index 0000000..42c1100
--- /dev/null
+++ b/common/data/image/myfile_icon_ppt.png
Binary files differ
diff --git a/common/data/image/myfile_icon_rss.png b/common/data/image/myfile_icon_rss.png
new file mode 100755
index 0000000..1b566e2
--- /dev/null
+++ b/common/data/image/myfile_icon_rss.png
Binary files differ
diff --git a/common/data/image/myfile_icon_svg.png b/common/data/image/myfile_icon_svg.png
new file mode 100755
index 0000000..64a841c
--- /dev/null
+++ b/common/data/image/myfile_icon_svg.png
Binary files differ
diff --git a/common/data/image/myfile_icon_swf.png b/common/data/image/myfile_icon_swf.png
new file mode 100755
index 0000000..ee50e85
--- /dev/null
+++ b/common/data/image/myfile_icon_swf.png
Binary files differ
diff --git a/common/data/image/M01_btn_Unread_message_press.png b/common/data/image/myfile_icon_text.png
index 55004f5..c937ef8 100755
--- a/common/data/image/M01_btn_Unread_message_press.png
+++ b/common/data/image/myfile_icon_text.png
Binary files differ
diff --git a/common/data/image/myfile_icon_video.png b/common/data/image/myfile_icon_video.png
new file mode 100755
index 0000000..a8e832a
--- /dev/null
+++ b/common/data/image/myfile_icon_video.png
Binary files differ
diff --git a/common/data/image/myfile_icon_word.png b/common/data/image/myfile_icon_word.png
new file mode 100755
index 0000000..b399bad
--- /dev/null
+++ b/common/data/image/myfile_icon_word.png
Binary files differ
diff --git a/common/data/image/org.tizen.message.cb.png b/common/data/image/org.tizen.message.cb.png
index e7bfab5..3a26d57 100755
--- a/common/data/image/org.tizen.message.cb.png
+++ b/common/data/image/org.tizen.message.cb.png
Binary files differ
diff --git a/common/data/image/org.tizen.message.noti.png b/common/data/image/org.tizen.message.noti.png
index e7bfab5..dcc17dc 100755
--- a/common/data/image/org.tizen.message.noti.png
+++ b/common/data/image/org.tizen.message.noti.png
Binary files differ
diff --git a/common/data/image/org.tizen.message.png b/common/data/image/org.tizen.message.png
index e7bfab5..8bf4018 100755
--- a/common/data/image/org.tizen.message.png
+++ b/common/data/image/org.tizen.message.png
Binary files differ
diff --git a/common/data/image/org.tizen.message.voice.png b/common/data/image/org.tizen.message.voice.png
index e7bfab5..85b6d51 100755
--- a/common/data/image/org.tizen.message.voice.png
+++ b/common/data/image/org.tizen.message.voice.png
Binary files differ
diff --git a/common/data/msg_button.edc b/common/data/msg_button.edc
new file mode 100755
index 0000000..dc25863
--- /dev/null
+++ b/common/data/msg_button.edc
@@ -0,0 +1,1097 @@
+#define BUTTON_STATE_ENABLED 0
+#define BUTTON_STATE_DISABLED 1
+
+#define BUTTON_TEXT_STYLE1_BG_BORDER_INC 5 5 5 5
+#define BUTTON_TEXT_STYLE1_PADDING_MIN_INC 23 10
+#define BUTTON_TEXT_STYLE1_RIGHT_BOTTOM_PADDING_MIN_INC 23 10
+#define BUTTON_TEXT_STYLE1_BG_MIN_INC 108 74
+
+#define BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC 108 74
+#define BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC 62 54
+#define BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC 0 0
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC 62 54
+#define BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC 62 54
+
+//text
+#define BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_FONT_SIZE_INC 32
+#define BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC 48 49 50 255
+
+///////////////////////////////////////////////////////////////////////////////////////
+#define BUTTON_SEND_BG_NORMAL "00_button_04_normal.png"
+#define BUTTON_SEND_BG_PRESS "00_button_04_press.png"
+#define BUTTON_SEND_BG_DIM "00_button_04_dim.png"
+#define BUTTON_SEND_BG_FOCUS "00_button_04_normal_focus.png"
+
+ group { name: "elm/button/base/sendbutton";
+ images {
+ image: BUTTON_SEND_BG_NORMAL COMP;
+ image: BUTTON_SEND_BG_PRESS COMP;
+ image: BUTTON_SEND_BG_DIM COMP;
+ image: BUTTON_SEND_BG_FOCUS COMP;
+ }
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ parts {
+ part { name: "button_image";
+ scale: 1;
+ description { state: "default" 0.0;
+ image {
+ normal: BUTTON_SEND_BG_NORMAL;
+ border: BUTTON_TEXT_STYLE1_BG_BORDER_INC;
+ border_scale: 1;
+ }
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: BUTTON_SEND_BG_PRESS;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image.normal: BUTTON_SEND_BG_DIM;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ image.normal: BUTTON_SEND_BG_FOCUS;
+ }
+ }
+ part { name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel2.relative: 0.0 0.0;
+ min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_BG_MIN_INC;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC;
+ }
+ }
+ part { name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ min: BUTTON_TEXT_STYLE1_RIGHT_BOTTOM_PADDING_MIN_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part { name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ description { state: "visible" 0.0;
+ visible: 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_after_icon";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 1 0;
+ min: 0 0;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ visible: 0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_before_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.text";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+ visible: 0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "padding_before_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_before_text";
+ to_y: "padding_right_bottom";
+ }
+ }
+ description { state: "icononly" 0.0;
+ min: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_after_icon";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: BUTTON_TEXT_STYLE1_FONT_SIZE_INC;
+ min: 0 0;
+ max: 1 0;
+ text_class: "slp_medium";
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC;
+ visible: 1;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { name: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if (get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "touch_snd";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ // action: PLAY_SAMPLE "touch_sound" 1.0;
+ after: button_unclick3;
+ }
+ program { name: "button_unclick3";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ set_state(PART:"bg", "visible", 0.0);
+ }
+ if (get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ set_state(PART:"bg", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ set_state(PART:"bg", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ set_state(PART:"bg", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ target: "padding_after_icon";
+ target: "icon_rect";
+ target: "bg";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ }
+ }
+ program { name: "focused";
+ //signal: "elm,action,focus";
+ //source: "elm";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ //signal: "elm,action,unfocus";
+ //source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////
+#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC_48 48 48
+#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC_48 48 48
+
+#define BUTTON_CIRCLE_BG_NORMAL "00_btn_circle_bg_normal.png"
+#define BUTTON_CIRCLE_BG_PRESS "00_btn_circle_bg_press.png"
+
+#define BUTTON_CIRCLE_STYLES(style_name, image_normal, image_press, min_width, min_height) \
+ group { name: "elm/button/base/circle/"style_name; \
+ images { \
+ image: BUTTON_CIRCLE_BG_NORMAL COMP; \
+ image: BUTTON_CIRCLE_BG_PRESS COMP; \
+ image: image_normal COMP; \
+ image: image_press COMP; \
+ } \
+ parts { \
+ part { name: "button_image"; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC; \
+ max: BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC; \
+ image.normal: BUTTON_CIRCLE_BG_NORMAL; \
+ color: 255 255 255 255; \
+ } \
+ description { \
+ state: "clicked" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: BUTTON_CIRCLE_BG_PRESS; \
+ } \
+ description { \
+ state: "disabled" 0.0; \
+ inherit: "default" 0.0; \
+ color: 255 255 255 128; \
+ } \
+ } \
+ part { name: "button_center_part"; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC; \
+ max: BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC; \
+ image.normal: image_normal; \
+ color: 255 255 255 255; \
+ } \
+ description { \
+ state: "clicked" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: image_press; \
+ } \
+ description { \
+ state: "disabled" 0.0; \
+ inherit: "default" 0.0; \
+ color: 255 255 255 128; \
+ } \
+ } \
+ part { name: "over1"; \
+ type: RECT; \
+ ignore_flags: ON_HOLD; \
+ description { state: "default" 0.0; \
+ color: 0 0 0 0; \
+ min: min_width min_height; \
+ } \
+ } \
+ part { name: "over2"; \
+ repeat_events: 1; \
+ description { state: "default" 0.0; \
+ color: 0 0 0 0; \
+ } \
+ } \
+ part { name: "disabler"; \
+ type: RECT; \
+ description { state: "default" 0.0; \
+ color: 0 0 0 0; \
+ visible: 0; \
+ } \
+ description { state: "disabled" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+ } \
+ programs { \
+ program { name: "button_click"; \
+ signal: "mouse,down,1"; \
+ source: "over1"; \
+ action: SIGNAL_EMIT "elm,action,press" ""; \
+ after: "button_click_anim"; \
+ } \
+ program { name: "button_click_anim"; \
+ action: STATE_SET "clicked" 0.0; \
+ target: "button_image"; \
+ target: "button_center_part"; \
+ } \
+ program { name: "button_unclick"; \
+ signal: "mouse,up,1"; \
+ source: "over2"; \
+ action: SIGNAL_EMIT "elm,action,unpress" ""; \
+ after: "button_unclick_anim"; \
+ } \
+ program { name: "button_unclick_anim"; \
+ action: STATE_SET "default" 0.0; \
+ target: "button_image"; \
+ target: "button_center_part"; \
+ } \
+ program { name: "touch_snd"; \
+ signal: "mouse,clicked,1"; \
+ source: "over1"; \
+ after: button_unclick3; \
+ } \
+ program { name: "button_unclick3"; \
+ action: SIGNAL_EMIT "elm,action,click" ""; \
+ } \
+ program { name: "disable"; \
+ signal: "elm,state,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "disabled" 0.0; \
+ target: "disabler"; \
+ target: "button_image"; \
+ target: "button_center_part"; \
+ } \
+ program { name: "enable"; \
+ signal: "elm,state,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "disabler"; \
+ target: "button_image"; \
+ target: "button_center_part"; \
+ } \
+ } \
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////
+BUTTON_CIRCLE_STYLES("add_plus", "M01_btn_add_plus.png", "M01_btn_add_plus.png", 64, 64);
+///////////////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////
+// button for navi title
+///////////////////////////////////////////////////
+ group { name: "elm/button/base/title_button";
+ images {
+ image: "M01_title_btn_bg.png" COMP;
+ image: "M01_title_btn_bg_press.png" COMP;
+ image: "00_button_04_press.png" COMP;
+ }
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ parts {
+ part { name: "button_image";
+ scale: 1;
+ description { state: "default" 0.0;
+ image {
+ normal: "M01_title_btn_bg.png";
+ border: 1 1 1 1;
+ border_scale: 1;
+ }
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "M01_title_btn_bg_press.png";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "M01_title_btn_bg.png"; //"00_button_04_press.png";
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "M01_title_btn_bg.png"; //"00_button_04_press.png";
+ }
+ }
+ part { name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel2.relative: 0.0 0.0;
+ min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_BG_MIN_INC;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC;
+ }
+ }
+ part { name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ min: BUTTON_TEXT_STYLE1_RIGHT_BOTTOM_PADDING_MIN_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part { name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ description { state: "visible" 0.0;
+ visible: 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_after_icon";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 1 0;
+ min: 0 0;
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ visible: 0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_before_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.text";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+ visible: 0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "padding_before_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_before_text";
+ to_y: "padding_right_bottom";
+ }
+ }
+ description { state: "icononly" 0.0;
+ min: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+ max: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_after_icon";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: 52;
+ min: 0 0;
+ max: 1 0;
+ text_class: "slp_medium";
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC;
+ visible: 1;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { name: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if (get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "touch_snd";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ // action: PLAY_SAMPLE "touch_sound" 1.0;
+ after: button_unclick3;
+ }
+ program { name: "button_unclick3";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ set_state(PART:"bg", "visible", 0.0);
+ }
+ if (get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ set_state(PART:"bg", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ set_state(PART:"bg", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ set_state(PART:"bg", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ target: "padding_after_icon";
+ target: "icon_rect";
+ target: "bg";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ }
+ }
+ program { name: "focused";
+ //signal: "elm,action,focus";
+ //source: "elm";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ //signal: "elm,action,unfocus";
+ //source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
diff --git a/common/data/msg_common.edc b/common/data/msg_common.edc
new file mode 100755
index 0000000..03ae507
--- /dev/null
+++ b/common/data/msg_common.edc
@@ -0,0 +1,222 @@
+collections {
+ group {
+ name: "title";
+ images {
+ image: "nf_title_separator.png" COMP;
+ image: "optionheader_arrow.png" COMP;
+ }
+ script {
+ public more_show = 0;
+ public title_show = 0;
+ }
+ parts {
+ part {
+ name: "padding1";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ min: 16 0;
+ align: 0 0.5;
+ rel1.relative: 0 0;
+ rel2.relative: 0 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "title_btn";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 0;
+ min: 0 78;
+ align: 0 0.5;
+ rel1 { relative: 0.0 0.5;}
+ rel2 { relative: 0.0 0.5; to_x: "padding2";}
+ color: 255 0 0 255;
+ }
+ }
+ part {
+ name: "title_text";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ text {
+ font: "SLP:style=Medium";
+ size: 52;
+ min: 0 0;
+ max: 1 0;
+ align: 0.5 0.5;
+ }
+ color: 249 249 249 255;
+ align: 0.0 0.5;
+ fixed: 1 0;
+ rel1 { relative: 1.0 0.5; to_x: "padding1";}
+ rel2 { relative: 0.0 0.5; to_x: "padding2";}
+ }
+ }
+ part {
+ name: "padding2";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ min: 5 0;
+ align: 1.0 0.5;
+ rel1.to: "separator1";
+ rel2.to: "separator1";
+ rel1.relative: 0 0;
+ rel2.relative: 0 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "separator1";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 2 48;
+ max: 2 48;
+ align: 1 0.5;
+ rel1.to: "more_btn";
+ rel2.to: "more_btn";
+ rel1.relative: 0 0;
+ rel2.relative: 0 1;
+ image.normal: "nf_title_separator.png";
+ }
+ }
+ part {
+ name: "more_btn";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 1 1;
+ align: 1 0.5;
+ rel1.to: "separator2";
+ rel2.to: "separator2";
+ rel1.relative: 0 0;
+ rel2.relative: 0 1;
+ }
+ }
+ part {
+ name: "separator2";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ min: 2 48;
+ max: 2 48;
+ align: 1 0.5;
+ rel1.to_x: "prev_btn";
+ rel2.to_x: "prev_btn";
+ rel1.relative: 0 0;
+ rel2.relative: 0 1;
+ image.normal: "nf_title_separator.png";
+ }
+ }
+ part {
+ name: "prev_btn";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ max: 136 0;
+ align: 1 0.5;
+ rel1.relative: 1 0;
+ rel2.relative: 1 1;
+ }
+ }
+ part {
+ name: "titlebtn_arrow";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 28 24;
+ max: 28 24;
+ fixed: 1 1;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 0.89; to_x: "title_btn"; }
+ rel2 { relative: 1.0 0.89; to_x: "title_btn"; }
+ image.normal: "optionheader_arrow.png";
+ color: 255 255 255 0;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part {
+ name: "morebtn_arrow";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 28 24;
+ max: 28 24;
+ fixed: 1 1;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.1; to: "more_btn"; }
+ rel2 { relative: 1.0 1.2; to: "more_btn"; }
+ image.normal: "optionheader_arrow.png";
+ color: 255 255 255 0;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "title_show";
+ signal: "elm,state,title,show";
+ source: "";
+ script {
+ set_int(title_show, 1);
+ set_state(PART:"titlebtn_arrow", "show", 0.0);
+ }
+ }
+ program {
+ name: "title_hide";
+ signal: "elm,state,title,hide";
+ source: "";
+ script {
+ set_int(title_show, 0);
+ set_state(PART:"titlebtn_arrow", "default", 0.0);
+ }
+ }
+ program {
+ name: "more_show";
+ signal: "elm,state,more,show";
+ source: "";
+ script {
+ set_int(more_show, 1);
+ set_state(PART:"morebtn_arrow", "show", 0.0);
+ }
+ }
+ program {
+ name: "more_hide";
+ signal: "elm,state,more,hide";
+ source: "";
+ script {
+ set_int(more_show, 0);
+ set_state(PART:"morebtn_arrow", "default", 0.0);
+ }
+ }
+ }
+ }
+}
+
diff --git a/common/data/msg_custom_winset.edc b/common/data/msg_custom_winset.edc
new file mode 100755
index 0000000..d329451
--- /dev/null
+++ b/common/data/msg_custom_winset.edc
@@ -0,0 +1,4 @@
+collections
+{
+#include "msg_button.edc"
+}
diff --git a/common/msg-ui-bundle.h b/common/msg-ui-bundle.h
index 2ac8b7c..7f3ce8c 100755
--- a/common/msg-ui-bundle.h
+++ b/common/msg-ui-bundle.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_BUNDLE_H__
#define __MSG_BUNDLE_H__
@@ -33,13 +34,15 @@
#define MSG_BUNDLE_KEY_TO "TO"
#define MSG_BUNDLE_KEY_CC "CC"
#define MSG_BUNDLE_KEY_BCC "BCC"
-
+#define MSG_BUNDLE_KEY_ATTACHFILE "ATTACHFILE"
+#define MSG_BUNDLE_KEY_SUBJECT "SUBJECT"
#define MSG_BUNDLE_KEY_BODY "BODY"
#define MSG_BUNDLE_KEY_FORWARD "FORWARD"
+#define MSG_BUNDLE_KEY_RESEND "RESEND"
+#define MSG_BUNDLE_KEY_DELETE_MSG "delete_msg"
#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"
@@ -77,11 +80,14 @@
#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"
+#define MSG_BUNDLE_KEY_DRMTYPE "drm_type"
+#define MSG_BUNDLE_KEY_SYSPOPUP_CONTENT "_SYSPOPUP_CONTENT_"
/* 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_FILE_URI "file"
#define MSG_BUNDLE_VALUE_NEW_MSG "new_msg"
#define MSG_BUNDLE_VALUE_MSG_ID "msg_id"
#define MSG_BUNDLE_VALUE_CREATE_MSG "create_msg"
@@ -131,8 +137,9 @@
#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"
+#define MSG_BUNDLE_VALUE_DRM_WITHOUT_FL "DRM_WITHOUT_FL"
+
+#define MSG_BUNDLE_VALUE_SPAM_SETTING "spam_setting"
#endif /* __MSG_BUNDLE_H__ */
diff --git a/common/msg-ui-common-utility.c b/common/msg-ui-common-utility.c
index c4fb2bc..d71747b 100755
--- a/common/msg-ui-common-utility.c
+++ b/common/msg-ui-common-utility.c
@@ -14,11 +14,13 @@
* limitations under the License.
*/
+
/*=================
* INCLUDE HEADERS
* ================= */
#include <msg-ui-util.h>
#include <msg-ui-common-utility.h>
+#include <msg-ui-image-resource.h>
/* for i18n */
#include <unicode/uloc.h>
@@ -27,6 +29,33 @@
#include <unicode/udatpg.h>
#include <unicode/ustring.h>
+#include <stdlib.h>
+#include <vconf-keys.h>
+#include <bundle.h>
+#include <syspopup_caller.h>
+#include <drm_client.h>
+
+static char *icon_array[MSG_APP_FILE_TYPE_MAX] = {
+ [MSG_APP_FILE_TYPE_IMAGE] = MSG_COMMON_FILE_IMAGE_ICON,
+ [MSG_APP_FILE_TYPE_VIDEO] = MSG_COMMON_FILE_VIDEO_ICON,
+ [MSG_APP_FILE_TYPE_MUSIC] = MSG_COMMON_FILE_MUSIC_ICON,
+ [MSG_APP_FILE_TYPE_SOUND] = MSG_COMMON_FILE_SOUND_ICON,
+ [MSG_APP_FILE_TYPE_PDF] = MSG_COMMON_FILE_PDF_ICON,
+ [MSG_APP_FILE_TYPE_DOC] = MSG_COMMON_FILE_DOC_ICON,
+ [MSG_APP_FILE_TYPE_PPT] = MSG_COMMON_FILE_PPT_ICON,
+ [MSG_APP_FILE_TYPE_EXCEL] = MSG_COMMON_FILE_EXCEL_ICON,
+ [MSG_APP_FILE_TYPE_VOICE] = MSG_COMMON_FILE_VOICE_ICON,
+ [MSG_APP_FILE_TYPE_HTML] = MSG_COMMON_FILE_HTML_ICON,
+ [MSG_APP_FILE_TYPE_FLASH] = MSG_COMMON_FILE_FLASH_ICON,
+ [MSG_APP_FILE_TYPE_TXT] = MSG_COMMON_FILE_TXT_ICON,
+ [MSG_APP_FILE_TYPE_VCONTACT] = MSG_COMMON_FILE_VCONTACT_ICON,
+ [MSG_APP_FILE_TYPE_VCALENDAR] = MSG_COMMON_FILE_VCALENDAR_ICON,
+ [MSG_APP_FILE_TYPE_VNOTE] = MSG_COMMON_FILE_VNOTE_ICON,
+ [MSG_APP_FILE_TYPE_RSS] = MSG_COMMON_FILE_RSS_ICON,
+ [MSG_APP_FILE_TYPE_JAVA] = MSG_COMMON_FILE_JAVA_ICON,
+ [MSG_APP_FILE_TYPE_ETC] = MSG_COMMON_FILE_ETC_ICON,
+};
+
/*==========================
* FUNCTION IMPLEMENTATIONS
*========================== */
@@ -41,6 +70,21 @@ const char *msg_common_get_default_locale()
return locale;
}
+int msg_common_get_timeformat()
+{
+ int timeformat = 0;
+
+ if (vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &timeformat) < 0)
+ return MSG_TIME_FORMAT_UNKNOWN;
+
+ if (timeformat == VCONFKEY_TIME_FORMAT_12)
+ return MSG_TIME_FORMAT_12H;
+ else if (timeformat == VCONFKEY_TIME_FORMAT_24)
+ return MSG_TIME_FORMAT_24H;
+ else
+ return MSG_TIME_FORMAT_UNKNOWN;
+}
+
char *msg_common_get_date_best_pattern(const char* locale, char* skeleton)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -176,6 +220,161 @@ char *msg_common_get_date_text(const char* locale, char* skeleton, void* time)
return strdup(formattedString);
}
+char *msg_common_get_display_date(const char* locale, char* bestPattern, 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;
+
+ 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(locale, bestPattern, 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 MSG_BOOL __msg_common_make_normal_markup_text(Eina_Strbuf *markup_text, Eina_Strbuf *font_style, const char *src, int strlen)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, markup_text == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, font_style == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src == NULL, FALSE);
+
+ char *tmp_body_buf = NULL;
+ tmp_body_buf = (char *) calloc(strlen + 1, sizeof(char));
+ if (tmp_body_buf) {
+ strncpy(tmp_body_buf, src, strlen);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return FALSE;
+ }
+
+ eina_strbuf_append_printf(markup_text, "%s%s%s", MSG_COMMON_TAG_TEXT, eina_strbuf_string_get(font_style), tmp_body_buf);
+ if (tmp_body_buf) {
+ free(tmp_body_buf);
+ tmp_body_buf = NULL;
+ }
+
+ return TRUE;
+}
+
+Eina_Strbuf *msg_common_get_markup_text(const char *src, int fontsize, char *fontcolor, char *fontstyle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src == NULL, NULL);
+
+ const char *src_text = src;
+
+ if (src_text && strlen(src_text) > 0) {
+ Eina_Strbuf *markup_text = NULL;
+ Eina_Strbuf *font_buf = NULL;
+ char *token = NULL;
+ char *tmp_buf = NULL;
+ char *remained_string = NULL;
+ int src_text_len = 0;
+
+ src_text_len = strlen(src_text);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src_text_len : %d", src_text_len);
+ tmp_buf = (char *) calloc(src_text_len + 1, sizeof(char));
+ if (tmp_buf == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "tmp mem alloc is failed!");
+ return NULL;
+ }
+
+ font_buf = eina_strbuf_new();
+ if (font_buf == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "font_buf eina_strbuf_new is failed!");
+ if (tmp_buf) {
+ free(tmp_buf);
+ tmp_buf = NULL;
+ }
+ return NULL;
+ }
+
+ markup_text = eina_strbuf_new();
+ if (markup_text == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "markup_text eina_strbuf_new is failed!");
+ if (tmp_buf) {
+ free(tmp_buf);
+ tmp_buf = NULL;
+ }
+
+ if (font_buf) {
+ eina_strbuf_free(font_buf);
+ font_buf = NULL;
+ }
+ return NULL;
+ }
+
+ /* make font style */
+ if (fontstyle)
+ eina_strbuf_append_printf(font_buf, "<%s>", fontstyle);
+
+/*
+ * unsupport font size
+ * if (fontsize > 0)
+ * eina_strbuf_append_printf(font_buf, "<font_size=%d>", fontsize);
+ */
+ if (fontcolor)
+ eina_strbuf_append_printf(font_buf, "<color=%s>", fontcolor);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_buf : (%s)", eina_strbuf_string_get(font_buf));
+
+ snprintf(tmp_buf, src_text_len + 1, "%s\n", (char *) src_text);
+
+ token = strtok_r(tmp_buf, "\n", &remained_string);
+
+ int token_len = 0;
+
+ while (token) {
+ token_len = strlen(token);
+
+ if (token[token_len - 1] == 0x0D) { /* if Enter is added via Window system, CR+LF is added. */
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CR length is decreased");
+ token_len = token_len - 1;
+ }
+
+ if (!__msg_common_make_normal_markup_text(markup_text, font_buf, token, token_len))
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_common_make_normal_markup_text is failed");
+
+ token = strtok_r(NULL, "\n", &remained_string);
+ if (token)
+ eina_strbuf_append(markup_text, "<br>");
+ }
+
+ if (tmp_buf) {
+ free(tmp_buf);
+ tmp_buf = NULL;
+ }
+
+ if (font_buf) {
+ eina_strbuf_free(font_buf);
+ font_buf = NULL;
+ }
+
+ return markup_text;
+ } else {
+ return NULL;
+ }
+}
MSG_BOOL msg_common_is_valid_phone_number(const char *address)
{
@@ -260,49 +459,467 @@ MSG_BOOL msg_common_is_connected_call(void)
return FALSE;
}
-char *msg_common_get_current_theme_name(void)
+MSG_BOOL msg_common_is_sim_inserted(void)
{
- char *theme_name = NULL;
- char *save_ptr = NULL;
+ int sim_slot_status = 0;
- /* 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 (vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &sim_slot_status) < 0)
+ return FALSE;
- if (current_theme_path == NULL) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "current_theme_path is NULL !!");
- return NULL;
+ 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;
+}
+
+MSG_BOOL msg_common_get_font_size(int *index, int *font_size)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, index == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, font_size == NULL, FALSE);
+
+ if (vconf_get_int(VCONFKEY_MSG_APP_FONT_SIZE, index) < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_get_int(font_size) is failed !!");
+ return FALSE;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected index = %d", *index);
}
- theme_name = strdup(current_theme_path);
- if (theme_name == NULL) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "strdup is NULL !!");
- return NULL;
+ switch (*index) {
+ case MSG_APP_FONT_SIZE_INDEX_HUGE :
+ *font_size = MSG_APP_FONT_SIZE_HUGE;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_LARGE :
+ *font_size = MSG_APP_FONT_SIZE_LARGE;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_NORMAL :
+ *font_size = MSG_APP_FONT_SIZE_NORMAL;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_SMALL :
+ *font_size = MSG_APP_FONT_SIZE_SMALL;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_TINY :
+ *font_size = MSG_APP_FONT_SIZE_TINY;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT :
+ default :
+ *font_size = MSG_APP_FONT_SIZE_NORMAL;
+ break;
}
- 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;
+ return TRUE;
+}
+
+MSG_BOOL msg_common_set_font_size(int index)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ if (index < MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT ||
+ index >= MSG_APP_FONT_SIZE_INDEX_MAX) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index = %d", index);
+ return FALSE;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected index = %d", index);
}
- MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "theme_name is %s", theme_name);
+ if (vconf_set_int(VCONFKEY_MSG_APP_FONT_SIZE, index) < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(font_size) is failed !!");
+ return FALSE;
+ }
- return theme_name;
+ return TRUE;
}
-MSG_BOOL msg_common_is_sim_inserted(void)
+MSG_BOOL msg_common_apply_font_size(const char *widget_name, Evas_Object *obj)
{
- int sim_slot_status = 0;
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, widget_name == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, FALSE);
- if (vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &sim_slot_status) < 0)
+ int index = 0;
+ int font_size = 0;
+ Evas_Font_Size font_size_scale = 0;
+
+ if (msg_common_get_font_size(&index, &font_size) != TRUE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed !!");
return FALSE;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected index = %d", index);
+ }
- MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sim_slot_status = %d", sim_slot_status);
+ if (index == MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT) {
+ edje_text_class_del(widget_name);
+ } else {
+ /* Calculate the scale factor */
+ font_size_scale -= (font_size * 100) / MSG_APP_FONT_SIZE_NORMAL;
- if (sim_slot_status == VCONFKEY_TELEPHONY_SIM_INSERTED)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_size = %d, font_size_scale = %d", font_size, font_size_scale);
+
+ edje_text_class_del(widget_name);
+ edje_text_class_set(widget_name, NULL, font_size_scale);
+ elm_widget_theme_specific(obj, NULL, EINA_TRUE);
+ }
+
+ return TRUE;
+}
+
+void msg_common_reset_font_size(const char *widget_name)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, widget_name == NULL);
+
+ edje_text_class_del(widget_name);
+
+ return;
+}
+
+static 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;
+}
+
+static MSG_BOOL __msg_common_is_drm_file(const char *filepath)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(filepath == NULL, FALSE, "filepath is NULL");
+ drm_bool_type_e is_drm_file = DRM_UNKNOWN;
+ int ret = DRM_RETURN_SUCCESS;
+
+ ret = drm_is_drm_file(filepath, &is_drm_file);
+
+ if (ret == DRM_RETURN_SUCCESS && is_drm_file == DRM_TRUE) {
return TRUE;
- else
+ } else {
+ D_MSG("ret = %d", ret);
return FALSE;
+ }
+}
+
+static MSG_APP_FILE_TYPE_E __msg_common_get_file_type_by_file_ext(const char *file_ext, const char *fullpath)
+{
+ D_ENTER;
+ int i = 0;
+
+ if (file_ext == NULL) {
+ D_EMSG("file_ext is NULL");
+ return MSG_APP_FILE_TYPE_ETC;
+ }
+
+ switch (file_ext[i]) {
+ case 'a':
+ case 'A':
+ if (strcasecmp("ASF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("AMR", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VOICE;
+ }
+ if (strcasecmp("AWB", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VOICE;
+ }
+ if (strcasecmp("AAC", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ if (strcasecmp("AVI", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("AAC", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ break;
+
+ case 'b':
+ case 'B':
+ if (strcasecmp("BMP", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ break;
+
+ case 'd':
+ case 'D':
+ if (strcasecmp("DOC", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_DOC;
+ }
+ if (strcasecmp("DOCX", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_DOC;
+ }
+ if (strcasecmp("DIVX", &file_ext[i]) == 0) {
+ if (__msg_common_is_drm_file(fullpath) == 0) {
+ return MSG_APP_FILE_TYPE_DRM;
+ } else {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ }
+ if (strcasecmp("DCF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_DRM;
+ }
+ break;
+
+ case 'g':
+ case 'G':
+ if (strcasecmp("GIF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ if (strcasecmp("G72", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ break;
+
+ case 'h':
+ case 'H':
+ if (strcasecmp("H263", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ if (strcasecmp("HTML", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_HTML;
+ }
+ if (strcasecmp("HTM", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_HTML;
+ }
+ break;
+
+ case 'i':
+ case 'I':
+ if (strcasecmp("IMY", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ break;
+
+ case 'j':
+ case 'J':
+ if (strcasecmp("JAD", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_JAVA;
+ }
+ if (strcasecmp("JAR", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_JAVA;
+ }
+
+ if (strcasecmp("JPG", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ if (strcasecmp("JPEG", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ if (strcasecmp("JPE", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ break;
+
+ case 'm':
+ case 'M':
+ if (strcasecmp("MMF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("MP3", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ if (strcasecmp("MID", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("MIDI", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("MP4", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("MPG", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("MPEG", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("M4A", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ if (strcasecmp("M3G", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_FLASH;
+ }
+ if (strcasecmp("MXMF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("MKV", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("MKA", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ break;
+
+ case 'o':
+ case 'O':
+ if (strcasecmp("opml", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_RSS;
+ }
+ break;
+
+ case 'p':
+ case 'P':
+ if (strcasecmp("PNG", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ if (strcasecmp("PJPEG", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ if (strcasecmp("PDF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_PDF;
+ }
+ if (strcasecmp("PPT", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_PPT;
+ }
+ if (strcasecmp("PPTX", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_PPT;
+ }
+ break;
+
+ case 'r':
+ case 'R':
+ break;
+
+ case 's':
+ case 'S':
+ if (strcasecmp("SDP", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("SPM", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("SMP", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("SPF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("SWF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_FLASH;
+ }
+ if (strcasecmp("SVG", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SVG;
+ }
+ if (strcasecmp("SVGZ", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SVG;
+ }
+ break;
+
+ case 't':
+ case 'T':
+ if (strcasecmp("TXT", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_TXT;
+ }
+ break;
+
+ case 'v':
+ case 'V':
+ if (strcasecmp("VCF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VCONTACT;
+ }
+ if (strcasecmp("VCS", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VCALENDAR;
+ }
+ if (strcasecmp("VNT", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VNOTE;
+ }
+ if (strcasecmp("VBM", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VBOOKMARK;
+ }
+ break;
+
+ case 'w':
+ case 'W':
+ if (strcasecmp("WAV", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("WBMP", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_IMAGE;
+ }
+ if (strcasecmp("WGT", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_WGT;
+ }
+ if (strcasecmp("WMA", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_MUSIC;
+ }
+ if (strcasecmp("WMV", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ break;
+
+ case 'x':
+ case 'X':
+ if (strcasecmp("XLS", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_EXCEL;
+ }
+ if (strcasecmp("XLSX", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_EXCEL;
+ }
+ if (strcasecmp("XMF", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_SOUND;
+ }
+ if (strcasecmp("XHTML", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_HTML;
+ }
+ break;
+
+ case '3':
+ if (strcasecmp("3GP", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("3GPP", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ if (strcasecmp("3G2", &file_ext[i]) == 0) {
+ return MSG_APP_FILE_TYPE_VIDEO;
+ }
+ break;
+ }
+
+ return MSG_APP_FILE_TYPE_ETC;
+}
+
+const char *__msg_common_get_file_icon_by_file_type(MSG_APP_FILE_TYPE_E file_type)
+{
+ const char *icon_path = MSG_COMMON_FILE_ETC_ICON;
+ if (file_type < MSG_APP_FILE_TYPE_NONE || file_type > MSG_APP_FILE_TYPE_MAX) {
+ D_EMSG("Invalid file_type!! file_type = %d", file_type);
+ return NULL;
+ }
+
+ if (icon_array[file_type]) {
+ icon_path = icon_array[file_type];
+ }
+
+ return icon_path;
}
+const char *msg_common_get_file_icon(const char *filepath)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(filepath == NULL, NULL, "filepath is NULL");
+ const char *icon_path = MSG_COMMON_FILE_ETC_ICON;
+ char *file_ext = __msg_common_get_file_ext(filepath);
+
+ if (file_ext) {
+ MSG_APP_FILE_TYPE_E file_type = MSG_APP_FILE_TYPE_NONE;
+
+ file_type = __msg_common_get_file_type_by_file_ext(file_ext, filepath);
+ icon_path = __msg_common_get_file_icon_by_file_type(file_type);
+ } else {
+ D_EMSG("file_ext is NULL");
+ }
+
+ return icon_path;
+}
diff --git a/common/msg-ui-common-utility.h b/common/msg-ui-common-utility.h
index 144115d..657781f 100755
--- a/common/msg-ui-common-utility.h
+++ b/common/msg-ui-common-utility.h
@@ -14,13 +14,13 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMMON_UTILITY_H__
#define __MSG_UI_COMMON_UTILITY_H__
/*==================================================================================================
INCLUDE HEADERS
* ==================================================================================================*/
-
#include <glib.h>
#include <Elementary.h>
@@ -31,45 +31,77 @@
#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
+/* Define vconf key */
+#define VCONFKEY_MSG_APP_FONT_SIZE "db/private/org.tizen.message/font_size"
+
+#define MSG_COMMON_EDJ EDJDIR"/msg_common.edj"
+#define MSG_CUSTOM_WINSET_EDJ EDJDIR"/msg_custom_winset.edj"
+
/*==================================================================================================
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;
+ MSG_APP_FONT_SIZE_TINY = 28,
+ MSG_APP_FONT_SIZE_SMALL = 36,
+ MSG_APP_FONT_SIZE_NORMAL = 44,
+ MSG_APP_FONT_SIZE_LARGE = 70,
+ MSG_APP_FONT_SIZE_HUGE = 102,
-/*==================================================================================================
- STRUCTURES
- *==================================================================================================*/
+ MSG_APP_FONT_SIZE_MAX
+
+} MSG_APP_FONT_SIZE_E;
+
+typedef enum {
+ MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT,
+ MSG_APP_FONT_SIZE_INDEX_HUGE,
+ MSG_APP_FONT_SIZE_INDEX_LARGE,
+ MSG_APP_FONT_SIZE_INDEX_NORMAL,
+ MSG_APP_FONT_SIZE_INDEX_SMALL,
+ MSG_APP_FONT_SIZE_INDEX_TINY,
+
+ MSG_APP_FONT_SIZE_INDEX_MAX
-typedef struct {
- gchar *pattern;
- MsgLinkType type;
-} MsgLinkPattern;
+} MSG_APP_FONT_SIZE_INDEX_E;
-typedef struct {
- gchar *string;
- MsgLinkType type;
- gint s_offset;
- gint e_offset;
-} MsgLinkInfo;
+typedef enum {
+ MSG_SYS_FONT_SIZE_INDEX_SMALL,
+ MSG_SYS_FONT_SIZE_INDEX_NORMAL,
+ MSG_SYS_FONT_SIZE_INDEX_LARGE,
+ MSG_SYS_FONT_SIZE_INDEX_HUGE,
+ MSG_SYS_FONT_SIZE_INDEX_GIANT,
+ MSG_SYS_FONT_SIZE_INDEX_MAX
+} MSG_SYS_FONT_SIZE_INDEX_E;
+
+typedef enum {
+ MSG_APP_FILE_TYPE_NONE = 0,
+ MSG_APP_FILE_TYPE_IMAGE, /**< Image category */
+ MSG_APP_FILE_TYPE_VIDEO, /**< Video category */
+ MSG_APP_FILE_TYPE_MUSIC, /**< Music category */
+ MSG_APP_FILE_TYPE_SOUND, /**< Sound category */
+ MSG_APP_FILE_TYPE_PDF, /**< Pdf category */
+ MSG_APP_FILE_TYPE_DOC, /**< Word category */
+ MSG_APP_FILE_TYPE_PPT, /**< Powerpoint category */
+ MSG_APP_FILE_TYPE_EXCEL, /**< Excel category */
+ MSG_APP_FILE_TYPE_VOICE, /**< Voice category */
+ MSG_APP_FILE_TYPE_HTML, /**< Html category */
+ MSG_APP_FILE_TYPE_FLASH, /**< Flash category */
+ MSG_APP_FILE_TYPE_TXT, /**< Txt category */
+ MSG_APP_FILE_TYPE_VCONTACT, /**< Vcontact category */
+ MSG_APP_FILE_TYPE_VCALENDAR, /**< Vcalendar category */
+ MSG_APP_FILE_TYPE_VNOTE, /**< Vnote category */
+ MSG_APP_FILE_TYPE_VBOOKMARK, /**< Vbookmark category */
+ MSG_APP_FILE_TYPE_SVG, /**< Svg category */
+ MSG_APP_FILE_TYPE_RSS, /**< Rss reader file, *.opml */
+ MSG_APP_FILE_TYPE_JAVA, /**< java file, *.jad, *.jar */
+ MSG_APP_FILE_TYPE_WGT, /**< wrt , *.wgt, *.wgt */
+ MSG_APP_FILE_TYPE_DRM, /**< drm file , *.dcf */
+ MSG_APP_FILE_TYPE_ETC, /**< Other files category */
+ MSG_APP_FILE_TYPE_MAX
+} MSG_APP_FILE_TYPE_E;
/*==================================================================================================
FUNCTION DECLARATIONS
@@ -84,7 +116,7 @@ typedef struct {
const char *msg_common_get_default_locale();
/*
- *@fn msg_common_get_date_text(const char* locale, char* skeleton, void* time);
+ *@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
@@ -92,10 +124,33 @@ const char *msg_common_get_default_locale();
*@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);
+char *msg_common_get_date_text(const char *locale, char *skeleton, void *time);
+
+/*
+ *@fn msg_common_get_display_date(const char *locale, char *bestPattern, time_t *msg_t);
+ *@brief This function is used to get date string based on both locale and bestPattern.
+ * Caller must free returned string after using it, else memory will be leaked
+ *@return date 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_display_date(const char *locale, char *bestPattern, time_t *msg_t);
+
+/*
+ *@fn msg_common_get_markup_text(const char *src, int fontsize, char *fontcolor);
+ *@brief This function is used to get marked up string from src text.
+ * Caller must free returned string by using eina_strbuf_free(), else memory will be leaked
+ *@return Eina_Strbuf* marked up string on success, else NULL pointer on failure
+ *@param[in] src original text to be displayed
+ *@param[in] fontsize fontsize to be displayed. If 0 is passed, it is not set
+ *@param[in] fontcolor fontcolor to be displayed. It must be "#ffffff" style. If NULL is passed, it is not set
+ *@param[in] fontstyle fontstyle to be displayed. It must be passed font style like "hilight". If NULL is passed, it is not set
+ */
+Eina_Strbuf *msg_common_get_markup_text(const char *src, int fontsize, char *fontcolor, char *fontstyle);
/*
- *@fn msg_common_is_valid_phone_number(const char* address);
+ *@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
@@ -103,7 +158,7 @@ char *msg_common_get_date_text(const char* locale, char* skeleton, void* time);
MSG_BOOL msg_common_is_valid_phone_number(const char *address);
/*
- *@fn msg_common_is_valid_email_addr(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
@@ -118,30 +173,23 @@ MSG_BOOL msg_common_is_valid_email_addr(const char *address);
MSG_BOOL msg_common_is_connected_call(void);
/*
- *@fn msg_common_get_date_best_pattern(const char* locale, char* skeleton);
+ *@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);
+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);
+ *@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);
+char *msg_common_get_formatted_date(const char *locale, char *bestPattern, void *time);
/*
*@fn msg_common_check_sim_existence(void);
@@ -150,6 +198,53 @@ char *msg_common_get_current_theme_name(void);
*/
MSG_BOOL msg_common_is_sim_inserted(void);
+/*
+ *@fn msg_common_get_font_size(int *index, int *font_size);
+ *@brief This function is used to get the font size.
+ *@param[in] index index of font size. It is used in message setting.
+ *@param[in] font_size font size which is used in message app.
+ *@return return TRUE if vconf API is success, else FALSE
+ */
+MSG_BOOL msg_common_get_font_size(int *index, int *font_size);
+
+/*
+ *@fn msg_common_set_font_size(void);
+ *@brief This function is used to set the font size.
+ *@return return TRUE if vconf API is success, else FALSE
+ */
+MSG_BOOL msg_common_set_font_size(int index);
+
+/*
+ *@fn msg_common_apply_font_size(void);
+ *@brief This function is used to change the font size.
+ *@param[in] widget_name The widget name which font size is changed.
+ *@param[in] obj The widget which font size is changed.
+ *@return return TRUE if it is success to apply font size, else FALSE
+ */
+MSG_BOOL msg_common_apply_font_size(const char *widget_name, Evas_Object *obj);
+
+/*
+ *@fnmsg_common_reset_font_size(const char *widget_name);
+ *@brief This function is used to reset the font size.
+ *@param[in] widget_name The widget name which font size is changed.
+ */
+void msg_common_reset_font_size(const char *widget_name);
+
+/*
+ *@fn msg_common_get_file_icon(const char *filepath);
+ *@brief This function is used to get file icon
+ *@param[in] filepath filepath
+ *@return return file icon path, else NULL
+ */
+const char *msg_common_get_file_icon(const char *filepath);
+
+/*
+ *@fn msg_common_get_timeformat();
+ *@brief This function is used to get time format (format 12H, format 24H)
+ *@param[in] filepath filepath
+ *@return return enum msg_time_format
+ */
+int msg_common_get_timeformat();
#endif
diff --git a/common/msg-ui-image-resource.h b/common/msg-ui-image-resource.h
new file mode 100755
index 0000000..075327b
--- /dev/null
+++ b/common/msg-ui-image-resource.h
@@ -0,0 +1,76 @@
+/*
+ * 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_IMAGE_RESOURCE__
+#define __MSG_UI_IMAGE_RESOURCE__
+
+/* viewer image resources */
+#define MSG_VIEWER_IMAGE_PATH IMGDIR
+
+#define MSG_VIEWER_IMAGE_ATTACH_ICON MSG_VIEWER_IMAGE_PATH"/attach_icon.png"
+#define MSG_VIEWER_IMAGE_DRM_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_DRM.png"
+#define MSG_VIEWER_IMAGE_DRM_SMALL_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_DRM_64x64.png"
+#define MSG_VIEWER_IMAGE_UNSUPPORT_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_Unsupported.png"
+#define MSG_VIEWER_IMAGE_SAVE_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_save.png"
+
+/* composer image resources */
+#define MSGC_UI_IMG_PATH IMGDIR
+
+#define MSGC_IMG_ATTACHMENT_ICON MSGC_UI_IMG_PATH"/60_myfiles_file_etc.png"
+#define MSGC_IMG_ATTACHMENT_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png"
+
+#define MSGC_IMG_SEND_ICON MSGC_UI_IMG_PATH"/M01_btn_message_send.png"
+
+#define MSGC_IMG_INSERT_VOICE_ICON MSGC_UI_IMG_PATH"/M01_icon_attach_voice.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_photo_btn_delete.png"
+#define MSGC_SOUND_INSERT_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png"
+#define MSGC_IMG_PAGE_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png"
+#define MSGC_IMG_SUBJECT_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png"
+
+/* thread list image resources */
+#define MSG_UI_THREAD_LIST_PATH IMGDIR
+
+#define MSG_UI_THREAD_LIST_PUSH_ICON MSG_UI_THREAD_LIST_PATH"/M01_icon_Push.png"
+#define MSG_UI_THREAD_LIST_OTA_ICON MSG_UI_THREAD_LIST_PATH"/M01_icon_OTA.png"
+#define MSG_UI_THREAD_LIST_CB_ICON MSG_UI_THREAD_LIST_PATH"/M01_icon_broadcasting.png"
+
+
+/* common image resources */
+#define MSG_COMMON_FILE_ETC_ICON IMGDIR"/myfile_icon_etc.png"
+
+#define MSG_COMMON_FILE_IMAGE_ICON IMGDIR"/myfile_icon_images.png"
+#define MSG_COMMON_FILE_VIDEO_ICON IMGDIR"/myfile_icon_video.png"
+#define MSG_COMMON_FILE_MUSIC_ICON IMGDIR"/myfile_icon_music.png"
+#define MSG_COMMON_FILE_SOUND_ICON IMGDIR"/myfile_icon_music.png"
+#define MSG_COMMON_FILE_PDF_ICON IMGDIR"/myfile_icon_pdf.png"
+#define MSG_COMMON_FILE_DOC_ICON IMGDIR"/myfile_icon_word.png"
+#define MSG_COMMON_FILE_PPT_ICON IMGDIR"/myfile_icon_ppt.png"
+#define MSG_COMMON_FILE_EXCEL_ICON IMGDIR"/myfile_icon_excel.png"
+#define MSG_COMMON_FILE_VOICE_ICON IMGDIR"/myfile_icon_music.png"
+#define MSG_COMMON_FILE_HTML_ICON IMGDIR"/myfile_icon_html.png"
+#define MSG_COMMON_FILE_FLASH_ICON IMGDIR"/myfile_icon_swf.png"
+#define MSG_COMMON_FILE_TXT_ICON IMGDIR"/myfile_icon_text.png"
+#define MSG_COMMON_FILE_VCONTACT_ICON IMGDIR"/myfile_icon_svg.png"
+#define MSG_COMMON_FILE_VCALENDAR_ICON IMGDIR"/myfile_icon_svg.png"
+#define MSG_COMMON_FILE_VNOTE_ICON IMGDIR"/myfile_icon_text.png"
+#define MSG_COMMON_FILE_RSS_ICON IMGDIR"/myfile_icon_rss.png"
+#define MSG_COMMON_FILE_JAVA_ICON IMGDIR"/myfile_icon_java.png"
+
+
+#endif /*__MSG_UI_IMAGE_RESOURCE__*/
+
diff --git a/common/msg-ui-util.h b/common/msg-ui-util.h
index 83af85b..1f0b2c1 100755
--- a/common/msg-ui-util.h
+++ b/common/msg-ui-util.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_UTIL_H__
#define __MSG_UTIL_H__
@@ -135,8 +136,6 @@ enum {
} \
} 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"
@@ -148,6 +147,11 @@ enum {
#define EMAIL_COMPOSER_UG_NAME "email-composer-efl"
#define CALL_SETTING_UG_NAME "setting-call-efl"
+/* Other application's pkg name */
+#define VIDEO_CALL_PKG_NAME "org.tizen.vtmain"
+#define VOICE_CALL_PKG_NAME "org.tizen.call"
+#define VIDEO_PLAYER_PKG_NAME "org.tizen.video-player"
+
/* NOTIFY MESSAGE */
#define MSG_UI_NOTI_UNDER_CONTRUCT "Under construction"
#define MSG_UI_NOTI_BLOCKED "Blocked"
@@ -157,18 +161,29 @@ enum {
#define MSG_HEADER_ICON_CANCEL IMGDIR"/01_header_icon_cancel.png"
#define MSG_HEADER_ICON_DONE IMGDIR"/01_header_icon_done.png"
+#define MSG_TITLE_ICON_VOICECALL IMGDIR"/M01_icon_voice_call.png"
+#define MSG_TITLE_ICON_VIDEOCALL IMGDIR"/M01_icon_video_call.png"
+#define MSG_TITLE_ICON_ADD_TO_CONTACT IMGDIR"/01_controllbar_icon_add_to_contact.png"
+#define MSG_CONTROLBAR_ICON_VIEW_CONTACT IMGDIR"/M01_icon_view_contact.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"
+#define MSG_CONTROLBAR_ICON_MORE MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_more.png"
+#define MSG_CONTROLBAR_ICON_SETTINGS MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_settings.png"
+#define MSG_CONTROLBAR_ICON_EDIT MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_edit.png"
+
+/* viewer */
+#define MSG_CONTROLBAR_ICON_PAUSE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_pause.png"
+#define MSG_CONTROLBAR_ICON_PLAY MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_Play.png"
+#define MSG_CONTROLBAR_ICON_SAVE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_save.png"
+#define MSG_CONTROLBAR_ICON_ATTACH MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_attach.png"
+#define MSG_CONTROLBAR_ICON_REPLY MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_reply.png"
+#define MSG_CONTROLBAR_ICON_RESEND MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_resend.png"
/* setting */
#define MSG_CONTROLBAR_ICON_CREATE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_create.png"
@@ -182,11 +197,6 @@ typedef enum {
} msg_time_format;
enum {
- MSG_UI_THEME_WHITE,
- MSG_UI_THEME_BLUE_HD,
-};
-
-enum {
CONTROLBAR_ITEM_1 = 0,
CONTROLBAR_ITEM_2,
CONTROLBAR_ITEM_3,
diff --git a/composer/CMakeLists.txt b/composer/CMakeLists.txt
index 87671e6..cde262b 100755
--- a/composer/CMakeLists.txt
+++ b/composer/CMakeLists.txt
@@ -7,11 +7,11 @@ 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-attachment.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
@@ -19,7 +19,9 @@ SET(COMPOSER_SRCS
./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-subject.c
./src/ui-composer/msg-ui-composer-common.c
+ ./src/ui-composer/msg-ui-composer-pageduration.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
@@ -46,6 +48,7 @@ SET(CMAKE_LDFLAGS "-Wl,-zdefs" )
ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"")
ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"")
ADD_DEFINITIONS("-DTARGET")
+ADD_DEFINITIONS("-DSLP_PROF")
ADD_LIBRARY(${UGCOMPOSER} SHARED ${COMPOSER_SRCS})
TARGET_LINK_LIBRARIES(${UGCOMPOSER} ${CMAKE_LDFLAGS} ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common)
@@ -58,21 +61,9 @@ ADD_CUSTOM_TARGET(composer.edj
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/composer_main.edc
)
-ADD_DEPENDENCIES(${UGCOMPOSER} composer.edj)
+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
index ae6088c..26dae7c 100755
--- a/composer/data/composer_edc/composer_main.edc
+++ b/composer/data/composer_edc/composer_main.edc
@@ -3,7 +3,12 @@
#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
+#define IMG_BODY_ATTACH_INPUT_FIELD "M01_search_input_field_attach_bg.png"
+#define IMG_BODY_BG_FIELD "M01_input_bg.png"
+
+#define BORDER_BODY_INPUT_FIELD 8 8 8 8
+#define BORDER_ATTACH_INPUT_FIELD 7 7 7 7
+#define BORDER_BODY_BG_FIELD 2 2 2 2
collections
{
@@ -12,6 +17,9 @@ collections
#include "msg-ui-composer-body.edc"
#include "msg-ui-composer-recipient.edc"
+#include "msg-ui-composer-subject.edc"
+#include "msg-ui-composer-attachment.edc"
#include "msg-ui-composer-custom.edc"
+
#include "msg-ui-composer-bubble.edc"
}
diff --git a/composer/data/composer_edc/msg-ui-composer-attachment.edc b/composer/data/composer_edc/msg-ui-composer-attachment.edc
new file mode 100755
index 0000000..879ab3a
--- /dev/null
+++ b/composer/data/composer_edc/msg-ui-composer-attachment.edc
@@ -0,0 +1,264 @@
+/***********************************************************************
+ * Attachment
+ **************************************************************************/
+
+#define MSG_COMPOSER_ATTACHMENT_H 90
+#define MSG_COMPOSER_ATTACHMENT_FIELD_H 74
+#define ATTACHMENT_DELBUTTON_SIZE 48 48
+#define ATTACHMENT_IMAGE_SIZE 48 48
+#define COLOR_BODY_ATTACH_TEXT 251 85 40 255
+
+group
+{
+ name: "composer/attachment/main";
+ images {
+ image: IMG_BODY_ATTACH_INPUT_FIELD COMP;
+ }
+
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: 0 MSG_COMPOSER_ATTACHMENT_H;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ PADDING_TOP("padding_top_16", 16);
+ PADDING_TOP("padding_top", 29);
+ PADDING_LEFT("padding_left", 16);
+ PADDING_RIGHT("padding_right", 16);
+ PADDING_RIGHT("padding_right_32", 32);
+ PADDING_BOTTOM("padding_bottom", 13);
+ part {
+ name: "img.body";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 MSG_COMPOSER_ATTACHMENT_FIELD_H;
+ fixed: 1 0;
+ rel1 {
+ to_y: "padding_top_16";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_right";
+ relative: 0.0 1.0;
+ }
+ image {
+ normal: IMG_BODY_ATTACH_INPUT_FIELD;
+ border: BORDER_ATTACH_INPUT_FIELD;
+ }
+ }
+ }
+ part {
+ name: "swl.image";
+ type: SWALLOW;
+ scale: 1;
+
+ description {
+ state: "default" 0.0;
+ min: ATTACHMENT_IMAGE_SIZE;
+ max: ATTACHMENT_IMAGE_SIZE;
+ fixed: 1 1;
+ rel1 {
+ to_x: "padding_left";
+ to_y: "padding_top";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_left";
+ to_y: "padding_bottom";
+ relative: 1.0 0.0;
+ }
+ align: 0.0 0.5;
+ }
+ }
+ part {
+ name: "text.filename";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to_x: "swl.image";
+ to_y: "padding_top";
+ relative: 1.0 1.0;
+ offset: 16 0;
+ }
+ rel2 {
+ to_x: "padding_right_32";
+ to_y: "padding_bottom";
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ align: 0.0 0.5;
+ color: COLOR_BODY_ATTACH_TEXT;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: 34;
+ align: 0.0 0.5;
+ text: "";
+ }
+ }
+ }
+ }
+}
+
+group
+{
+ name: "composer/attachment/item";
+ images {
+ image: IMG_BODY_ATTACH_INPUT_FIELD COMP;
+ }
+
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: 0 MSG_COMPOSER_ATTACHMENT_H;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ PADDING_TOP("padding_top_16", 16);
+ PADDING_TOP("padding_top", 29);
+ PADDING_LEFT("padding_left", 16);
+ PADDING_RIGHT("padding_right", 16);
+ PADDING_RIGHT("padding_right_32", 32);
+ PADDING_BOTTOM("padding_bottom", 13);
+ part {
+ name: "img.body";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 MSG_COMPOSER_ATTACHMENT_FIELD_H;
+ fixed: 1 0;
+ rel1 {
+ to_y: "padding_top_16";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_right";
+ relative: 0.0 1.0;
+ }
+ image {
+ normal: IMG_BODY_ATTACH_INPUT_FIELD;
+ border: BORDER_ATTACH_INPUT_FIELD;
+ }
+ }
+ }
+ part {
+ name: "swl.image";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: ATTACHMENT_IMAGE_SIZE;
+ max: ATTACHMENT_IMAGE_SIZE;
+ fixed: 1 1;
+ rel1 {
+ to_x: "padding_left";
+ to_y: "padding_top";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_left";
+ to_y: "padding_bottom";
+ relative: 1.0 0.0;
+ }
+ align: 0.0 0.5;
+ }
+ }
+ part {
+ name: "text.filename";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to_x: "swl.image";
+ to_y: "padding_top";
+ relative: 1.0 1.0;
+ offset: 16 0;
+ }
+ rel2 {
+ to_x: "swl.delete_btn";
+ to_y: "padding_bottom";
+ relative: 0.0 0.0;
+ offset: -16 0;
+ }
+ align: 0.0 0.5;
+ color: COLOR_BODY_ATTACH_TEXT;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: 32;
+ align: 0.0 0.5;
+ text: "";
+ }
+ }
+ }
+ part {
+ name: "rect.delete_btn";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: ATTACHMENT_DELBUTTON_SIZE;
+ max: ATTACHMENT_DELBUTTON_SIZE;
+ fixed: 1 1;
+ rel1 {
+ to_x: "padding_right_32";
+ to_y: "padding_top";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_right_32";
+ to_y: "padding_bottom";
+ relative: 0.0 0.0;
+ }
+ align: 1.0 0.0;
+ color: 155 55 155 255;
+ visible: 0;
+ }
+ }
+ part {
+ name: "swl.delete_btn";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: ATTACHMENT_DELBUTTON_SIZE;
+ max: ATTACHMENT_DELBUTTON_SIZE;
+ fixed: 1 1;
+ rel1 {
+ to_x: "padding_right_32";
+ to_y: "padding_top";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_right_32";
+ to_y: "padding_top";
+ relative: 0.0 1.0;
+ }
+ align: 1.0 0.0;
+ }
+ }
+ }
+}
+
diff --git a/composer/data/composer_edc/msg-ui-composer-body.edc b/composer/data/composer_edc/msg-ui-composer-body.edc
index 6bc8e59..bfb2864 100755
--- a/composer/data/composer_edc/msg-ui-composer-body.edc
+++ b/composer/data/composer_edc/msg-ui-composer-body.edc
@@ -1,286 +1,635 @@
-#define MSGC_BODY_PAGE_MIN_H 90
-#define MSGC_BODY_MAIN_MIN_H (MSGC_BODY_PAGE_MIN_H + 16 + 16)
+#define MSGC_BODY_PAGE_IMAGE_H 74
+#define MSGC_BODY_PAGE_MIN_H 74
+#define MSGC_BODY_MAIN_MIN_H (MSGC_BODY_PAGE_MIN_H + 20 + 20)
+#define BODY_ADDBUTTON_SIZE 64 64
#define BODY_SENDBUTTON_SIZE 108 74
-#define BODYPAGE_DELBUTTON_SIZE 44 36
-#define MSGC_BODY_PAGE_IMAGE_H 74
+#define BODYPAGE_DELBUTTON_SIZE 48 48
+
+#define BODY_CHAR_COUNT_TEXT_SIZE 24
+
+#define COLOR_BODY_MEDIA_TEXT 251 85 40 255
+#define BODY_MEDIA_TEXT_SIZE 34
group
{
- name: "composer/body/page";
- images
- {
+ name: "composer/body/media_sound";
+ images {
image: IMG_BODY_INPUT_FIELD COMP;
}
-
- parts
- {
- part
- {
+ parts {
+ part {
name: "rect";
type: RECT;
scale: 1;
- mouse_events: 0;
- description
- {
+ mouse_events: 0;
+ description {
state: "default" 0.0;
- min: 0 MSGC_BODY_PAGE_MIN_H;
+ min: 0 76;
+ fixed: 0 1;
color: 0 0 0 0;
+ align: 0.5 0.5;
}
}
+ PADDING_TOP(padding_top_1, 1);
+ PADDING_TOP(padding_top, 6);
+ PADDING_LEFT(padding_left, 16);
+ PADDING_RIGHT(padding_right, 16);
+ PADDING_BOTTOM(padding_bottom, 21);
+ PADDING_BOTTOM(padding_bottom_15, 15);
+ part {
+ name: "rect.thumbnail";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1{to: "swl.thumbnail"; relative: 0.0 0.0;}
+ rel2{to: "swl.thumbnail"; relative: 1.0 1.0;}
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "bg_image";
+ scale: 1;
+ mouse_events: 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;
+ description {
+ state: "default" 0.0;
+ rel1{ to_x: "padding_left"; to_y: "padding_top_1"; relative: 1.0 1.0;}
+ rel2{ to_x: "padding_right"; to_y: "padding_bottom_15"; relative: 0.0 0.0;}
+ align: 0.5 0.5;
+ image {
+ normal: IMG_BODY_ATTACH_INPUT_FIELD;
+ border: BORDER_ATTACH_INPUT_FIELD;
+ }
+ }
+ }
+ part {
+ name: "swl.thumbnail";
+ type: SWALLOW;
scale: 1;
- description
- {
+
+ description {
state: "default" 0.0;
- min: 0 MSGC_BODY_PAGE_IMAGE_H;
+ min: 48 48;
fixed: 1 0;
- rel1
- {
+ rel1 {
to_x: "padding_left";
to_y: "padding_top";
relative: 1.0 1.0;
}
- rel2
- {
+ rel2 {
+ to_x: "padding_left";
+ to_y: "padding_bottom";
+ relative: 1.0 0.0;
+ }
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "text.filename";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to_x: "swl.thumbnail";
+ to_y: "padding_top";
+ relative: 1.0 1.0;
+ offset: 16 0;
+ }
+ rel2 {
+ to_x: "swl.del_button";
+ to_y: "padding_bottom";
+ relative: 0.0 0.0;
+ offset: -16 0;
+ }
+ align: 0.0 0.5;
+ color: COLOR_BODY_MEDIA_TEXT;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: BODY_MEDIA_TEXT_SIZE;
+ align: 0.0 0.5;
+ text: "";
+ }
+ }
+ }
+ 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: 0.0 1.0;
+ }
+ rel2 {
to_x: "padding_right";
to_y: "padding_bottom";
relative: 0.0 0.0;
}
- image
- {
+ align: 1.0 0.0;
+ }
+ }
+ }
+}
+
+group
+{
+ name: "composer/body/media_default";
+ 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 100;
+ fixed: 1 1;
+ color: 0 0 0 0;
+ align: 0.5 0.5;
+ }
+ }
+ part {
+ name: "rect.thumbnail";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: 132 132;
+ max: 132 132;
+ rel1{ relative: 0.0 0.0; }
+ rel2{ relative: 0.0 1.0; }
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "bg_image";
+ scale: 1;
+ mouse_events: 0;
+
+ description {
+ state: "default" 0.0;
+ rel1{ to:"rect.thumbnail";relative: 0.0 0.0; }
+ rel2{ to:"rect.thumbnail";relative: 1.0 1.0; }
+ align: 0.5 0.5;
+ image {
normal: IMG_BODY_INPUT_FIELD;
border: BORDER_BODY_INPUT_FIELD;
- }
+ }
}
}
+ part {
+ name: "swl.thumbnail";
+ type: SWALLOW;
+ scale: 1;
- part
- {
+ description {
+ state: "default" 0.0;
+ fixed: 0 0;
+ rel1 {
+ to: "rect.thumbnail";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "rect.thumbnail";
+ relative: 1.0 1.0;
+ }
+ align: 0.0 0.0;
+ }
+ }
+ 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: "rect.thumbnail";
+ relative: 1.0 0.0;
+ }
+ rel2 {
+ to: "rect.thumbnail";
+ relative: 1.0 0.0;
+ }
+ align: 1.0 0.0;
+ }
+ }
+ }
+}
+
+group {
+ name: "composer/body/page";
+ 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", 7);
+ PADDING_TOP("padding_top_13", 13);
+ PADDING_LEFT("padding_left", 16);
+ PADDING_RIGHT("padding_right", 16);
+ PADDING_BOTTOM("padding_bottom", 7);
+ part {
name: "swl.page";
type: SWALLOW;
scale:1;
- description
- {
+ description { //hide delete button
state: "default" 0.0;
min: 0 0;
fixed: 1 0;
- rel1
- {
- to:"img.body";
- relative: 0.0 0.0;
- offset: 16 5;
+ 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; }
+ align: 0.5 0.5;
+ }
+ description { //show delete button
+ state: "default" 0.1;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; }
+ rel2 { to_x: "rect.del_button"; to_y: "padding_bottom"; relative: 0.0 0.0; offset: -16 0; }
+ align: 0.5 0.5;
+ }
+ }
+ part {
+ name: "rect.del_button";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: BODYPAGE_DELBUTTON_SIZE;
+ max: BODYPAGE_DELBUTTON_SIZE;
+ fixed: 1 1;
+ visible: 0;
+ rel1 {
+ to_x: "padding_right";
+ to_y: "padding_top_13";
+ relative: 0.0 1.0;
}
- rel2
- {
- to:"img.body";
- relative: 1.0 1.0;
- offset: -16 -5;
+ rel2 {
+ to_x: "padding_right";
+ to_y: "padding_top_13";
+ relative: 0.0 1.0;
}
- align: 0.5 0.5;
+ align: 1.0 0.0;
}
}
- part
- {
+ part {
name: "swl.del_button";
type: SWALLOW;
scale: 1;
- description
- {
- state: "default" 0.0;
+ description {
+ state: "default" 0.0; //hide
min: BODYPAGE_DELBUTTON_SIZE;
max: BODYPAGE_DELBUTTON_SIZE;
fixed: 1 1;
- rel1
- {
+ visible: 0;
+ rel1 {
to_x: "padding_right";
- to_y: "padding_top";
- relative: 1.0 0.0;
+ to_y: "padding_top_13";
+ relative: 0.0 1.0;
}
- rel2
- {
+ rel2 {
to_x: "padding_right";
- to_y: "padding_top";
- relative: 1.0 0.0;
+ to_y: "padding_top_13";
+ relative: 0.0 1.0;
+ }
+ align: 1.0 0.0;
+ }
+ description {
+ state: "default" 0.1; //show
+ min: BODYPAGE_DELBUTTON_SIZE;
+ max: BODYPAGE_DELBUTTON_SIZE;
+ fixed: 1 1;
+ visible: 1;
+ rel1 {
+ to_x: "padding_right";
+ to_y: "padding_top_13";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_right";
+ to_y: "padding_top_13";
+ relative: 0.0 1.0;
}
align: 1.0 0.0;
}
}
}
+ programs
+ {
+ program {
+ name: "hide.delete";
+ signal: "hide.delete";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "swl.page";
+ target: "swl.del_button";
+ }
+ program {
+ name: "show.delete";
+ signal: "show.delete";
+ source: "*";
+ action: STATE_SET "default" 0.1;
+ target: "swl.page";
+ target: "swl.del_button";
+ }
+ }
}
-group
-{
- name: "composer/body/main";
+/************************************************************************************************/
- parts
- {
- part
- {
+group {
+ name: "composer/body/page_main";
+ images {
+ image: IMG_BODY_INPUT_FIELD COMP;
+ }
+
+ parts {
+ part {
name: "rect";
type: RECT;
scale: 1;
mouse_events: 0;
- description
- {
+ description {
state: "default" 0.0;
- min: 0 MSGC_BODY_MAIN_MIN_H;
- rel1{relative: 0.0 0.0;}
- rel2{relative: 1.0 1.0;}
+ min: 0 MSGC_BODY_PAGE_MIN_H;
color: 0 0 0 0;
}
}
+ PADDING_TOP("padding_top_16", 16);
+ PADDING_RIGHT("padding_right", 16);
+ part {
+ name: "img.body";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 MSGC_BODY_PAGE_IMAGE_H;
+ fixed: 0 1;
+ visible: 1;
+ rel1 { to_y: "padding_top_16"; relative: 0.0 1.0; }
+ rel2 { to_x: "padding_right"; relative: 0.0 1.0; }
+ image {
+ normal: IMG_BODY_INPUT_FIELD;
+ border: BORDER_BODY_INPUT_FIELD;
+ }
+ }
+ }
+ part {
+ name: "swl.page.main";
+ type: SWALLOW;
+ scale:1;
+ description {
+ state: "default" 0.0;
+ min: 0 MSGC_BODY_PAGE_MIN_H;
+ fixed: 1 0;
+ rel1 { to_y: "padding_top_16"; relative: 0.0 1.0; }
+ rel2 { to_x: "padding_right"; relative: 0.0 1.0; }
+ align: 0.5 0.5;
+ }
+ }
+ }
+}
- 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
- {
+group {
+ name: "composer/body/main";
+ images {
+ image: IMG_BODY_BG_FIELD COMP;
+ }
+ 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; }
+ }
+ }
+ part {
+ name: "img.body.bg";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 MSGC_BODY_MAIN_MIN_H;
+ fixed: 0 1;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ image {
+ normal: IMG_BODY_BG_FIELD;
+ border: BORDER_BODY_BG_FIELD;
+ }
+ }
+ }
+ PADDING_TOP("padding_top", 4);
+ PADDING_LEFT("padding_left", 16);
+ PADDING_RIGHT("padding_right", 16);
+ PADDING_BOTTOM("padding_bottom", 20);
+ PADDING_BOTTOM("padding_bottom_25", 25);
+ part {
+ name: "rect_top_bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: 0 1;
+ fixed: 0 1;
+ visible: 1;
+ rel1{ relative: 0.0 0.0; }
+ rel2{ relative: 1.0 0.0; }
+ align: 0.0 0.0;
+ color: 57 60 65 255;
+ }
+ }
+ part {
name: "rb_rect";
type: RECT;
scale: 1;
mouse_events: 0;
- description
- {
+ description {
state: "default" 0.0;
min: 0 0;
max: 9999 110;
fixed: 0 1;
visible: 1;
- rel1
- {
+ rel1 {
to_x: "body.swl.send_button";
- to_y: "padding_top_32";
+ to_y: "padding_top";
relative: 0.0 1.0;
offset: 0 2;
}
- rel2
- {
+ rel2 {
to_x: "body.swl.send_button";
- to_y: "padding_bottom_16";
+ to_y: "padding_bottom";
relative: 1.0 0.0;
}
align: 1.0 1.0;
- color: 255 255 255 255;
}
}
-
- part
- {
+ part {
+ name: "rect.add_bt_area";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: BODY_ADDBUTTON_SIZE;
+ max: BODY_ADDBUTTON_SIZE;
+ fixed: 1 1;
+ rel1 {
+ to_x: "padding_left";
+ to_y: "padding_bottom_25";
+ relative: 1.0 0.0;
+ }
+ rel2 {
+ to_x: "padding_left";
+ to_y: "padding_bottom_25";
+ relative: 1.0 0.0;
+ }
+ align: 0.0 1.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "rect.tap_area_add_main";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 16 0;
+ fixed: 1 0;
+ visible: 0;
+ rel1 {
+ to_x: "rect.add_bt_area";
+ relative: 1.0 0.0;
+ }
+ rel2 {
+ to_x: "rect.add_bt_area";
+ relative: 1.0 1.0;
+ }
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "body.swl.add_button";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ rel1 {
+ to: "rect.add_bt_area";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "rect.add_bt_area";
+ relative: 1.0 1.0;
+ }
+ align: 0.5 0.5;
+ }
+ }
+ part {
name: "body.swl.main";
type: SWALLOW;
scale: 1;
- description
- {
+ description {
state: "default" 0.0;
min: 0 0;
fixed: 0 0;
- rel1
- {
- to_x: "padding_left_16";
+ rel1 {
+ to_x: "rect.tap_area_add_main";
to_y: "padding_top";
relative: 1.0 1.0;
offset: 0 0;
}
- rel2
- {
+ rel2 {
to_x: "body.swl.send_button";
- to_y: "padding_bottom_16";
+ to_y: "padding_bottom";
relative: 0.0 0.0;
}
align: 0.0 1.0;
}
}
-
- part
- {
+ part {
name: "text.char_count";
type: TEXT;
scale: 1;
mouse_events: 0;
clip_to: "rb_rect";
- description
- {
+ description {
state: "default" 0.0;
- rel1
- {
+ rel1 {
to_x: "body.swl.send_button";
to_y: "rb_rect";
relative: 0.0 0.0;
}
- rel2
- {
- to_y: "body.swl.send_button";
+ rel2 {
+ to: "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;
+ color: 249 249 249 255;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: BODY_CHAR_COUNT_TEXT_SIZE;
align: 0.5 0.5;
text: "";
}
}
}
-
- part
- {
+ part {
name: "body.swl.send_button";
type: SWALLOW;
scale: 1;
- description
- {
+ 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";
+ rel1 {
+ to_x: "padding_right";
+ to_y: "padding_bottom";
relative: 0.0 0.0;
offset: 0 0;
}
- rel2
- {
- to_x: "padding_right_16";
- to_y: "padding_bottom_16";
+ rel2 {
+ to_x: "padding_right";
+ to_y: "padding_bottom";
relative: 0.0 0.0;
offset: 0 0;
}
@@ -288,24 +637,4 @@ group
}
}
}
-
- 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
index ff158df..931afe0 100755
--- a/composer/data/composer_edc/msg-ui-composer-bubble.edc
+++ b/composer/data/composer_edc/msg-ui-composer-bubble.edc
@@ -1,6 +1,3 @@
-#define SLP_FONT_BOLD "SLP:style=Bold";
-#define SLP_FONT_MEDIUM "SLP:style=Medium";
-#define SLP_FONT_ROMAN "SLP:style=Roman";
group
{
@@ -62,6 +59,185 @@ group
group {
+ name: "composer/content/bubble/media";
+
+ parts {
+ part{
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ mouse_events : 0;
+ description
+ {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "bubble.media.padding_bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ fixed: 1 1;
+ min: 0 1;
+ max: 0 1;
+ rel1{relative: 0.0 1.0;}
+ rel2{relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bubble.media.padding_right";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ fixed: 1 1;
+ min: 1 0;
+ max: 1 0;
+ rel1{relative: 1.0 0.0;}
+ rel2{relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bubble.swallow.media";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 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: "bubble.swallow.more";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 0;
+ align: 1.0 0.0;
+ rel1{
+ to_x: "bubble.media.padding_right";
+ to_y: "bubble.swallow.media";
+ relative: 0.0 1.0;
+ }
+ rel2{
+ to_x: "bubble.media.padding_right";
+ to_y: "bubble.media.padding_bottom";
+ relative: 0.0 0.0;
+ }
+ }
+ }
+ }
+}
+
+group {
+ name: "composer/content/bubble/date_line";
+
+ images {
+ image: "00_MessageBubble_date_bg.png" COMP;
+ }
+
+ parts {
+ part {
+ name: "top_padding";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 5;
+ color: 0 0 0 0;
+ rel1 {relative: 0.0 0.0;}
+ rel2 {relative: 1.0 0.0;}
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "base";
+ type: RECT;
+ scale: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 38;
+ color: 0 0 0 0;
+ rel1 {to_y: "top_padding"; relative: 0.0 1.0;}
+ rel2 {to_y: "bottom_padding"; relative: 1.0 0.0;}
+ align: 0.0 0.5;
+ }
+ }
+ part {
+ name: "bottom_padding";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ min: 0 20;
+ color: 0 0 0 0;
+ rel1 { relative: 0.0 1.0;}
+ rel2 { relative: 1.0 1.0;}
+ align: 0.0 1.0;
+ }
+ }
+ part {
+ name: "date_line_left";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ align: 0.0 0.5;
+ rel1 {relative: 0.0 0.45;}
+ rel2 {relative: 0.38 0.55;}
+ image {
+ normal: "00_MessageBubble_date_bg.png";
+ }
+ }
+ }
+ part {
+ name: "elm.text.date";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.5;
+ min: 0 38;
+ fixed: 0 1;
+ text {
+ font: "SLP:style=Roman";
+ size: 32;
+ align: 0.5 0.5;
+ }
+ color: 128 128 128 255;
+ rel1 { to_x : "date_line_left"; relative: 1.0 0.0;}
+ rel2 { to_x : "date_line_right"; relative: 0.0 1.0;}
+ }
+ }
+
+ part {
+ name: "date_line_right";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ align: 1.0 0.5;
+ rel1 {relative: 0.62 0.45;}
+ rel2 {relative: 1.0 0.55;}
+ image {
+ normal: "00_MessageBubble_date_bg.png";
+ }
+ }
+ }
+ }
+}
+
+group {
name: "msg_2button_popup";
#define BUTTON_WIDTH 304.0
#define BUTTON_HEIGHT 46.0
diff --git a/composer/data/composer_edc/msg-ui-composer-custom.edc b/composer/data/composer_edc/msg-ui-composer-custom.edc
index 0582a41..b632537 100755
--- a/composer/data/composer_edc/msg-ui-composer-custom.edc
+++ b/composer/data/composer_edc/msg-ui-composer-custom.edc
@@ -1,180 +1,132 @@
-#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
+#define MSGC_POPUP_INFO_TXT_COLOR_INC "#000000"
+#define MSGC_POPUP_INFO_TXT_SIZE 40
+#define MSGC_POPUP_ENTRY_FIELD_H 74
-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;
- }
+group {
+ name: "composer/popup/entryview";
+ styles {
+ style {
+ name: "popup_desc_style";
+ base: "font=SLP:style=Roman font_size="MSGC_POPUP_INFO_TXT_SIZE" align=center color="MSGC_POPUP_INFO_TXT_COLOR_INC" wrap=mixed text_class=slp_roman";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "whitecolor" "+ color=#ffffff";
+ tag: "tab" "\t";
}
-
- PADDING_RIGHT("padding_right",MSGC_DIALOGUE_PADDING_W);
-
- part
- {
- name: "padding.text.left";
+ }
+ parts {
+ PADDING_TOP("padding_top", 15);
+ PADDING_LEFT("padding_left", 16);
+ PADDING_RIGHT("padding_right", 16);
+ PADDING_BOTTOM("padding_bottom", 22);
+ part {
+ name: "rect.text";
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";
+ min: 0 120;
+ fixed: 0 1;
+ rel1 {
+ to_x: "padding_left";
+ to_y: "padding_top";
+ relative: 1.0 1.0;
}
- rel2{
+ rel2 {
+ to_x: "padding_right";
+ to_y: "padding_top";
relative: 0.0 1.0;
- to_x: "elm.text";
}
-
- align: 1.0 0.0;
+ align: 0.0 0.0;
visible: 0;
}
}
-
- part
- {
- name: "padding.entry.left";
- type: RECT;
+ part {
+ name: "elm.text";
+ type: TEXTBLOCK;
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";
+ fixed: 1 1;
+ rel1 { to: "rect.text"; relative: 0.0 0.0; offset: 50 0;}
+ rel2 { to: "rect.text"; relative: 1.0 1.0; offset: -50 0;}
+ text {
+ style: "popup_desc_style";
+ min: 0 0;
+ max: 0 1;
+ align: 0.5 0.0;
}
- align: 1.0 0.0;
- visible: 0;
}
}
-
part
{
- name: "elm.text";
- type: TEXT;
+ name: "padding.text.middle";
+ type: RECT;
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";
+ min: 0 15;
+ fixed: 0 1;
+ rel1 {
+ to: "rect.text";
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: "";
+ rel2 {
+ to: "rect.text";
+ relative: 1.0 1.0;
}
+ align: 0.5 0.0;
+ visible: 0;
}
}
-
part
{
- name: "dialogue.swl.entry";
- type: SWALLOW;
+ name: "img.body";
+ type: IMAGE;
scale: 1;
description
{
state: "default" 0.0;
- min: MSGC_DIALOGUE_ENTRY_W 0;
+ min: 0 MSGC_POPUP_ENTRY_FIELD_H;
fixed: 1 0;
rel1 {
- to_x: "padding.text.left";
+ to_x: "padding_left";
+ to_y: "padding.text.middle";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_right";
+ to_y: "padding_bottom";
relative: 0.0 0.0;
}
- rel2
+ image
{
- to_x: "padding.text.left";
- relative: 0.0 1.0;
+ normal: IMG_BODY_INPUT_FIELD;
+ border: BORDER_BODY_INPUT_FIELD;
}
- 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;
+ part{
+ name:"swl.entry";
+ type: SWALLOW;
+ scale : 1;
description {
state: "default" 0.0;
- min: 0 MSGC_DATEFIELD_TEXT_H;
- fixed: 0 1;
- align: 0.5 0.0;
+ min: 0 0;
+ align: 0.5 1.0;
+ fixed: 1 0;
rel1 {
- to :"padding_left";
- relative: 1 0;
+ to: "img.body";
+ relative: 0.0 0.0;
+ offset: 10 7;
}
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 ";
+ to: "img.body";
+ relative: 1.0 1.0;
+ offset: -10 -7;
}
}
}
-
- 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
index ed22c7e..6efa248 100755
--- a/composer/data/composer_edc/msg-ui-composer-data.edc
+++ b/composer/data/composer_edc/msg-ui-composer-data.edc
@@ -1,11 +1,17 @@
#define IMAGE_PATH ""
#define PREDICT_LIST_H 80
-#define SLP_FONT_BOLD "SLP:style=Bold";
-#define SLP_FONT_MEDIUM "SLP:style=Medium";
-#define SLP_FONT_ROMAN "SLP:style=Roman";
+#define SLP_FONT_BOLD "SLP:style=Bold"
+#define SLP_FONT_MEDIUM "SLP:style=Medium"
+#define SLP_FONT_ROMAN "SLP:style=Roman"
+#define FONT_TEXT_CLASS_BOLD "slp_bold"
+#define FONT_TEXT_CLASS_MEDIUM "slp_medium"
+#define FONT_TEXT_CLASS_ROMAN "slp_roman"
+#define FONT_TEXT_CLASS_LABEL "label"
-#define PADDING_LEFT( param_padding_name ,param_padding_size ) \
+#define VISIBLE 0
+
+#define PADDING_LEFT(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -17,14 +23,14 @@
state: "default" 0.0; \
min: param_padding_size 0; \
fixed: 1 0; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 0.0 0.0;} \
rel2{relative: 0.0 1.0;} \
align: 0.0 0.0; \
- color: 0 55 0 55; \
- } \
-}
-#define PADDING_TOP( param_padding_name ,param_padding_size ) \
+ color: 100 255 0 0; \
+ } \
+ }
+#define PADDING_TOP(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -36,14 +42,14 @@
state: "default" 0.0; \
min: 0 param_padding_size ; \
fixed: 0 1; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 0.0 0.0;} \
rel2{relative: 1.0 0.0;} \
align: 0.0 0.0; \
- color: 0 55 0 55; \
- } \
-}
-#define PADDING_BOTTOM( param_padding_name ,param_padding_size ) \
+ color: 0 0 0 0; \
+ } \
+ }
+#define PADDING_BOTTOM(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -55,16 +61,15 @@
state: "default" 0.0; \
min: 0 param_padding_size; \
fixed: 0 1; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 0.0 1.0;} \
rel2{relative: 1.0 1.0;} \
align: 0.0 1.0; \
- color: 0 55 0 55; \
+ color: 0 0 0 0; \
} \
}
-
-#define PADDING_RIGHT( param_padding_name ,param_padding_size ) \
+#define PADDING_RIGHT(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -76,11 +81,11 @@
state: "default" 0.0; \
min: param_padding_size 0; \
fixed: 1 0; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 1.0 0.0;} \
rel2{relative: 1.0 1.0;} \
align: 1.0 0.0; \
- color: 0 55 0 55; \
+ color: 0 0 0 0; \
} \
}
#define PART_DISCLIP \
diff --git a/composer/data/composer_edc/msg-ui-composer-main.edc b/composer/data/composer_edc/msg-ui-composer-main.edc
index ef1e3c6..c7ce727 100755
--- a/composer/data/composer_edc/msg-ui-composer-main.edc
+++ b/composer/data/composer_edc/msg-ui-composer-main.edc
@@ -6,7 +6,7 @@ group
name: "rect";
type: RECT;
scale: 1;
- mouse_events : 0;
+ mouse_events: 0;
description
{
state: "default" 0.0;
@@ -14,27 +14,27 @@ group
}
}
part{
- name : "swl.sel_all";
- type : SWALLOW;
- scale : 1;
+ name: "swl.sel_all";
+ type: SWALLOW;
+ scale: 1;
description{
state: "default" 0.0;
- fixed : 1 1;
- min : 0 0;
- align : 0.0 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;
+ type: SWALLOW;
+ scale: 1;
description{
state: "default" 0.0;
- fixed : 1 1;
- min : 0 0;
- align : 0.0 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;}
}
@@ -47,17 +47,17 @@ group
description
{
state: "default" 0.0;
- fixed :1 1;
- min : 0 1;
+ fixed: 1 1;
+ min: 0 1;
align: 0.0 1.0;
- rel1{to: "swl.recipient"; relative: 0.0 1.0;}
+ rel1{to: "rect"; relative: 0.0 1.0;}
rel2{to: "rect"; relative: 1.0 1.0;}
}
description
{
state: "default" 0.1;
- fixed :1 1;
- min : 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;}
@@ -74,22 +74,46 @@ group
min: 0 1;
rel1
{
- to: "swl.sel_all";
+ to: "swl.sel_all";
relative: 0.0 1.0;
offset: 0 20;
}
rel2
{
- to: "swl.composer.body";
+ to: "swl.composer.body";
relative: 1.0 0.0;
}
}
}
+ part {
+ name: "swl.bubble.titlemenu";
+ type: SWALLOW;
+ scale: 1;
+ description
+ {
+ state: "default" 0.0;
+ fixed: 0 1;
+ min: 0 0;
+ rel1 { to: "swl.sel_all"; relative: 0.0 1.0; }
+ rel2 { to: "swl.sel_all"; relative: 1.0 1.0; }
+ align: 0.0 0.0;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ fixed: 0 0;
+ } description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ }
+ }
part
{
name: "swl.bg_predictsearch";
type: SWALLOW;
- scale:1;
+ scale: 1;
repeat_events: 0;
description {
state: "default" 0.0;
@@ -109,7 +133,7 @@ group
{
name: "swl.predictsearch";
type: SWALLOW;
- scale:1;
+ scale: 1;
repeat_events: 0;
description {
state: "default" 0.0;
@@ -128,7 +152,7 @@ group
programs
{
program {
- name: "hide.predictsearch";
+ name: "hide.predictsearch";
signal: "hide.predictsearch";
source: "*";
action: STATE_SET "hide" 0.0;
@@ -137,7 +161,7 @@ group
}
program {
- name: "show.predictsearch";
+ name: "show.predictsearch";
signal: "show.predictsearch";
source: "*";
action: STATE_SET "default" 0.0;
@@ -145,7 +169,7 @@ group
target: "swl.bg_predictsearch";
}
program {
- name: "change.bubble";
+ name: "change.bubble";
signal: "change.bubble";
source: "*";
action: STATE_SET "default" 0.1;
@@ -158,6 +182,22 @@ group
action: STATE_SET "default" 0.0;
target: "swl.composer.body";
}
+ program {
+ name: "title_menu_open";
+ signal: "elm,state,title_menu,open";
+ source: "";
+ action: STATE_SET "show" 0.0;
+ target: "swl.bubble.titlemenu";
+ transition: LINEAR 0.2;
+ }
+ program {
+ name: "title_menu_close";
+ signal: "elm,state,title_menu,close";
+ source: "";
+ action: STATE_SET "hide" 0.0;
+ target: "swl.bubble.titlemenu";
+ transition: LINEAR 0.2;
+ }
}
}
}
diff --git a/composer/data/composer_edc/msg-ui-composer-subject.edc b/composer/data/composer_edc/msg-ui-composer-subject.edc
new file mode 100755
index 0000000..277d157
--- /dev/null
+++ b/composer/data/composer_edc/msg-ui-composer-subject.edc
@@ -0,0 +1,160 @@
+/************************
+ * subject
+ **********************/
+
+#define MSG_COMPOSER_SUBJECT_H 74
+#define MSG_COMPOSER_SUBJECT_FIELD_H 74
+#define SUBJECT_DELBUTTON_SIZE 44 36
+#define COLOR_SUBJECT_GUIDE_TEXT 158 158 158 255
+
+group {
+ name: "composer/subject/main";
+
+ 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 MSG_COMPOSER_SUBJECT_H;
+ fixed: 1 1;
+ color: 0 0 0 0;
+ }
+ }
+ PADDING_TOP("padding_top", 16);
+ PADDING_TOP("padding_top_29", 29);
+ PADDING_LEFT("padding_left", 16);
+ PADDING_RIGHT("padding_right", 16);
+ PADDING_RIGHT("padding_right_32", 32);
+ PADDING_BOTTOM("padding_bottom", 7);
+ part {
+ name: "img.body";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 MSG_COMPOSER_SUBJECT_FIELD_H;
+ fixed: 1 0;
+ rel1 { to_y: "padding_top"; relative: 0.0 1.0; }
+ rel2 { to_x: "padding_right"; relative: 0.0 1.0; }
+ image {
+ normal: IMG_BODY_INPUT_FIELD;
+ border: BORDER_BODY_INPUT_FIELD;
+ }
+ }
+ }
+ part {
+ name: "subject.guidetxt";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ color: COLOR_SUBJECT_GUIDE_TEXT;
+ rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; }
+ rel2 { to_x: "rect.del_button"; to_y: "padding_bottom"; relative: 0.0 0.0; offset: -16 0; }
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: 32;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ part {
+ name: "subject.swl.entry";
+ type: SWALLOW;
+ scale: 1;
+ description { //hide delete button
+ state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; }
+ rel2 { to_x: "padding_right_32"; to_y: "padding_bottom"; relative: 0.0 0.0; }
+ align: 0.5 0.5;
+ }
+ description { //show delete button
+ state: "default" 0.1;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; }
+ rel2 { to_x: "rect.del_button"; to_y: "padding_bottom"; relative: 0.0 0.0; offset: -16 0; }
+ align: 0.5 0.5;
+ }
+ }
+ part {
+ name: "rect.del_button";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: BODYPAGE_DELBUTTON_SIZE;
+ max: BODYPAGE_DELBUTTON_SIZE;
+ fixed: 1 1;
+ visible: 0;
+ rel1 {
+ to_x: "padding_right_32";
+ to_y: "padding_top_29";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to_x: "padding_right_32";
+ to_y: "padding_top_29";
+ relative: 0.0 1.0;
+ }
+ align: 1.0 0.0;
+ }
+ }
+ part {
+ name: "subject.swl.del_button";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0; //hide
+ min: BODYPAGE_DELBUTTON_SIZE;
+ max: BODYPAGE_DELBUTTON_SIZE;
+ fixed: 1 1;
+ visible: 0;
+ rel1 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; }
+ rel2 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; }
+ align: 1.0 0.0;
+ }
+ description {
+ state: "default" 0.1; //show
+ min: BODYPAGE_DELBUTTON_SIZE;
+ max: BODYPAGE_DELBUTTON_SIZE;
+ fixed: 1 1;
+ visible: 1;
+ rel1 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; }
+ rel2 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; }
+ align: 1.0 0.0;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "hide.delete";
+ signal: "hide.delete";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "subject.swl.entry";
+ target: "subject.swl.del_button";
+ }
+ program {
+ name: "show.delete";
+ signal: "show.delete";
+ source: "*";
+ action: STATE_SET "default" 0.1;
+ target: "subject.swl.entry";
+ target: "subject.swl.del_button";
+ }
+ }
+}
+
diff --git a/composer/data/composer_edc/white_theme_composer.edc b/composer/data/composer_edc/white_theme_composer.edc
deleted file mode 100755
index d93e800..0000000
--- a/composer/data/composer_edc/white_theme_composer.edc
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#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-attachment.h b/composer/include/msg-ui-composer-attachment.h
new file mode 100755
index 0000000..33b6909
--- /dev/null
+++ b/composer/include/msg-ui-composer-attachment.h
@@ -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_ATTACHMENT_H_
+#define __MSG_UI_COMPOSER_ATTACHMENT_H_
+
+#include "msg-ui-composer-data.h"
+
+int64 msg_ui_composer_get_attached_item_size(void *data);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_add_attach_media(MSG_COMPOSER_VIEW_DATA_S *cd,
+ const char *filepath,
+ COMPOSER_MEDIA_TYPE_E media_type);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_read_attachments(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_attachment_set_loaded_data(void *data, const char *filepath, int filetype);
+
+void msg_ui_composer_attachment_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+void msg_ui_composer_expand_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_contract_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd);
+int msg_ui_composer_get_attach_count(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+#endif /*__MSG_UI_COMPOSER_ATTACHMENT_H_*/
diff --git a/composer/include/msg-ui-composer-body-callback.h b/composer/include/msg-ui-composer-body-callback.h
index 969a18f..eae3896 100755
--- a/composer/include/msg-ui-composer-body-callback.h
+++ b/composer/include/msg-ui-composer-body-callback.h
@@ -14,14 +14,23 @@
* limitations under the License.
*/
+
#ifndef MSG_UI_COMPOSER_BODY_CALLBACK_H_
#define MSG_UI_COMPOSER_BODY_CALLBACK_H_
#include <Elementary.h>
-
void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_add_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
void msg_ui_composer_body_entry_focused_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_press_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_maxlength_reached_cb(void *data, Evas_Object *obj, void *event_info);
+
+void msg_ui_composer_body_page_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_media_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_body_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
#endif /* MSG_UI_COMPOSER_BODY_CALLBACK_H_ */
diff --git a/composer/include/msg-ui-composer-body-page.h b/composer/include/msg-ui-composer-body-page.h
index 4259caa..a8bd7e2 100755
--- a/composer/include/msg-ui-composer-body-page.h
+++ b/composer/include/msg-ui-composer-body-page.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_BODY_PAGE_H_
#define __MSG_UI_COMPOSER_BODY_PAGE_H_
@@ -28,17 +29,26 @@
/* structures*/
/* function prototypes*/
+Evas_Object *msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent);
+Evas_Object *msg_ui_composer_body_sms_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent);
+
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_read_mms_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_body_insert_media(MSG_COMPOSER_VIEW_DATA_S *cd, const char *file_path, COMPOSER_MEDIA_TYPE_E media_type);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_insert_item_remove(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_item, COMPOSER_MEDIA_TYPE_E media_type);
+int msg_ui_composer_get_inserted_item_size(MSG_COMPOSER_VIEW_DATA_S *cd);
COMPOSER_RETURN_TYPE_E msg_ui_composer_sms_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_mms_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);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_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);
+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);
+void msg_ui_composer_body_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd, const char *font_sytle);
#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
index aeee88f..c3c6bd0 100755
--- a/composer/include/msg-ui-composer-body.h
+++ b/composer/include/msg-ui-composer-body.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_BODY_H_
#define __MSG_UI_COMPOSER_BODY_H_
@@ -22,15 +23,48 @@
#include "msg-ui-composer-body-page.h"
#include <Elementary.h>
+/* defines*/
+#define COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN (88)
+#define COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT (130)
+
+#define COMPOSER_RESIZE_LOOP_MAX (3)
+
+/* enum types*/
+typedef enum {
+ COMPOSER_THREAD_STATUS_UNKNOWN = 0,
+ COMPOSER_THREAD_STATUS_RESIZE,
+ COMPOSER_THREAD_STATUS_RESIZE_SUCCESS,
+ COMPOSER_THREAD_STATUS_RESIZE_FAIL,
+ COMPOSER_THREAD_STATUS_SUCCESS,
+ COMPOSER_THREAD_STATUS_FAIL
+} COMPOSER_THREAD_STATUS_E;
+
+/* structures*/
+typedef struct _msg_ui_thread_data_s {
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ int fail_count;
+ COMPOSER_THREAD_STATUS_E status;
+ int64 wishsize;
+ bool need_ChangeResolution;
+ char filepath[DEF_BUF_LEN_L];
+} COMPOSER_THREAD_DATA_S;
/* function prototypes*/
Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent);
+void msg_ui_composer_body_delete(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_items_add(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_item_add(MSG_COMPOSER_VIEW_DATA_S *cd, const char *item_path);
+
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_media(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, char *filepath, int filetype, int nPage);
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);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_read_preview_message(MSG_COMPOSER_VIEW_DATA_S *cd);
+Eina_Bool msg_ui_composer_body_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd);
+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
index d48a08d..43f6c53 100755
--- a/composer/include/msg-ui-composer-bubble.h
+++ b/composer/include/msg-ui-composer-bubble.h
@@ -21,19 +21,16 @@
#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 <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
#include <libintl.h>
#include <bundle.h>
-#include <appcore-efl.h>
#include <Ecore.h>
#include <Elementary.h>
#include <ui-gadget-module.h>
+#include <aul.h>
#include <time.h>
#include "msg-ui-util.h"
@@ -45,17 +42,18 @@
#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_IMG_MAX_W (320)
+#define MSG_BUBBLE_IMG_MAX_H (320)
#define MSG_BUBBLE_CONTROLBAR_ITEM_NUM (4)
+#define MSG_BUBBLE_DELETE_NOTI_TIME (1.5)
+
typedef enum {
BUBBLE_NORMAL_VIEW = 0,
BUBBLE_EDIT_VIEW,
@@ -92,19 +90,25 @@ typedef enum {
} MsgBoxPackType;
typedef struct {
- MSG_MESSAGE_ID_T msgId;
+ msg_message_id_t msgId;
int msgType;
- MSG_STORAGE_ID_T storageId;
+ msg_storage_id_t storageId;
time_t *msgTime;
char displayDate[DEF_BUF_LEN_S];
- MSG_NETWORK_STATUS_T networkStatus;
+ char subject[DEF_BUF_LEN_S];
+ msg_network_status_t networkStatus;
bool bRead;
bool bProtected;
int direction;
+ int attachment_cnt;
+ char thumbNailPath[DEF_IMG_PATH_LEN + 1];
char msgText[DEF_MAX_MSG_TEXT_LEN+1];
Evas_Object *ly;
Evas_Object *entry;
+ Evas_Object *resend_button;
+ Evas_Object *del_button;
+ Evas_Object *progressbar;
Evas_Object *chk;
Eina_Bool isCheck;
@@ -116,6 +120,17 @@ typedef struct {
MsgBoxPackType pack_type;
}BUBBLE_PACK_INFO;
+typedef struct {
+ int contact_id;
+ char address[DEF_THREAD_ADDR_LEN+1];
+ char name[DEF_THREAD_NAME_LEN+1];
+}BUBBLE_ADDRESS_INFO;
+
+typedef struct {
+ int addr_cnt;
+ BUBBLE_ADDRESS_INFO addr_info[MAX_TO_ADDRESS_CNT];
+}BUBBLE_ADDRESS_LIST;
+
typedef struct _MSG_BUBBLE_DATA {
Evas_Object *layout_main;
Evas_Object *scrl;
@@ -126,9 +141,12 @@ typedef struct _MSG_BUBBLE_DATA {
BubbleViewMode viewmode;
BubbleUGState ug_state;
+ bool isRotate;
Evas_Object *parent_layout;
Evas_Object *bubble_layout;
+ Evas_Object *title_button;
+ Evas_Object *title_genlist;
Evas_Object *sel_all_ly;
Evas_Object *sel_all_box;
Evas_Object *noc_ly;
@@ -139,6 +157,7 @@ typedef struct _MSG_BUBBLE_DATA {
Evas_Object *select_info;
Evas_Object *selectioninfo_layout;
+ Evas_Object *deleted_info;
Eina_List *bubble_list;
Eina_List *realized_list;
@@ -147,6 +166,12 @@ typedef struct _MSG_BUBBLE_DATA {
Eina_Bool sel_all_checked;
+#ifdef _BUBBLE_FLICK_EVENT
+ Evas_Coord m_x;
+ Evas_Coord m_y;
+#endif
+ Elm_Genlist_Item_Class itc_title;
+
char *time_12h_ptn;
char *time_24h_ptn;
char *date_ptn;
@@ -163,16 +188,18 @@ typedef struct _MSG_BUBBLE_DATA {
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];
+ msg_handle_t msgHandle;
+ msg_thread_id_t threadId;
+ BUBBLE_ADDRESS_LIST addr_list;
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*/
+ bool isDraft;
+ bool title_optionheader_opened;
+ bool del_cancel;
int check_cnt;
int del_index;
@@ -181,34 +208,45 @@ typedef struct _MSG_BUBBLE_DATA {
/* FUNCTIONS */
-PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(MSG_HANDLE_T msgHandle, void *callback_data);
+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_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, service_h svc_handle);
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_resend_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id);
+void msg_ui_bubble_delete_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id);
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);
+void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_struct_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_list_append(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg);
+void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_struct_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_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_open_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data);
+void msg_ui_bubble_close_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data);
+Evas_Object *msg_ui_bubble_create_toolbar(void *user_data);
+void msg_ui_bubble_add_normal_toolbar_item(Evas_Object *toolbar, void *user_data);
+
+void msg_ui_bubble_msg_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t type, msg_id_list_s *pMsgIdList, void *user_param);
+void msg_ui_bubble_ctlbar_multi_del_cb(void *data, Evas_Object *obj, void *event_info);
+Evas_Object *msg_ui_bubble_toolbar_btn_create(Evas_Object *parent, char *icon_path, char *button_text);
+void msg_ui_bubble_option_header_delete_clicked_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_vcall_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_bubble_ctlbar_email_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);
@@ -218,25 +256,34 @@ void msg_ui_bubble_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_in
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);
+#ifdef _BUBBLE_FLICK_EVENT
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);
+#endif
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_anchor_menu_click_cb(void *data, Evas_Object *obj, void *event_info);
+
void msg_ui_bubble_launch_voice_call(const char *call_num);
+void msg_ui_bubble_launch_video_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_show_deleted_info(PMSG_BUBBLE_DATA pData);
void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData);
+unsigned char msg_ui_bubble_check_word_type(char *txt);
void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData);
void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData);
+bool msg_is_sms(int msg_type);
+bool msg_is_mms(int msg_type);
+
#endif
diff --git a/composer/include/msg-ui-composer-common.h b/composer/include/msg-ui-composer-common.h
index 9e0def0..be2052b 100755
--- a/composer/include/msg-ui-composer-common.h
+++ b/composer/include/msg-ui-composer-common.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_COMPOSER_COMMON_H__
#define __MSG_COMPOSER_COMMON_H__
@@ -21,10 +22,14 @@
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_COUNT_MAX,
+ COMPOSER_TICKERNOTI_DUP_RECP,
+ COMPOSER_TICKERNOTI_INVALID_RECP,
+ COMPOSER_TICKERNOTI_CHANGED_SMS,
+ COMPOSER_TICKERNOTI_CHANGED_MMS,
+ COMPOSER_TICKERNOTI_AUTO_SAVED,
+ COMPOSER_TICKERNOTI_NO_RECIPIENT,
+ COMPOSER_TICKERNOTI_MAXLENGHT_CHAR
} COMPOSER_TICKERNOTI_TYPE_E;
/*layout*/
@@ -33,11 +38,14 @@ Evas_Object *msg_ui_composer_load_edj(Evas_Object *parent, const char *edj_file,
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);
+Evas_Object *msg_ui_composer_toolbar_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);
+COMPOSER_RETURN_TYPE_E msg_composer_common_get_media_duration(const char *file_path, int *duration);
+COMPOSER_MEDIA_TYPE_E msg_composer_get_media_type(const char *a_pszfile_path);
void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
/*focus*/
@@ -47,16 +55,28 @@ 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);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_change_message_type(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_MSG_TYPE_E msg_type);
bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd);
void msg_ui_composer_common_play_vibration();
+COMPOSER_MSG_TYPE_E msg_ui_composer_check_message_type(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_message_type_check_and_change(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+COMPOSER_RETURN_TYPE_E msg_composer_common_get_thumbnail(MSG_COMPOSER_VIEW_DATA_S *cd, const char *src_file_path, char *thumb_file_path, int size_thumb_file_path);
+COMPOSER_RETURN_TYPE_E msg_composer_common_get_image_in_video(const char *video_file_path, char *image_file_path);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_common_get_file(MSG_COMPOSER_VIEW_DATA_S *cd, const char * src_file_path, char *dst_file_path, int size_dst_file_path);
+
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_composer_entry_filter_addimage(void *data, Evas_Object *entry, char **text);
void msg_ui_composer_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value);
+void msg_ui_composer_entry_imf_resize_cb(void * data, Ecore_IMF_Context *ctx, int value);
+
+int msg_ui_composer_get_keypad_height(Evas_Object *entry);
+void msg_ui_composer_change_body_scroll_size(MSG_COMPOSER_VIEW_DATA_S *cd, int keypad_height);
-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);
+int msg_ui_composer_get_font_size(int index, int type);
+void msg_ui_composer_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd);
-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
deleted file mode 100755
index d027c8c..0000000
--- a/composer/include/msg-ui-composer-core.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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
index a3211fa..1b3caef 100755
--- a/composer/include/msg-ui-composer-data.h
+++ b/composer/include/msg-ui-composer-data.h
@@ -14,16 +14,17 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_DATA_H_
#define __MSG_UI_COMPOSER_DATA_H_
/***********************
* includes
************************/
-#include <MsgTypes.h>
-#include <MsgMmsTypes.h>
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
-#include <appcore-efl.h>
#include <Elementary.h>
#include <X11/Xlib.h>
#include <glib-object.h>
@@ -33,6 +34,7 @@
#include <contacts-svc.h>
#include <assert.h>
+#include <time.h>
#include "msg-ui-util.h"
#include "msg-ui-composer-string.h"
@@ -50,6 +52,8 @@ typedef long long int64;
#endif
#define TO_FIELD_LABEL_SIZE_MAX 512
+#define COMPOSER_RECIPIENT_PORTRAIT_HEIGHT_MAX 150
+#define COMPOSER_RECIPIENT_LANDSCAPE_HEIGHT_MAX 150
#define COMPARE_STRING_NUM 8
#ifndef MAX_TO_ADDRESS_CNT
@@ -70,12 +74,17 @@ typedef long long int64;
#endif
#define COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX MAX_ADDRESS_VAL_LEN
+#define COMPOSER_SUBJECT_MAX_CHAR (40)
+#define COMPOSER_SUBJECT_MAX_BYTE (COMPOSER_SUBJECT_MAX_CHAR * 3)
-#define COMPOSER_TEXT_MAX_CHAR (1530)
+#define COMPOSER_MMS_TEXT_MAX_CHAR (2000)
+#define COMPOSER_MMS_TEXT_MAX_BYTE (COMPOSER_MMS_TEXT_MAX_CHAR * 3)
-#define COMPOSER_MAX_PAGE (2)
+#define COMPOSER_MMS_MAX_PAGE (20)
+#define COMPOSER_MMS_MAX_ATTACH_COUNT (10)
#define COMPOSER_FILEPATH_LEN_MAX (1024)
#define COMPOSER_FILENAME_LEN_MAX (256)
+#define COMPOSER_PAGE_DEFAULT_DURATION (5) //sec
#define COMPOSER_COMMON_EXT_MAX_LENGTH (7)
#define COMPOSER_COMMON_MIME_MAX_LEN (64)
@@ -88,14 +97,31 @@ typedef long long int64;
#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.
+/* 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
+#define MSGC_RESTRICT_MAX_IMG_W 640
+#define MSGC_RESTRICT_MAX_IMG_H 480
+
+#define MSGC_INDICATOR_H 50
+#define MSGC_NAVIBAR_TITLE_H 108
+#define MSGC_BODY_TOP_PADDING 4
+#define MSGC_BODY_BOTTOM_PADDING 20
+#define MSGC_BODY_PADDING (MSGC_BODY_TOP_PADDING + MSGC_BODY_BOTTOM_PADDING)
+
+#define MSGC_IMAGE_THUMB_WIDTH 132
+#define MSGC_IMAGE_THUMB_HEIGHT 132
+#define MSGC_SOUND_THUMB_WIDTH 48
+#define MSGC_SOUND_THUMB_HEIGHT 48
+
+#define MSGC_RECIPIENT_POPUP_W 620
+#define MSGC_RECIPIENT_POPUP_LIST_H 130
+#define MSGC_BODY_FONT_SIZE 32
/*********************
* enum types
@@ -127,12 +153,14 @@ typedef enum {
COMPOSER_RETURN_RECIPIENT_DUPLICATE = -16,
COMPOSER_RETURN_MSG_SIZE_OVER = -17,
COMPOSER_RETURN_RESIZE_IMAGE = -18,
- COMPOSER_RETURN_OVERSIZE_FILE = -19,
+ COMPOSER_RETURN_DRM_FORWARDLOCK = -19,
+ COMPOSER_RETURN_OVERSIZE_FILE = -20,
} COMPOSER_RETURN_TYPE_E;
typedef enum {
COMPOSER_MSG_TYPE_INVALID,
COMPOSER_MSG_TYPE_SMS,
+ COMPOSER_MSG_TYPE_MMS,
} COMPOSER_MSG_TYPE_E;
typedef enum {
@@ -145,6 +173,23 @@ typedef enum {
} COMPOSER_RECP_TYPE_E;
typedef enum {
+ COMPOSER_MEDIA_TYPE_UNKNOWN,
+ COMPOSER_MEDIA_TYPE_IMAGE,
+ COMPOSER_MEDIA_TYPE_VIDEO,
+ COMPOSER_MEDIA_TYPE_AUDIO,
+ COMPOSER_MEDIA_TYPE_TEXT,
+ COMPOSER_MEDIA_TYPE_ANIMATE,
+ COMPOSER_MEDIA_TYPE_DRM,
+ COMPOSER_MEDIA_TYPE_MAX = 0xff
+} COMPOSER_MEDIA_TYPE_E;
+
+typedef enum {
+ COMPOSER_REGION_ORDER_UNDETERMINDED = 0x00,
+ COMPOSER_REGION_ORDER_IMAGE_TOP,
+ COMPOSER_REGION_ORDER_TEXT_TOP,
+} COMPOSER_MMS_REGION_ORDER_E;
+
+typedef enum {
COMPOSER_STATE_TYPE_INVALID = 0,
COMPOSER_STATE_TYPE_CREATE,
COMPOSER_STATE_TYPE_RUNNING,
@@ -161,13 +206,22 @@ typedef enum {
COMPOSER_STATUS_POPUP_BUTTON_MAX,
} COMPOSER_POPUP_BUTTON_TYPE_E;
+enum {
+ COMPOSER_CREATION_MODE_RESTRICTED = 0,
+ COMPOSER_CREATION_MODE_WARNING,
+ COMPOSER_CREATION_MODE_FREE,
+ COMPOSER_CREATION_MODE_MAX,
+};
+
typedef enum {
COMPOSER_FOCUS_RECIPIENT = 0,
COMPOSER_FOCUS_BODY,
- COMPOSER_FOCUS_MAX,
+ COMPOSER_FOCUS_SUBJECT,
+ COMPOSER_FOCUS_DEFAULT,
} COMPOSER_FOCUS_E;
typedef enum {
+ COMPOSER_RECP_ADDR_NONE,
COMPOSER_RECP_ADDR_INVALID,
COMPOSER_RECP_ADDR_VALID_NUMBER,
COMPOSER_RECP_ADDR_VALID_EMAIL,
@@ -188,13 +242,61 @@ typedef enum {
COMPOSER_PREDICTSEARCH_END,
} COMPOSER_PREDICTSEARCH_STATE_E;
+typedef enum {
+ COMPOSER_ROTATE_UNKNOWN = 0,
+ COMPOSER_ROTATE_PORTRAIT = APP_DEVICE_ORIENTATION_0,
+ COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN = APP_DEVICE_ORIENTATION_180,
+ COMPOSER_ROTATE_LANDSCAPE = APP_DEVICE_ORIENTATION_270,
+ COMPOSER_ROTATE_LANDSCAPE_UPSIDEDOWN = APP_DEVICE_ORIENTATION_90,
+} COMPOSER_ROTATE_TYPE_E;
+
+typedef enum {
+ COMPOSER_EDIT_NONE,
+ COMPOSER_EDIT_RECIPIENT,
+ COMPOSER_EDIT_BODY,
+ COMPOSER_EDIT_RECIPIENT_AND_BODY,
+} COMPOSER_EDIT_STATE_E;
+
+enum {
+ COMPOSER_ADDR_TYPE_NUMBER,
+ COMPOSER_ADDR_TYPE_EMAIL
+};
+
+typedef enum {
+ COMPOSER_FONT_SIZE_NONE,
+ COMPOSER_SYSTEM_FONT_SIZE,
+ COMPOSER_MSG_FONT_SIZE
+} COMPOSER_FONT_SIZE_TYPE_E;
+
/******************************
* structures
*******************************/
+typedef struct _FONT_SIZE_S {
+ int sys_font_size;
+ int msg_font_size;
+ COMPOSER_FONT_SIZE_TYPE_E last_updated_setting;
+} FONT_SIZE_S;
+
+typedef struct {
+ char m_szextend[COMPOSER_COMMON_EXT_MAX_LENGTH + 1];
+ char m_szmime_type[COMPOSER_COMMON_MIME_MAX_LEN + 1];
+ COMPOSER_MEDIA_TYPE_E m_ncontent_type;
+} composer_mime_type_t;
+
+/*
+Used change number for contact info
+*/
+typedef struct _CONTACT_ITEM_S {
+ int index;
+ int type; /*COMPOSER_ADDR_TYPE_NUMBER:number, COMPOSER_ADDR_TYPE_EMAIL:email*/
+ int contact_type; /*number or email type of contact like Mobile, Home*/
+ char recipient[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
+} CONTACT_ITEM_S;
+
/*
Used MBE's data && PredictSearch
*/
-typedef struct _recipient_item_s {
+typedef struct _RECIPIENT_ITEM_S {
COMPOSER_RECP_ADDR_E type;
int index;
char recipient[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
@@ -206,15 +308,26 @@ typedef struct _recipient_s {
const char *name;
void *cd;
int mode;
+ int recipient_h;
+
Evas_Object *parent;
Evas_Object *bx_main;
Evas_Object *sc;
Evas_Object *ly_to;
Evas_Object *mbe;
Evas_Object *ly_bt;
+
+ Evas_Object *popup_selected;
+ Elm_Object_Item *sel_mbe_item;
+ RECIPIENT_ITEM_S *sel_r_item;
+
Evas_Object *popup_change_number;
+ Elm_Genlist_Item_Class change_number_itc;
Ecore_Idler *scroll_down_idler;
+
+ COMPOSER_RECP_ADDR_E type;
+ Ecore_Idler *notify_popup_idler;
} RECIPIENT_S;
typedef struct _predictsearch_s {
@@ -236,6 +349,25 @@ typedef struct _predictsearch_s {
int count;
} PREDICTSEARCH_S;
+typedef struct _subject_s {
+ Evas_Object *layout;
+ Evas_Object *entry;
+ Evas_Object *del_icon;
+} SUBJECT_S;
+
+typedef struct _MSG_COMPOSER_ATTACHITEM_S {
+ Evas_Object *layout;
+ char file_path[COMPOSER_FILEPATH_LEN_MAX + 1];
+ char file_name[COMPOSER_FILEPATH_LEN_MAX + 1];
+ int type;
+} MSG_COMPOSER_ATTACH_ITEM_S;
+
+typedef struct _MSG_COMPOSER_ATTACH_S {
+ int attachment_Cnt;
+ long long attachfileSize;
+ Eina_List *attachitem_list;
+} MSG_COMPOSER_ATTACH_S;
+
typedef struct _text_info {
COMPOSER_CHAR_ENCODE_E encode;
int char_count;
@@ -243,9 +375,24 @@ typedef struct _text_info {
typedef struct _MSG_COMPOSER_BODY_PAGE_S {
Evas_Object *layout;
+ Evas_Object *page_main_box;
+
+ Evas_Object *upper_layout;
Evas_Object *page_box;
+ Evas_Object *del_icon;
+
+ bool is_image_item;
+ bool isVideo;
+ Evas_Object *image_item;
+ char image_file_path[COMPOSER_FILEPATH_LEN_MAX + 1];
+
Evas_Object *entry;
text_info_s text_info;
+
+ bool is_sound_item;
+ Evas_Object *sound_item;
+ char sound_file_path[COMPOSER_FILEPATH_LEN_MAX + 1];
+ int sound_duration;
} MSG_COMPOSER_BODY_PAGE_S;
typedef struct _MSG_COMPOSER_BODY_S {
@@ -257,51 +404,74 @@ typedef struct _MSG_COMPOSER_BODY_S {
typedef struct _MSG_COMPOSER_DATA_S {
/*ug data & callback*/
- struct ui_gadget *ug;
+ ui_gadget_h ug;
+ ui_gadget_h loaded_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_ROTATE_TYPE_E rotate;
COMPOSER_MSG_TYPE_E msg_type;
- bundle *msg_bundle;
+
bool isLoad;
bool isFullview;
bool isMsgInternal;
+ bool isAppControl;
bool sending_success;
bool send_button_clicked;
+ bool add_button_clicked;
bool add_menu_clicked;
- bool destroy_req;
bool loaded_aul;
+ bool isSubject;
bool send_button_is_show;
+ bool isclosed; /* backkey is pressed */
+ bool loading_draft; /* draft msg loading status */
- int current_theme;
int current_edit_entry;
int first_focus;
- char recipient_number[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1];
+
+ int window_w;
+ int window_h;
+
+ int ly_body_h;
char *working_path;
+ /* setting data */
+ FONT_SIZE_S font_size;
+ int mms_max_size;
+ int page_duration;
+
/*message handler*/
- MSG_HANDLE_T msg_handle;
+ msg_handle_t msg_handle;
/*module data*/
+ SUBJECT_S sub_data;
MSG_COMPOSER_BODY_S body_data;
+ MSG_COMPOSER_ATTACH_S attach_data;
- RECIPIENT_ITEM_S recipient_frame;
-
+ Eina_List *recipient_list; /* recipient list for bubble composer */
RECIPIENT_S *recipient;
PREDICTSEARCH_S *predictsearch;
+ Eina_List *attachlist;
+ Eina_List *iter_list;
+ int attach_index; /*current added attach index*/
/*Evas Object*/
Evas_Object *main_window;
Evas_Object *base;
Evas_Object *navi_bar;
+ Evas_Object *navi_title_layout;
+ Evas_Object *title_menu_layout;
+ Evas_Object *more_btn;
Evas_Object *back_btn;
- Elm_Object_Item *toollbar_item_top[4];
+ Evas_Object *toolbar_top;
+ Elm_Object_Item *toolbar_item_top[4];
+ Evas_Object *toolbar_btn[4];
Elm_Object_Item *navi_it;
+ Eina_Bool navi_optionheader_opened;
Evas_Object *content_layout;
Evas_Object *bg;
@@ -309,17 +479,33 @@ typedef struct _MSG_COMPOSER_DATA_S {
Evas_Object *ly_recipient;
Evas_Object *conform;
Evas_Object *popup_conform;
+
+ Evas_Object *add_button;
Evas_Object *send_button;
Evas_Object *body_scroll;
Evas_Object *body_box;
+
+ Evas_Object *ly_attach_main;
+
+ Evas_Object *add_popup;
Evas_Object *progress_popup;
Evas_Object *popup_end;
+ Evas_Object *custom_popup;
Eina_List *popup_list;
- Evas_Object *noti;
+ Evas_Object *page_duration_entry;
+
Evas_Object *last_focus_entry;
- MSG_BUBBLE_DATA *bubble_data; // For bubble data structure
+
+ Ecore_Idler *last_focus_idler;
+
+ Ecore_Thread *attach_thread;
+ Ecore_Job *job_thread_end;
+
+ Elm_Theme *th;
+
+ 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
index 0729ec8..1515748 100755
--- a/composer/include/msg-ui-composer-external.h
+++ b/composer/include/msg-ui-composer-external.h
@@ -14,27 +14,50 @@
* 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 GALLERY_TOKEN ";"
+#define MYFILE_TOKEN "?"
+
+#define TXT_UG_NAME_CALLLOG "logcheck-efl"
#define TXT_UG_NAME_CONTACT "contacts-list-efl"
+#define TXT_UG_NAME_MYFILE "myfile-efl"
+#define TXT_UG_NAME_MSG_VIEWER "msg-viewer-efl"
+#define TXT_UG_NAME_MEMO "memo-efl"
+#define TXT_UG_NAME_GALLERY "gallery-efl"
+#define TXT_UG_NAME_CALENDAR "calendar-efl"
+#define TXT_UG_NAME_LOG "phonelog-efl"
+
typedef enum {
+ COMPOSER_EXT_TYPE_GALLERY,
+ COMPOSER_EXT_TYPE_MYFILE,
+ COMPOSER_EXT_TYPE_VOICEREC,
COMPOSER_EXT_TYPE_LOG,
+ COMPOSER_EXT_TYPE_CONTACT,
COMPOSER_EXT_TYPE_CONTACTLIST,
+ COMPOSER_EXT_TYPE_NAMECARD,
+ COMPOSER_EXT_TYPE_CALENDAR,
+ COMPOSER_EXT_TYPE_MEMO,
+ COMPOSER_EXT_TYPE_CAMERA,
+ COMPOSER_EXT_TYPE_CAMCORDER,
+ COMPOSER_EXT_TYPE_MSGVIEWER,
+ COMPOSER_EXT_TYPE_COMMON,
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);
+ui_gadget_h msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id);
+ui_gadget_h msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int type, const char *str);
+ui_gadget_h msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle);
+ui_gadget_h msg_ui_composer_launch_email_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle);
+ui_gadget_h msg_ui_composer_launch_viewer_create(void *data, service_h svc_handle);
#endif/*__MSG_COMPOSER_EXTERNAL_H__*/
diff --git a/composer/include/msg-ui-composer-main.h b/composer/include/msg-ui-composer-main.h
index 20f0017..77c0174 100755
--- a/composer/include/msg-ui-composer-main.h
+++ b/composer/include/msg-ui-composer-main.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_MAIN_H_
#define __MSG_UI_COMPOSER_MAIN_H_
@@ -22,15 +23,19 @@
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_start(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_rotate(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_ROTATE_TYPE_E rotate);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle);
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);
+void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle);
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);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, 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);
+void msg_ui_composer_bubble_del_all(void *data, service_h svc_handle);
+void msg_ui_composer_toolbar_top_item_change(MSG_COMPOSER_VIEW_DATA_S *cd, bool smstype);
+void msg_ui_composer_toolbar_top_update(MSG_COMPOSER_VIEW_DATA_S *cd);
+Evas_Object *msg_ui_composer_create_navi_title_bar(void *data);
+void msg_ui_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
index 9da224a..77e1bfe 100755
--- a/composer/include/msg-ui-composer-message-data.h
+++ b/composer/include/msg-ui-composer-message-data.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef _MSG_UI_COMPOSER_MESSAGE_DATA_H_
#define _MSG_UI_COMPOSER_MESSAGE_DATA_H_
@@ -27,17 +28,51 @@
* structures
*
*************** *******/
+
+typedef struct _MSG_COMPOSER_MMS_PAGE_S {
+ bool isText;
+ char body_text[COMPOSER_MMS_TEXT_MAX_BYTE + 1];
+
+ bool isImage;
+ bool isVideo;
+ char image_file_path[DEF_BUF_LEN_L];
+
+ bool isSound;
+ char sound_file_path[DEF_BUF_LEN_L];
+
+ int page_duration;
+
+} MSG_COMP_MMS_PAGE_S;
+
+typedef struct _MSG_COMPOSER_ATTACHMENT_DATA_S {
+ char filepath[COMPOSER_FILEPATH_LEN_MAX + 1];
+ char filename[COMPOSER_FILENAME_LEN_MAX + 1];
+ int filetype;
+} MSG_COMP_ATTACH_DATA_S;
+
+typedef struct _MSG_COMPOSER_MMS_DATA_S {
+ bool isTextTop;
+ bool isSubject;
+ char subject[COMPOSER_SUBJECT_MAX_BYTE + 1];
+ int page_count;
+ MSG_COMP_MMS_PAGE_S pagelist[COMPOSER_MMS_MAX_PAGE];
+ int attach_count;
+ MSG_COMP_ATTACH_DATA_S attachlist[COMPOSER_MMS_MAX_ATTACH_COUNT];
+} MSG_COMP_MMS_DATA_S;
+
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;
+ msg_struct_t msgInfo;
GSList *recp_list;
COMPOSER_MSG_TYPE_E msg_type;
MSG_COMP_SMS_DATA_S sms_data;
+ MSG_COMP_MMS_DATA_S mms_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
index 7c7feeb..720c019 100755
--- a/composer/include/msg-ui-composer-message.h
+++ b/composer/include/msg-ui-composer-message.h
@@ -14,23 +14,25 @@
* 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,
-};
+typedef struct _COMPOSER_SMIL_REGION_S_ {
+ char szID[MAX_SMIL_REGION_ID + 1];
+ int left;
+ int top;
+ int width;
+ int height;
+ int bgcolor;
+} MSG_COMP_REGION_S;
/*****************************
* structures
@@ -44,18 +46,33 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message();
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);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_address(char *number);
+GSList *msg_ui_composer_message_get_address();
/* SMS*/
COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_sms_body(char *body_text);
+/* MMS - attachment*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_attachments(const char *filepath, int filetype);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_attach_count(int attach_count);
+
+/* MMS - subject*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_subject(char *subject, int length);
+
+/* MMS - body*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_page_count(int page_count);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_is_text_top(bool isTextTop);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_text(const char *text, int nPage);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_media(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type, int nPage, int duration);
+
/* 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_save_message(msg_handle_t msg_handle);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_data(MSG_COMPOSER_VIEW_DATA_S *cd);
-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_message_make_and_send(msg_handle_t msg_handle, msg_thread_id_t *tid);
-COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt, int type);
+msg_struct_t msg_ui_composer_message_make_preview(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);
#endif /*__MSG_UI_COMPOSER_MSG_H_*/
diff --git a/composer/include/msg-ui-composer-pageduration.h b/composer/include/msg-ui-composer-pageduration.h
new file mode 100755
index 0000000..33feeda
--- /dev/null
+++ b/composer/include/msg-ui-composer-pageduration.h
@@ -0,0 +1,33 @@
+/*
+ * 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_PAGEDURATION_H_
+#define __MSG_UI_COMPOSER_PAGEDURATION_H_
+
+#include "msg-ui-composer-data.h"
+
+typedef enum {
+ MSGC_PAGE_DURATION_CUSTOM = 0,
+ MSGC_PAGE_DURATION_2 = 2,
+ MSGC_PAGE_DURATION_5 = 5,
+ MSGC_PAGE_DURATION_10 = 10,
+} MSGC_PAGE_DURATION_E;
+
+void msg_ui_composer_pageduration_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd);
+/* get pageduration value from setting */
+int msg_ui_composer_pageduration_value_get(MSG_COMPOSER_VIEW_DATA_S *cd);
+#endif/*__MSG_UI_COMPOSER_PAGEDURATION_H_*/
diff --git a/composer/include/msg-ui-composer-popup.h b/composer/include/msg-ui-composer-popup.h
index b2be418..09de63e 100755
--- a/composer/include/msg-ui-composer-popup.h
+++ b/composer/include/msg-ui-composer-popup.h
@@ -14,34 +14,33 @@
* 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>
+#include <status.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);
+void msg_ui_composer_status_noti_show(const char *msg);
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_status_btn_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg, int time, const char *btn_text);
+
+Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *list, const char *style);
+Evas_Object *msg_ui_composer_custom_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *parent, Evas_Object *layout);
+
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);
+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
index 6367fed..001a253 100755
--- a/composer/include/msg-ui-composer-predictsearch.h
+++ b/composer/include/msg-ui-composer-predictsearch.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_PREDICTSEARCH_H_
#define __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
index 5a5f9be..7680822 100755
--- a/composer/include/msg-ui-composer-recipient-callback.h
+++ b/composer/include/msg-ui-composer-recipient-callback.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_
#define __MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_
@@ -28,8 +29,10 @@ void msg_ui_recipient_multibuttonentry_focused_cb(void *data, Evas_Object *obj,
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_clicked_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);
+void msg_ui_recipient_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+
#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
index abc32d8..6d9e2fd 100755
--- a/composer/include/msg-ui-composer-recipient.h
+++ b/composer/include/msg-ui-composer-recipient.h
@@ -14,12 +14,12 @@
* 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"
@@ -37,16 +37,24 @@ 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_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd);
Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient);
+void msg_ui_composer_recipient_select_popup_create(void *data);
+void msg_ui_composer_recipient_selected_delete(MSG_COMPOSER_VIEW_DATA_S *cd);
+void msg_ui_composer_recipient_selected_edit(MSG_COMPOSER_VIEW_DATA_S *cd);
+RECIPIENT_ITEM_S *msg_ui_composer_recipient_selected_item_data_get(MSG_COMPOSER_VIEW_DATA_S *cd);
+
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);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, msg_thread_id_t thread_id);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_add_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, const char *recipient);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_clear_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd);
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);
-
-
+COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_addr_type_get(RECIPIENT_S *rd);
+void msg_ui_composer_recipient_addr_type_set(RECIPIENT_S *rd, COMPOSER_RECP_ADDR_E type);
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
index 1294582..fc9f43c 100755
--- a/composer/include/msg-ui-composer-res.h
+++ b/composer/include/msg-ui-composer-res.h
@@ -14,12 +14,22 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_RES_H_
#define __MSG_UI_COMPOSER_RES_H_
+/***********************
+ * includes
+ ************************/
+#include <msg-ui-image-resource.h>
+
/************************
* defines
************************/
+#ifndef PKGNAME
+#define PKGNAME "org.tizen.message"
+#endif
+
#ifndef PREFIX
#define PREFIX "/opt/apps/" PKGNAME
#endif
@@ -41,43 +51,26 @@
#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_MAIN "composer/body/page_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_ATTACHMENT_MAIN "composer/attachment/main"
+#define MSGC_EDJ_GRP_ATTACHMENT_ITEM "composer/attachment/item"
#define MSGC_EDJ_GRP_CONTENT_LAYOUT "composer/content/full"
#define MSGC_EDJ_GRP_BUBBLE_LAYOUT "composer/content/bubble"
+#define MSGC_EDJ_GRP_BUBBLE_MEDIA_LAYOUT "composer/content/bubble/media"
-/*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
index 115311a..06da61b 100755
--- a/composer/include/msg-ui-composer-string.h
+++ b/composer/include/msg-ui-composer-string.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_UI_COMPOSER_STRING_H_
#define __MSG_UI_COMPOSER_STRING_H_
@@ -30,9 +31,6 @@
#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")
@@ -40,7 +38,6 @@
#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")
@@ -58,7 +55,6 @@
#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*/
@@ -67,6 +63,7 @@
#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_NOTI_CHANGE_MMS _MSGSTR("IDS_MSGC_POP_CHANGED_TO_MMS")
#define MSGC_STR_PAGE_DURATION _MSGSTR("IDS_MSGF_BODY_SETUP_PAGE_DURATION")
#define MSGC_STR_SECONDS _SYSSTR("IDS_COM_BODY_SECONDS_LC")
@@ -75,6 +72,4 @@
#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/include/msg-ui-composer-subject.h b/composer/include/msg-ui-composer-subject.h
new file mode 100755
index 0000000..9a92620
--- /dev/null
+++ b/composer/include/msg-ui-composer-subject.h
@@ -0,0 +1,32 @@
+/*
+ * 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_SUBJECT_H_
+#define __MSG_UI_COMPOSER_SUBJECT_H_
+
+/* includes*/
+#include "msg-ui-composer-data.h"
+
+/* function prototypes*/
+Evas_Object *msg_ui_composer_create_subject_layout(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_add_subject(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_clear(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_read_subject(MSG_COMPOSER_VIEW_DATA_S *cd);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_set_loaded_data(void *data, const char *subject);
+COMPOSER_RETURN_TYPE_E msg_ui_composer_remove_subject_layout(MSG_COMPOSER_VIEW_DATA_S *cd);
+
+#endif /*__MSG_UI_COMPOSER_SUBJECT_H_*/
diff --git a/composer/src/bubble/msg-ui-composer-bubble-callback.c b/composer/src/bubble/msg-ui-composer-bubble-callback.c
index 6a7e003..1d9d9b4 100755
--- a/composer/src/bubble/msg-ui-composer-bubble-callback.c
+++ b/composer/src/bubble/msg-ui-composer-bubble-callback.c
@@ -19,6 +19,13 @@
#include "msg-ui-composer-main.h"
#include "msg-ui-composer-recipient.h"
#include "msg-ui-composer-external.h"
+#include "msg-ui-composer-common.h"
+
+#define BUBBLE_TITLE_MENU_GENLIST_MAX_LINE 3
+#define BUBBLE_TITLE_MENU_GENLIST_1LINE_HEIGHT 129
+#define BUBBLE_RETURN_DELETE_CANCEL 1000
+
+Elm_Genlist_Item_Class itc_popup = {0,}; /** itc for list style popup */
Evas_Coord g_mouse_down_x = 0, g_mouse_down_y = 0;
@@ -85,13 +92,17 @@ static void _bubble_add_edit_controlbar(PMSG_BUBBLE_DATA pData)
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_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data;
+ Evas_Object *toolbar = msg_ui_bubble_create_toolbar(pData);
+ elm_object_item_part_content_set(cd->navi_it, "controlbar", toolbar);
+
+ pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(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_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(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);
+ pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(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);
@@ -100,6 +111,24 @@ static void _bubble_add_edit_controlbar(PMSG_BUBBLE_DATA pData)
D_LEAVE;
}
+static void _bubble_change_edit_mode_title(PMSG_BUBBLE_DATA pData)
+{
+ D_ENTER;
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data;
+
+ Evas_Object *content = elm_object_part_content_get(cd->navi_title_layout, "title_btn");
+
+ if (content)
+ evas_object_hide(content);
+
+ elm_object_part_content_unset(cd->navi_title_layout, "title_btn");
+ elm_object_part_text_set(cd->navi_title_layout, "title_text", dgettext("sys_string", "IDS_COM_SK_DELETE"));
+ D_LEAVE;
+}
+
static void _sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
{
MSG_UI_ENTER();
@@ -155,13 +184,13 @@ static void _delete_finish(PMSG_BUBBLE_DATA pData)
if (pData->popup)
_progress_popup_delete(pData);
- if (pData->del_index + 1 == pData->bubble_count)
+ 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);
}
+ _bubble_show_normal_mode(pData->callback_data);
+ msg_ui_bubble_list_load(pData);
+
pData->del_thread = NULL;
}
@@ -180,17 +209,37 @@ static void _del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_
elm_object_text_set(pData->progresslabel, buf);
elm_progressbar_value_set(pData->progressbar, (double) (pData->del_index + 1) / pData->check_cnt);
}
+ } else if (*ret == BUBBLE_RETURN_DELETE_CANCEL) {
+ if (pData->del_cancel == true) {
+ _delete_finish(pData);
+
+ if (ret)
+ free(ret);
+ pData->del_cancel = false;
+ return;
+ }
} else {
if (pData->popup)
_progress_popup_delete(pData);
msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+
+ _bubble_show_normal_mode(pData->callback_data);
+ msg_ui_bubble_list_load(pData);
+
+ pData->del_thread = NULL;
+
+ if (ret)
+ free(ret);
+ return;
}
- if (*ret != MSG_SUCCESS || pData->del_index + 1 == pData->check_cnt)
+ if (pData->del_index + 1 == pData->check_cnt) {
+ msg_ui_bubble_show_deleted_info(pData);
_delete_finish(pData);
- else
+ } else {
pData->del_index++;
+ }
if (ret)
free(ret);
@@ -207,6 +256,12 @@ static void _del_thread_fn(void *data, Ecore_Thread *thread)
EINA_LIST_FOREACH(pData->chk_list, l, item_data) {
int *ret = calloc(1, sizeof(int));
+ if (pData->del_cancel == true) {
+ *ret = BUBBLE_RETURN_DELETE_CANCEL;
+ ecore_thread_feedback(thread, (void *)ret);
+ return;
+ }
+
if (item_data) {
D_MSG("del_msg_id = [%d]", item_data->msgId);
*ret = msg_delete_message(pData->msgHandle, item_data->msgId);
@@ -228,15 +283,18 @@ static void _del_all_item(PMSG_BUBBLE_DATA pData)
{
D_ENTER;
- MSG_ERROR_T err = MSG_SUCCESS;
+ 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"));
+ msg_ui_bubble_show_deleted_info(pData);
} else {
msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+
+ _bubble_show_normal_mode(pData->callback_data);
+ msg_ui_bubble_list_load(pData);
}
D_LEAVE;
@@ -249,20 +307,346 @@ void msg_ui_bubble_change_normal_navi_control(PMSG_BUBBLE_DATA pData)
MSG_COMPOSER_VIEW_DATA_S *cd = pData->callback_data;
- msg_ui_bubble_add_normal_control_item(pData);
+ elm_object_item_signal_emit(cd->navi_it, "elm,state,controlbar,close", "");
+ Evas_Object *toolbar = elm_object_item_part_content_unset(cd->navi_it, "controlbar");
+
+ if (toolbar)
+ evas_object_del(toolbar);
if (cd->back_btn) {
evas_object_show(cd->back_btn);
- elm_object_item_part_content_set(cd->navi_it, "prev_btn", cd->back_btn);
+ elm_object_part_content_set(cd->navi_title_layout, "prev_btn", cd->back_btn);
}
+ if (cd->more_btn) {
+ evas_object_show(cd->more_btn);
+ elm_object_part_content_set(cd->navi_title_layout, "more_btn", cd->more_btn);
+ }
+
+ /* change title */
+ Evas_Object *content = elm_object_part_content_get(cd->navi_title_layout, "title_btn");
+ if (content) {
+ elm_object_part_content_unset(cd->navi_title_layout, "title_btn");
+ evas_object_del(content);
+ }
+
+ elm_object_part_text_set(cd->navi_title_layout, "title_text", "");
+
+ if (pData->title_button)
+ elm_object_part_content_set(cd->navi_title_layout, "title_btn", pData->title_button);
+
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)
+void msg_ui_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 __msg_ui_bubble_list_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ BUBBLE_ADDRESS_INFO *addr_info = (BUBBLE_ADDRESS_INFO *)data;
+ PMSG_BUBBLE_DATA bubble_data = evas_object_data_get(obj, "bubble_data");
+
+ if (!bubble_data) {
+ D_EMSG("[ERROR] bubble_data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+
+ if (!cd) {
+ D_EMSG("[ERROR] composer data is NULL");
+ return;
+ }
+
+ if (bubble_data->popup) {
+ evas_object_del(bubble_data->popup);
+ bubble_data->popup = NULL;
+ }
+
+ const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
+
+ if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
+ msg_ui_bubble_launch_voice_call(addr_info->address);
+ } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
+ msg_ui_bubble_launch_video_call(addr_info->address);
+ } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
+ msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, addr_info->address);
+ } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
+ msg_ui_composer_launch_contact_detail_ug(cd, addr_info->contact_id);
+ } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, addr_info->address);
+
+ msg_ui_composer_launch_email_create(cd, svc_handle);
+ if (!cd->loaded_ug)
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN"));
+
+ service_destroy(svc_handle);
+ }
+ }
+
+ D_LEAVE;
+}
+
+static char *__msg_ui_bubble_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ PMSG_BUBBLE_DATA bubble_data = evas_object_data_get(obj, "bubble_data");
+ BUBBLE_ADDRESS_INFO *addr_info = (BUBBLE_ADDRESS_INFO *)data;
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !bubble_data || !addr_info, NULL);
+
+ if (g_strcmp0(part, "elm.text.1") == 0) {
+ if (addr_info->contact_id > 0 && addr_info->name)
+ return strdup(addr_info->name);
+ else if (addr_info->address)
+ return strdup (addr_info->address);
+ else
+ return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ } else if (g_strcmp0(part, "elm.text.2") == 0) {
+ if (addr_info->address)
+ return strdup(addr_info->address);
+ else
+ return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ }
+
+ return NULL;
+}
+
+
+static Evas_Object * __msg_ui_bubble_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ // Currently, this function do nothing, caller_id concept is not determined
+ // TODO: add callerId
+ return NULL;
+}
+
+static void __msg_ui_bubble_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+ Elm_Object_Item *item = NULL;
+ BUBBLE_ADDRESS_INFO *addr_info = NULL;
+
+ Evas_Object *popup = NULL;
+ Evas_Object *list = NULL;
+ Evas_Object *btn_close = NULL;
+ unsigned char num_type;
+
+ item = (Elm_Object_Item *) event_info;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is NULL or Item is not Message item\n");
+
+ addr_info = (BUBBLE_ADDRESS_INFO *) elm_object_item_data_get(item);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addr_info == NULL, "item_data is NULL");
+
+ elm_genlist_item_selected_set(item, 0);
+
+
+ if (bubble_data->popup) {
+ evas_object_del(bubble_data->popup);
+ bubble_data->popup = NULL;
+ }
+
+ num_type = msg_ui_bubble_check_word_type(addr_info->address);
+
+ /** create popup */
+ popup = elm_popup_add(cd->navi_bar);
+ elm_object_style_set(popup, "min_menustyle");
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ btn_close = elm_button_add(popup);
+ elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
+ elm_object_part_content_set(popup, "button1", btn_close);
+ evas_object_smart_callback_add(btn_close, "clicked", msg_ui_popup_close_clicked_cb, bubble_data);
+
+ list = elm_list_add(popup);
+ elm_list_mode_set(list, ELM_LIST_EXPAND);
+
+ evas_object_data_set(list, "bubble_data", bubble_data);
+
+ if (num_type == WORD_TYPE_NUM) {
+ elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info);
+ elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info);
+ } else if (num_type == WORD_TYPE_EMAIL) {
+ elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info);
+ } else {
+ D_MSG("invalid_numtype");
+ }
+
+ if (addr_info->contact_id > 0) {
+ elm_object_part_text_set(popup, "title,text", addr_info->name);
+ elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info);
+ } else {
+ elm_object_part_text_set(popup, "title,text", addr_info->address);
+ elm_list_item_append(list, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info);
+ }
+
+ evas_object_size_hint_max_set(list, -1, 512 * elm_scale_get());
+
+ elm_list_go(list);
+ elm_object_content_set(popup, list);
+ evas_object_show(popup);
+
+ bubble_data->popup = popup;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_bubble_open_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data)
+{
+ D_ENTER;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !bubble_data, "[ERROR] bubble_data is NULL !!");
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !cd, "[ERROR] cd is NULL !!");
+ int i = 0;
+
+ /** 2. create box -- for setting min. size of genlist.*/
+ Evas_Object *box = elm_box_add(cd->content_layout);
+ 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_part_content_set(cd->content_layout, "swl.bubble.titlemenu", box);
+
+ /** 3. create genlist */
+ Evas_Object *genlist = elm_genlist_add(box);
+ 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);
+ elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+ evas_object_data_set(genlist, "bubble_data", bubble_data);
+ evas_object_show(genlist);
+
+ elm_box_pack_end(box, genlist);
+
+ /** 3.1 set genlist styles */
+ bubble_data->itc_title.item_style = "2text.1icon.2";
+ bubble_data->itc_title.func.text_get = __msg_ui_bubble_gl_text_get;
+ bubble_data->itc_title.func.content_get = __msg_ui_bubble_gl_content_get;
+ bubble_data->itc_title.func.state_get = NULL;
+ bubble_data->itc_title.func.del = NULL;
+
+ /** 3.2 genlist list load */
+ for (i = 0; i < bubble_data->addr_list.addr_cnt; i++)
+ elm_genlist_item_append(genlist, &(bubble_data->itc_title), &bubble_data->addr_list.addr_info[i], NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_bubble_gl_sel, bubble_data);
+
+
+ bubble_data->title_genlist = genlist;
+ cd->title_menu_layout = box;
+
+ /** emit signal for changing state of swl.bubble.titlemenu to open */
+ elm_object_signal_emit(cd->title_menu_layout, "elm,state,title_menu,open", "");
+
+ /** Determine genlist size to show - it shows maxmum 3 rows */
+ if (bubble_data->addr_list.addr_cnt >= BUBBLE_TITLE_MENU_GENLIST_MAX_LINE)
+ evas_object_size_hint_min_set(box, 0, BUBBLE_TITLE_MENU_GENLIST_1LINE_HEIGHT * BUBBLE_TITLE_MENU_GENLIST_MAX_LINE);
+ else
+ evas_object_size_hint_min_set(box, 0, BUBBLE_TITLE_MENU_GENLIST_1LINE_HEIGHT * bubble_data->addr_list.addr_cnt);
+
+ D_LEAVE;
+}
+
+void msg_ui_bubble_close_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data)
+{
+ D_ENTER;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !bubble_data, "[ERROR] bubble_data is NULL !!");
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !cd, "[ERROR] cd is NULL !!");
+
+ elm_object_signal_emit(cd->title_menu_layout, "elm,state,title_menu,close", "");
+
+ Evas_Object *layout = elm_object_part_content_unset(cd->content_layout, "swl.bubble.titlemenu");
+ if (layout)
+ evas_object_del(layout);
+
+ D_LEAVE;
+}
+
+
+void msg_ui_bubble_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data) {
+ D_EMSG("data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = data;
+ PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+
+ if (bubble_data->title_optionheader_opened) {
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,hide", "");
+
+ if (cd->title_menu_layout)
+ msg_ui_bubble_close_title_menu_genlist(bubble_data);
+ else
+ elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", "");
+ } else {
+ Evas_Object *content = NULL;
+
+ if (cd->navi_optionheader_opened) {
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", "");
+ cd->navi_optionheader_opened = EINA_FALSE;
+ }
+
+ content = elm_object_item_part_content_unset(cd->navi_it, "optionheader");
+ if (content) {
+ if (content == bubble_data->toolbar) {
+ int i = 0;
+ for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) {
+ if (bubble_data->toolbar_item[i] != NULL) {
+ elm_object_item_del(bubble_data->toolbar_item[i]);
+ bubble_data->toolbar_item[i] = NULL;
+ }
+ }
+ }
+ evas_object_del(content);
+ }
+
+ if (bubble_data->addr_list.addr_cnt == 1) {
+ Evas_Object *toolbar = msg_ui_bubble_create_toolbar(bubble_data);
+
+ msg_ui_bubble_add_normal_toolbar_item(toolbar, bubble_data);
+ elm_object_item_part_content_set(cd->navi_it, "optionheader", toolbar);
+
+ bubble_data->toolbar = toolbar;
+
+ elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,open", "");
+
+ } else if (bubble_data->addr_list.addr_cnt > 1) {
+ msg_ui_bubble_open_title_menu_genlist(bubble_data);
+ } else {
+ D_EMSG("invalid address count [%d]", bubble_data->addr_list.addr_cnt);
+ return;
+ }
+
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,show", "");
+ }
+
+ bubble_data->title_optionheader_opened = !bubble_data->title_optionheader_opened;
+
+ D_LEAVE;
+}
+
+void msg_ui_bubble_msg_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t type, msg_id_list_s *pMsgIdList, void *user_param)
{
D_ENTER;
@@ -283,18 +667,24 @@ void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE
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;
+ msg_struct_t msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ msg_error_t err = MSG_SUCCESS;
- err = msg_get_message(BubbleData->msgHandle, pMsgIdList->msgIdList[i], msg, &sendOpt);
+ err = msg_get_message(BubbleData->msgHandle, pMsgIdList->msgIdList[i], msg, sendOpt);
if (err != MSG_SUCCESS) {
- msg_release_message(&msg);
+ msg_release_struct(&msg);
+ msg_release_struct(&sendOpt);
return;
}
- if (BubbleData->threadId == msg_get_ith_thread_id(msg, 0)) {
+ int folder_id = 0;
+ int thread_id = 0;
+ msg_get_int_value(msg, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
+ msg_get_int_value(msg, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+
+ if (BubbleData->threadId == thread_id && folder_id != MSG_SPAMBOX_ID) {
switch (type) {
case MSG_STORAGE_CHANGE_INSERT :
msg_ui_bubble_list_append(BubbleData, msg);
@@ -309,13 +699,65 @@ void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE
}
}
- msg_release_message(&msg);
+ msg_release_struct(&msg);
+ msg_release_struct(&sendOpt);
}
D_LEAVE;
}
-void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info)
+void msg_ui_bubble_option_header_delete_clicked_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 = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data);
+
+ bubble_data->viewmode = BUBBLE_EDIT_VIEW;
+ bubble_data->check_cnt = 0;
+ bubble_data->del_index = 0;
+
+ elm_object_part_content_unset(cd->navi_title_layout, "prev_btn");
+ elm_object_part_content_unset(cd->navi_title_layout, "more_btn");
+
+ if (cd->back_btn)
+ evas_object_hide(cd->back_btn);
+
+ if (cd->more_btn)
+ evas_object_hide(cd->more_btn);
+
+
+ Eina_List *l;
+ PMSG_APP_CONV_DATA_S item_data = NULL;
+ EINA_LIST_FOREACH(bubble_data->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 *)bubble_data);
+ 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_change_edit_mode_title(bubble_data);
+ _bubble_add_edit_controlbar(bubble_data);
+ _bubble_add_navi_select_all_ly(bubble_data);
+}
+
+void msg_ui_bubble_ctlbar_multi_del_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
@@ -328,7 +770,8 @@ void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info
pData->check_cnt = 0;
pData->del_index = 0;
- elm_object_item_part_content_unset(cd->navi_it, "prev_btn");
+ elm_object_item_part_content_unset(cd->navi_it, "title_right_btn");
+
if (cd->back_btn) {
evas_object_hide(cd->back_btn);
}
@@ -359,6 +802,30 @@ void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info
_bubble_add_navi_select_all_ly(pData);
}
+void msg_ui_bubble_ctlbar_email_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);
+
+ if (pData->addr_list.addr_cnt == 1) {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, pData->addr_list.addr_info[0].address);
+ msg_ui_composer_launch_email_create(cd, svc_handle);
+ if (!cd->loaded_ug)
+ msg_ui_bubble_show_notify(pData, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN"));
+ service_destroy(svc_handle);
+ }
+ }
+}
+
void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
@@ -367,7 +834,20 @@ void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info
PMSG_BUBBLE_DATA pData = cd->bubble_data;
MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
- msg_ui_bubble_launch_voice_call(pData->threadAddr);
+ if (pData->addr_list.addr_cnt == 1)
+ msg_ui_bubble_launch_voice_call(pData->addr_list.addr_info[0].address);
+}
+
+void msg_ui_bubble_ctlbar_vcall_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);
+
+ if (pData->addr_list.addr_cnt == 1)
+ msg_ui_bubble_launch_video_call(pData->addr_list.addr_info[0].address);
}
void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info)
@@ -379,7 +859,8 @@ void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *
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);
+ if (pData->addr_list.addr_cnt == 1)
+ msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, pData->addr_list.addr_info[0].address);
}
void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *event_info)
@@ -392,7 +873,8 @@ void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *
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);
+ if (pData->addr_list.addr_cnt == 1)
+ msg_ui_composer_launch_contact_detail_ug(cd, pData->addr_list.addr_info[0].contact_id);
}
void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_info)
@@ -409,12 +891,16 @@ void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_in
pData->popup = NULL;
}
- if (pData->sel_all_checked)
+ bool isDraft = msg_ui_composer_common_is_send_possible(cd);
+
+ if (pData->sel_all_checked && isDraft == false) {
+ pData->bubble_count = 0;
_del_all_item(pData);
- else {
+ } 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);
}
+
}
@@ -513,6 +999,167 @@ void msg_ui_bubble_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, voi
evas_object_event_callback_add(item_data->ly, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_item_mouse_up_cb, (const void*)item_data);
}
+#ifdef _BUBBLE_FLICK_EVENT
+void msg_ui_bubble_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !event_info);
+
+ Evas_Coord x, y, w, h;
+ Evas_Event_Mouse_Down *ev = event_info;
+ int width = 0;
+ int rotate = 0;
+ Evas_Coord start_x;
+ Evas_Coord start_y;
+ Evas_Coord end_x;
+ Evas_Coord end_y;
+ int move_x = 0;
+ int move_y = 0;
+
+ 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_geometry_get(bubble_data->bubble_layout, &x, &y, &w, &h);
+
+ rotate = elm_win_rotation_get(cd->main_window);
+ if (rotate == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode");
+ start_x = bubble_data->m_x;
+ end_x = ev->canvas.x;
+ start_y = bubble_data->m_y;
+ end_y = ev->canvas.y;
+ width = w-x;
+ } else if (rotate == 180) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode");
+ start_x = ev->canvas.x;
+ end_x = bubble_data->m_x;
+ start_y = bubble_data->m_y;
+ end_y = ev->canvas.y;
+ width = w-x;
+ } else if (rotate == 90) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode");
+ start_x = ev->canvas.y;
+ end_x = bubble_data->m_y;
+ start_y = bubble_data->m_x;
+ end_y = ev->canvas.x;
+ width = h-y;
+ } else if (rotate== 270) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode");
+ start_x = bubble_data->m_y;
+ end_x = ev->canvas.y;
+ start_y = bubble_data->m_x;
+ end_y = ev->canvas.x;
+ width = h-y;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid rotation value");
+ evas_object_event_callback_del(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_layout_mouse_up_cb);
+ return;
+ }
+
+ move_x = abs(start_x - end_x);
+ move_y = abs(start_y - end_y);
+
+ if (move_x > move_y) {
+ if (move_x > (width / 3)) { // It should be moved over 1/3 of the screen width to show next/previous converstaions.
+ int row = 0;
+ int selected = 0;
+ msg_struct_list_s peerList = {0,};
+ msg_struct_t sortRule = NULL;
+ msg_struct_list_s addrList = {0,};
+
+ sortRule = msg_create_struct(MSG_STRUCT_SORT_RULE);
+ msg_set_int_value(sortRule, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE);
+ msg_set_bool_value(sortRule, MSG_SORT_RULE_ACSCEND_BOOL, false);
+
+ msg_get_thread_view_list(cd->msg_handle, sortRule, &peerList);
+ msg_release_struct(&sortRule);
+
+ for (row=0; row < peerList.nCount; row++) {
+ int thread_id = 0;
+ msg_get_int_value(peerList.msg_struct_info[row], MSG_THREAD_ID_INT, &thread_id);
+
+ if (bubble_data->threadId == thread_id) {
+ msg_ui_bubble_init_bubble_list(bubble_data);
+ if (start_x > end_x) // show next
+ selected = row+1 < peerList.nCount ? row+1 : 0;
+ else // show previous
+ selected = row-1 < 0 ? peerList.nCount-1 : row-1;
+
+ int selecte_thread_id = 0;
+ msg_get_int_value(peerList.msg_struct_info[selected], MSG_THREAD_ID_INT, &selecte_thread_id);
+ bubble_data->threadId = selecte_thread_id;
+
+ msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList);
+
+ bubble_data->addr_list.addr_cnt = addrList.nCount;
+ int i = 0;
+
+ /* clear recipient_list of bubble composer */
+ msg_ui_composer_recipient_clear_recipient_list(cd);
+
+ for (i=0; i < addrList.nCount; i++) {
+ int contact_id = 0;
+
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN);
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
+
+ if (contact_id > 0) {
+ bubble_data->addr_list.addr_info[i].contact_id = contact_id;
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN);
+ } else {
+ bubble_data->addr_list.addr_info[i].contact_id = 0;
+ }
+
+ /* set recipient_list for bubble composer */
+ msg_ui_composer_recipient_add_recipient_list(cd, addrList.addrInfo[i].addressVal);
+ }
+
+ // bubble list update
+ msg_ui_bubble_list_load(bubble_data);
+ msg_ui_composer_navi_title_set((void *)cd);
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ char buf[DEF_BUF_LEN_S] = {0,};
+ snprintf(buf, DEF_BUF_LEN_L, "%d", bubble_data->threadId);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf);
+
+ ug_send_result(cd->ug, svc_handle);
+
+ service_destroy(svc_handle);
+ }
+
+ msg_release_list_struct(&addrList);
+
+ break;
+ }
+ }
+ msg_release_list_struct(&peerList);
+ }
+ }
+ evas_object_event_callback_del(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_layout_mouse_up_cb);
+}
+
+void msg_ui_bubble_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+
+ Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
+
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+ return;
+
+ bubble_data->m_x = ev->canvas.x;
+ bubble_data->m_y = ev->canvas.y;
+
+ evas_object_event_callback_add(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_layout_mouse_up_cb, (const void*)bubble_data);
+}
+#endif
+
void msg_ui_bubble_list_checked_cb(void *data, Evas_Object *obj, void *event_info)
{
MSG_UI_ENTER();
@@ -599,3 +1246,60 @@ void msg_ui_bubble_scroll_drag_start_cb(void *data, Evas_Object *obj, void *even
D_LEAVE;
}
+void msg_ui_bubble_anchor_menu_click_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 bubble_data = cd->bubble_data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data);
+
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ elm_list_item_selected_set(item, 0);
+
+ const char *label = elm_object_item_text_get(item);
+ const char *title = elm_object_part_text_get(bubble_data->popup, "title,text");
+
+ if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
+ msg_ui_bubble_launch_voice_call(title);
+ } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_SEND_MESSAGE")) == 0) {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, title);
+ msg_ui_composer_launch_composer_create(cd, svc_handle);
+ if (!cd->loaded_ug)
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN"));
+
+ service_destroy(svc_handle);
+ }
+ } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
+ msg_ui_bubble_launch_video_call(title);
+ } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
+ msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, title);
+ } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
+ msg_ui_composer_launch_contact_detail_ug(cd, bubble_data->addr_list.addr_info[0].contact_id);
+ } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, title);
+ msg_ui_composer_launch_email_create(cd, svc_handle);
+ if (!cd->loaded_ug)
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN"));
+
+ service_destroy(svc_handle);
+ }
+ }
+
+ if (bubble_data->popup) {
+ evas_object_del(bubble_data->popup);
+ bubble_data->popup = NULL;
+ }
+
+ D_LEAVE;
+}
+
diff --git a/composer/src/bubble/msg-ui-composer-bubble-list.c b/composer/src/bubble/msg-ui-composer-bubble-list.c
index dfaf67d..1e77f38 100755
--- a/composer/src/bubble/msg-ui-composer-bubble-list.c
+++ b/composer/src/bubble/msg-ui-composer-bubble-list.c
@@ -18,6 +18,9 @@
#include "appsvc.h"
#include "msg-ui-composer-external.h"
#include "msg-ui-composer-main.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-common.h"
+#include "syspopup_caller.h"
bool g_isVisible = false;
bool g_isFirstLoading = true;
@@ -27,42 +30,6 @@ bool g_isFirstLoading = true;
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)
@@ -90,99 +57,79 @@ static char *__msg_ui_get_display_time(time_t *msg_t)
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);
+ /* Subject */
+ if ((conv_data->msgType == MSG_TYPE_MMS || conv_data->msgType == MSG_TYPE_MMS_NOTI)) {
+ if (conv_data->subject[0] != '\0') {
+ char *subject = NULL;
+ eina_strbuf_append(msg_data, "<color=#050288FF>");
- if (isMsgText == false)
- isMsgText = true;
- while (token_words) {
- char *tmp_str = elm_entry_utf8_to_markup(token_words);
+ subject = elm_entry_utf8_to_markup(conv_data->subject);
+ eina_strbuf_append(msg_data, subject);
- 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)
+ if (subject)
+ free(subject);
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;
+ /* Message Text */
+ eina_strbuf_append(msg_data, "<color=#4D3A17FF>");
+ char *tmp_str = elm_entry_utf8_to_markup(conv_data->msgText);
+ eina_strbuf_append(msg_data, tmp_str);
+ if (tmp_str) {
+ isMsgText = true;
+ free(tmp_str);
+ }
- prev_data = (PMSG_APP_CONV_DATA_S)eina_list_nth(prev_list, 0);
+ if (conv_data->msgType == MSG_TYPE_MMS) {
- 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 (conv_data->attachment_cnt > 0) {
+ eina_strbuf_append(msg_data, "<font_size=24>");
+ eina_strbuf_append_printf(msg_data, "<br><item size=32x32 vsize=full href=file://%s>%d</item>", MSG_BUBBLE_ATTACH_ICON, conv_data->attachment_cnt);
+ }
- if (display_time)
- free(display_time);
- }
+ if (conv_data->thumbNailPath[0] != '\0') {
+ Evas_Object *tmp_obj = NULL;
+
+ int w = 0;
+ int h = 0;
+ double rate = 0.0;
+
+ //FIXME :: It should be fixed at elm_image.c
+ tmp_obj = evas_object_image_filled_add(evas_object_evas_get(conv_data->entry));
+ evas_object_image_file_set(tmp_obj, conv_data->thumbNailPath, NULL);
+ evas_object_image_size_get(tmp_obj, &w, &h);
+ if (tmp_obj)
+ evas_object_del(tmp_obj);
+
+ if (w >= h) {
+ rate = MSG_BUBBLE_IMG_MAX_W / (double) w;
+ w = MSG_BUBBLE_IMG_MAX_W;
+ h = h * rate;
+ } else {
+ rate = MSG_BUBBLE_IMG_MAX_H / (double)h;
+ w = h * rate;
+ h = MSG_BUBBLE_IMG_MAX_H;
+ }
- 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 (isMsgText)
+ eina_strbuf_append(msg_data, "<br>");
- 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"));
- }
+ eina_strbuf_append(msg_data, "<font_size=8>");
+ eina_strbuf_append_printf(msg_data, "<br><a href=image.%d>", conv_data->msgId);
+ eina_strbuf_append_printf(msg_data, "<item size=%dx%d vsize=full href=file://%s><br></item></a>", w, h, conv_data->thumbNailPath);
+ /** <br> between <item>, </item> is needed, if it is not exist, it couldn't use anchor */
+ }
+ } else if (conv_data->msgType == MSG_TYPE_SMS && conv_data->storageId == MSG_STORAGE_SIM) {
+ if (isMsgText) {
+ eina_strbuf_append(msg_data, "<font_size=24>");
+ eina_strbuf_append(msg_data, "<br>");
+ }
- 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));
@@ -213,6 +160,8 @@ static void __add_bubble_item(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S
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);
+ elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
conv_data->entry = entry;
conv_data->ly = layout;
@@ -265,20 +214,89 @@ static void __add_bubble_item(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S
}
}
-
-static void __msg_url_clicked_cb(char *content)
+static void __msg_image_clicked_cb(PMSG_BUBBLE_DATA bubble_data, char *msgID)
{
D_ENTER;
- MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, content == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !msgID);
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, bubble_data->viewmode != BUBBLE_NORMAL_VIEW, "Not Normal Mode!");
+
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t msg_t = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ msg_struct_t mms_data = NULL;
+ msg_list_handle_t page_list = NULL;
+ msg_struct_t mms_page = NULL;
+ msg_struct_t mms_media = NULL;
+ char filepath[DEF_BUF_LEN_L+1] = {0,};
+
+ int msg_id = atoi(msgID);
+ int i = 0;
+ int j = 0;
+ int pageCnt = 0;
+
+ err = msg_get_message(bubble_data->msgHandle, msg_id, msg_t, sendOpt);
+ if (err != MSG_SUCCESS) {
+ D_MSG("err = [%d]", err);
+ msg_release_struct(&msg_t);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ mms_data = msg_create_struct(MSG_STRUCT_MMS);
+ err = msg_get_mms_struct(msg_t, mms_data);
+ if (err != MSG_SUCCESS) {
+ D_MSG("err = [%d]", err);
+ goto OUTSIDE_OF_LOOP;
+ }
+
+ msg_get_list_handle(mms_data, MSG_MMS_PAGE_LIST_HND, (void **)&page_list);
+ pageCnt = msg_list_length(page_list);
+
+ for (i = 0 ; i < pageCnt; i++) {
+ mms_page = (msg_struct_t)msg_list_nth_data(page_list, i);
+ msg_list_handle_t medialist = NULL;
+ int mediaCnt = 0;
+
+ msg_get_list_handle(mms_page, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist);
+ mediaCnt = msg_list_length(medialist);
- D_MSG("url=%s", content);
+ for (j = 0; j < mediaCnt; j++) {
+ int media_type;
+ mms_media = (msg_struct_t)msg_list_nth_data(medialist, i);
+
+ msg_get_int_value(mms_media, MSG_MMS_MEDIA_TYPE_INT, &media_type);
+
+ if (media_type == MMS_SMIL_MEDIA_IMG) {
+ goto OUTSIDE_OF_LOOP;
+ }
+ }
+ }
- bundle *b = bundle_create();
- appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
- appsvc_set_uri(b, content);
- appsvc_run_service(b, 0, NULL, NULL);
+OUTSIDE_OF_LOOP:
+ if (mms_media)
+ msg_get_str_value(mms_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, sizeof(filepath)-1);
+
+ if (mms_media && filepath[0] != '\0') {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
+ service_set_uri(svc_handle, filepath);
+
+ if (service_send_launch_request(svc_handle, NULL, NULL) < 0)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request is failed");
+
+ service_destroy(svc_handle);
+ }
+ }
+
+ msg_release_struct(&mms_data);
+ msg_release_struct(&msg_t);
+ msg_release_struct(&sendOpt);
- bundle_free(b);
D_LEAVE;
}
@@ -289,9 +307,9 @@ static void __msg_install_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id)
D_MSG("syncml message operation, msg id = [%d]", msg_id);
- MSG_ERROR_T err = MSG_SUCCESS;
+ msg_error_t err = MSG_SUCCESS;
- err = msg_syncml_message_operation(bubble_data->msgHandle, (MSG_MESSAGE_ID_T) msg_id);
+ 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.");
@@ -302,49 +320,62 @@ 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;
+ msg_struct_t failed_msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ msg_error_t err = MSG_SUCCESS;
+ int msg_type = MSG_TYPE_INVALID;
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);
+ err = msg_get_message(bubble_data->msgHandle, msg_id, failed_msg, sendOpt);
if (err != MSG_SUCCESS) {
D_MSG("msg_get_message is failed.");
+ msg_release_struct(&sendOpt);
+ msg_release_struct(&failed_msg);
return EINA_FALSE;
}
- MSG_REQUEST_S req = { 0, failed_msg, sendOpt };
+ msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO);
+ msg_set_struct_handle(req, MSG_REQUEST_MESSAGE_HND, failed_msg);
+ msg_set_struct_handle(req, MSG_REQUEST_SENDOPT_HND, sendOpt);
- if (msg_is_sms(failed_msg))
- err = msg_sms_send_message(bubble_data->msgHandle, &req);
+ msg_get_int_value(failed_msg, MSG_MESSAGE_TYPE_INT, &msg_type);
+
+ if (msg_is_sms(msg_type))
+ err = msg_sms_send_message(bubble_data->msgHandle, req);
+ else
+ err = msg_mms_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);
+ msg_release_struct(&failed_msg);
+ msg_release_struct(&sendOpt);
+ msg_release_struct(&req);
bubble_data->resend_idler = NULL;
return EINA_FALSE;
}
-static void __msg_resend_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id)
+void msg_ui_bubble_resend_msg(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;
+ 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);
+ elm_object_signal_emit(conv_data->ly, "elm,state,contents,disabled", "elm");
break;
}
}
@@ -356,6 +387,69 @@ static void __msg_resend_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id)
D_LEAVE;
}
+static Eina_Bool __retrieve_idler_cb(void *data)
+{
+ PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data();
+
+ msg_error_t err = MSG_SUCCESS;
+ int msg_id = (int)data;
+ msg_struct_t retrieve_msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ D_MSG("Retrieve mms message, msg id = [%d]", msg_id);
+
+ err = msg_get_message(bubble_data->msgHandle, msg_id, retrieve_msg, sendOpt);
+ if (err != MSG_SUCCESS) {
+ D_MSG("msg_get_message is failed.");
+ return EINA_FALSE;
+ }
+
+ msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO);
+ msg_set_struct_handle(req, MSG_REQUEST_MESSAGE_HND, retrieve_msg);
+ msg_set_struct_handle(req, MSG_REQUEST_SENDOPT_HND, sendOpt);
+
+ err = msg_mms_retrieve_message(bubble_data->msgHandle, req);
+
+ if (err != MSG_SUCCESS) {
+ D_MSG("msg_mms_retrieve_message is failed.");
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_RETRIEVING_FAILED"));
+ }
+
+ msg_release_struct(&retrieve_msg);
+ msg_release_struct(&sendOpt);
+ msg_release_struct(&req);
+
+ bubble_data->retrieve_idler = NULL;
+
+ return EINA_FALSE;
+}
+
+static void __msg_retrieve_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 && msg_id == conv_data->msgId) {
+ Evas_Object *retrieve_btn = elm_object_part_content_get(conv_data->entry, "elm.swallow.end");
+
+ if (retrieve_btn)
+ elm_object_disabled_set(retrieve_btn, EINA_TRUE);
+
+ conv_data->networkStatus = MSG_NETWORK_RETRIEVING;
+ msg_ui_bubble_fill_bubble_contents(bubble_data, conv_data);
+ break;
+ }
+ }
+
+ if (!bubble_data->retrieve_idler)
+ bubble_data->retrieve_idler = ecore_idler_add(__retrieve_idler_cb, (void *)msg_id);
+
+ D_LEAVE;
+}
static void __popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
@@ -380,6 +474,10 @@ static void __anchor_click_cb(void *data, Evas_Object *obj, void *event_info)
if(bubble_data->viewmode != BUBBLE_NORMAL_VIEW)
return;
+ /* Avoiding conflict long_press_menu popup */
+ if (bubble_data->popup)
+ return;
+
char *token = NULL, *tok_r = NULL;
char type[DEF_BUF_LEN] = { 0, };
@@ -392,13 +490,8 @@ static void __anchor_click_cb(void *data, Evas_Object *obj, void *event_info)
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));
- }
+ if (g_strcmp0(token, "image") == 0)
+ __msg_image_clicked_cb(bubble_data, tok_r);
D_LEAVE;
}
@@ -421,9 +514,34 @@ static void __msg_copy_clicked_cb(void *data, Evas_Object *obj, void *event_info
return;
}
- char *text = elm_entry_markup_to_utf8(elm_entry_entry_get(conv_data->entry));
+ const char *origin_text = elm_entry_entry_get(conv_data->entry);
+ char *text_temp = NULL;
+ char *text = NULL;
+
+ if (origin_text) {
+ text_temp = strdup(origin_text);
+ const char *startTag = NULL;
+ if (text_temp) {
+ startTag = strstr(text_temp, "<item");
+ if (startTag != NULL) {
+ int offset = (int)(startTag-text_temp);
+ text_temp[offset] = '\0';
+ } else {
+ }
+ text = elm_entry_markup_to_utf8(text_temp);
+ g_free(text_temp);
+ } else {
+ D_EMSG("text_temp is NULL (strdup error)");
+ return;
+ }
+ }
if (text) {
+ const char *startTag = strstr(text, "<item");
+ if (startTag != NULL) {
+ int offset = (int)(startTag-text);
+ text[offset] = '\0';
+ }
elm_cnp_selection_set(conv_data->entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, text, strlen(text));
g_free(text);
}
@@ -438,7 +556,7 @@ static void __msg_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event
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;
+ msg_message_id_t msg_id;
int err;
if (bubble_data->popup) {
@@ -451,8 +569,9 @@ static void __msg_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event
return;
}
- /** remove thread, if only one bubble exist */
- if (bubble_data->bubble_count == 1) {
+ bool isDraft = msg_ui_composer_common_is_send_possible((MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data);
+
+ if (bubble_data->bubble_count == 1 && isDraft == false) {
bubble_data->bubble_count = 0;
err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId);
} else {
@@ -464,7 +583,7 @@ static void __msg_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event
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"));
+ msg_ui_bubble_show_deleted_info(bubble_data);
}
return;
@@ -544,31 +663,81 @@ static void __msg_forward_clicked_cb(void *data, Evas_Object *obj, void *event_i
}
char buf[DEF_BUF_LEN_S] = { 0, };
- bundle *b = NULL;
- b = bundle_create();
- if (b) {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
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);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FORWARD, buf);
+ msg_ui_composer_launch_composer_create(cd, svc_handle);
+ service_destroy(svc_handle);
+ }
+ D_LEAVE;
+}
+
+static void __msg_move_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");
+
+ if (bubble_data->popup) {
+ evas_object_del(bubble_data->popup);
+ bubble_data->popup = NULL;
+ }
+
+ if (!conv_data) {
+ D_EMSG("conv_data is NULL");
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE"));
+ return;
+ }
+
+ msg_error_t err = MSG_SUCCESS;
+
+ if (conv_data->msgType == MSG_TYPE_SMS) {
+ if (conv_data->storageId == MSG_STORAGE_PHONE) {
+ err = msg_move_msg_to_storage(bubble_data->msgHandle, conv_data->msgId, MSG_STORAGE_SIM);
+ } else if (conv_data->storageId == MSG_STORAGE_SIM) {
+ err = msg_move_msg_to_storage(bubble_data->msgHandle, conv_data->msgId, MSG_STORAGE_PHONE);
+ } else {
+ D_EMSG("invalid storage id [%d]", conv_data->storageId);
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE"));
+ return;
+ }
+ } else {
+ D_EMSG("invalid msg_type [%d]", conv_data->msgType);
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE"));
+ return;
+ }
+
+ if (err == MSG_SUCCESS) {
+ msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_MOVED"));
+ msg_ui_bubble_list_load(bubble_data);
+ } else {
+ msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE"));
}
D_LEAVE;
}
+
static void __longpressed_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;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !cd);
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");
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !conv_data);
/** create popup */
popup = elm_popup_add(cd->main_window);
@@ -581,22 +750,10 @@ static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info)
/** 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);
+ if (bubble_data->threadName[0] != '\0')
+ snprintf(title, DEF_THREAD_ADDR_LEN, "%s: %s", bubble_data->threadName, conv_data->msgText);
+ else
+ snprintf(title, DEF_THREAD_ADDR_LEN, "%s: %s", dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"), conv_data->msgText);
/** create menu list */
list = elm_list_add(cd->main_window);
@@ -609,6 +766,14 @@ static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info)
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);
+ if (conv_data->msgType == COMPOSER_MSG_TYPE_SMS) {
+ if (conv_data->storageId == MSG_STORAGE_PHONE)
+ elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_MOVE_TO_SIM"), NULL, NULL, __msg_move_clicked_cb, bubble_data);
+ else if (conv_data->storageId == MSG_STORAGE_SIM)
+ elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_MOVE_TO_PHONE"), NULL, NULL, __msg_move_clicked_cb, bubble_data);
+
+ }
+
elm_list_go(list);
elm_object_part_text_set(popup,"title,text",title);
@@ -627,40 +792,49 @@ static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info)
}
-static void __set_msg_data_by_conv_data(PMSG_APP_CONV_DATA_S conv_data, msg_message_t msgInfo)
+static void __set_msg_data_by_conv_data(PMSG_APP_CONV_DATA_S conv_data, msg_struct_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);
+ msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, (int *)(&conv_data->msgId));
+ msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &conv_data->msgType);
+ msg_get_int_value(msgInfo, MSG_MESSAGE_STORAGE_ID_INT, (int *)(&conv_data->storageId));
if (conv_data->msgTime == NULL)
conv_data->msgTime = (time_t *) calloc(1, sizeof(time_t));
if (conv_data->msgTime) {
+ PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data();
+
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);
+ msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, (int *)conv_data->msgTime);
+ msg_date = msg_common_get_display_date(bubble_data->locale, bubble_data->date_ptn, 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_get_int_value(msgInfo, MSG_MESSAGE_NETWORK_STATUS_INT, (int *)(&conv_data->networkStatus));
+ msg_get_bool_value(msgInfo, MSG_MESSAGE_READ_BOOL, &conv_data->bRead);
+ msg_get_bool_value(msgInfo, MSG_MESSAGE_PROTECTED_BOOL, &conv_data->bProtected);
+ msg_get_int_value(msgInfo, MSG_MESSAGE_DIRECTION_INT, &conv_data->direction);
- msg_body = msg_sms_get_message_body(msgInfo);
+ bzero(conv_data->thumbNailPath, sizeof(conv_data->thumbNailPath));
+ msg_get_str_value(msgInfo, MSG_MESSAGE_THUMBNAIL_PATH_STR, conv_data->thumbNailPath, DEF_IMG_PATH_LEN);
- bzero(conv_data->msgText, sizeof(conv_data->msgText));
+ bzero(conv_data->subject, sizeof(conv_data->subject));
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, conv_data->subject, DEF_BUF_LEN_S);
- if (msg_body)
- strncpy(conv_data->msgText, msg_body, DEF_MAX_MSG_TEXT_LEN);
+ if (conv_data->msgType == MSG_TYPE_MMS) {
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, conv_data->msgText, DEF_MAX_MSG_TEXT_LEN); /** get body text */
+ msg_get_int_value(msgInfo, MSG_MESSAGE_ATTACH_COUNT_INT, &conv_data->attachment_cnt); /** get attachment count */
+ } else if (conv_data->msgType == MSG_TYPE_MMS_NOTI) {
+ bzero(conv_data->msgText, sizeof(conv_data->msgText));
+ } else {
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, conv_data->msgText, DEF_MAX_MSG_TEXT_LEN);
+ }
}
static int __calc_scroller_geometry(PMSG_BUBBLE_DATA bubble_data)
@@ -690,13 +864,232 @@ static Eina_Bool __unfreeze_scroller_cb(void *data)
return ECORE_CALLBACK_CANCEL;
}
-void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data)
+void __msg_resend_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+ PMSG_APP_CONV_DATA_S item_data = NULL;
+
+ item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+
+ msg_ui_bubble_resend_msg(bubble_data, item_data->msgId);
+
+ D_LEAVE;
+}
+
+void __msg_install_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+ PMSG_APP_CONV_DATA_S item_data = NULL;
+
+ item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+
+ __msg_install_clicked_cb(bubble_data, item_data->msgId);
+
+ D_LEAVE;
+}
+
+void __msg_retrieve_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+ PMSG_APP_CONV_DATA_S item_data = NULL;
+
+ item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+
+ __msg_retrieve_clicked_cb(bubble_data, item_data->msgId);
+
+ D_LEAVE;
+}
+
+void __msg_more_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
- if (!bubble_data || !item_data) return;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, bubble_data->viewmode != BUBBLE_NORMAL_VIEW);
+
+
+ PMSG_APP_CONV_DATA_S item_data = NULL;
+ item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data");
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !item_data);
+
+ int BatteryStatus;
+
+ vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &BatteryStatus);
+ D_MSG("Battery status = [%d]", BatteryStatus);
+
+ if (BatteryStatus == VCONFKEY_SYSMAN_BAT_POWER_OFF) {
+ msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"));
+ } else {
+ service_h svc_handle;
+ char msgId[DEF_BUF_LEN_S] = {0,};
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ snprintf(msgId, DEF_BUF_LEN_S, "%d", item_data->msgId);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, msgId);
+ msg_ui_composer_launch_viewer_create(bubble_data->callback_data, svc_handle);
+ service_destroy(svc_handle);
+ }
+ }
+}
+void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data)
+{
+ D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, !bubble_data || !item_data);
+ char time_status_str[DEF_BUF_LEN + DEF_BUF_LEN_S + 1] = {0, };
+ char *time_str = NULL;
__msg_bubble_add_content(bubble_data, item_data);
+
+ if (item_data->msgType == MSG_TYPE_MMS) {
+ Evas_Object *prev_obj = NULL;
+ Evas_Object *media_layout = elm_layout_add(item_data->entry);
+
+ elm_layout_file_set(media_layout, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_BUBBLE_MEDIA_LAYOUT);
+
+ prev_obj = elm_object_part_content_get(item_data->entry, "elm.swallow.end");
+ if (prev_obj) {
+ elm_object_part_content_unset(item_data->entry, "elm.swallow.end");
+ evas_object_del(prev_obj);
+ }
+
+ if (item_data->networkStatus == MSG_NETWORK_SEND_SUCCESS || item_data->networkStatus == MSG_NETWORK_SEND_FAIL || item_data->networkStatus == MSG_NETWORK_RETRIEVE_SUCCESS) {
+ /** add more button */
+ Evas_Object *more_btn = elm_button_add(media_layout);
+ elm_object_style_set(more_btn, "reveal");
+ evas_object_data_set(more_btn, "conv_data", item_data);
+ evas_object_smart_callback_add(more_btn, "clicked", __msg_more_btn_clicked_cb, bubble_data);
+
+ elm_object_part_content_set(media_layout, "bubble.swallow.more", more_btn);
+
+ evas_object_show(more_btn);
+ }
+
+ evas_object_show(media_layout);
+ elm_object_part_content_set(item_data->entry, "elm.swallow.end", media_layout);
+ } else if (item_data->msgType == MSG_TYPE_MMS_NOTI && item_data->networkStatus != MSG_NETWORK_RETRIEVE_SUCCESS && item_data->networkStatus != MSG_NETWORK_RETRIEVING) {
+ Evas_Object *prev_obj = NULL;
+ Evas_Object *retrieve_btn = NULL;
+ prev_obj = elm_object_part_content_get(item_data->entry, "elm.swallow.end");
+ if (prev_obj) {
+ elm_object_part_content_unset(item_data->entry, "elm.swallow.end");
+ evas_object_del(prev_obj);
+ }
+
+ retrieve_btn = elm_button_add(item_data->entry);
+ elm_object_text_set(retrieve_btn, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_RETRIEVE"));
+ evas_object_data_set(retrieve_btn, "conv_data", item_data);
+
+ evas_object_smart_callback_add(retrieve_btn, "clicked", __msg_retrieve_btn_clicked_cb, bubble_data);
+
+ elm_object_part_content_set(item_data->entry, "elm.swallow.end", retrieve_btn);
+ } else if (item_data->msgType == MSG_TYPE_SMS_SYNCML) {
+ Evas_Object *prev_obj = NULL;
+ Evas_Object *install_btn = NULL;
+ prev_obj = elm_object_part_content_get(item_data->entry, "elm.swallow.end");
+ if (prev_obj) {
+ elm_object_part_content_unset(item_data->entry, "elm.swallow.end");
+ evas_object_del(prev_obj);
+ }
+
+ install_btn = elm_button_add(item_data->entry);
+ elm_object_text_set(install_btn, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_INSTALL"));
+ evas_object_data_set(install_btn, "conv_data", item_data);
+
+ evas_object_smart_callback_add(install_btn, "clicked", __msg_install_btn_clicked_cb, bubble_data);
+
+ elm_object_part_content_set(item_data->entry, "elm.swallow.end", install_btn);
+ }
+
+ if (item_data->direction == MSG_DIRECTION_TYPE_MO && item_data->networkStatus == MSG_NETWORK_SEND_FAIL) {
+ /** create & show resend button */
+ Evas_Object *resend_btn = elm_button_add(item_data->ly);
+ elm_object_style_set(resend_btn, "send");
+ elm_object_part_content_set(item_data->ly, "elm.swallow.icon2", resend_btn);
+
+ evas_object_data_set(resend_btn, "conv_data", item_data);
+ evas_object_smart_callback_add(resend_btn, "clicked", __msg_resend_btn_clicked_cb, bubble_data);
+
+ /** create & show delete button */
+ Evas_Object *del_btn = elm_button_add(item_data->ly);
+ elm_object_style_set(del_btn, "cancel");
+ elm_object_part_content_set(item_data->ly, "elm.swallow.icon1", del_btn);
+
+ evas_object_data_set(del_btn, "conv_data", item_data);
+ evas_object_smart_callback_add(del_btn, "clicked", __msg_delete_clicked_cb, bubble_data);
+
+ /** elm.swallow.icon1 & elm.swallow.icon2 will be shown only when state is "content_on" */
+ /** "elm,state,contents,enabled" signal make bubble state to "content_on" */
+ elm_object_signal_emit(item_data->ly, "elm,state,contents,enabled", "elm");
+
+ evas_object_show(resend_btn);
+ evas_object_show(del_btn);
+
+ item_data->del_button = del_btn;
+ item_data->resend_button = resend_btn;
+ }
+
+ /** Network status (Sending, Retrieving); */
+ switch (item_data->networkStatus) {
+ case MSG_NETWORK_SEND_FAIL:
+ case MSG_NETWORK_RETRIEVE_FAIL:
+ /** elm.text.status */
+ strncpy(time_status_str, dgettext("sys_string", "IDS_COM_POP_FAILED"), sizeof(time_status_str)-1);
+ break;
+ case MSG_NETWORK_SENDING:
+ case MSG_NETWORK_RETRIEVING:
+ /** Add progress icon */
+ if (item_data->progressbar) {
+ evas_object_del(item_data->progressbar);
+ item_data->progressbar = NULL;
+ }
+
+ item_data->progressbar = elm_progressbar_add(item_data->entry);
+ elm_object_style_set(item_data->progressbar, "list_process_small");
+ evas_object_show(item_data->progressbar);
+ elm_progressbar_pulse(item_data->progressbar, EINA_TRUE);
+ elm_object_part_content_set(item_data->entry, "elm.swallow.icon1", item_data->progressbar);
+
+ elm_object_signal_emit(item_data->entry, "elm,state,text,status,disabled", "elm");
+ elm_object_signal_emit(item_data->entry, "elm,state,content,status,enabled", "elm");
+
+
+ break;
+ default:
+ /** display time */
+ time_str = __msg_ui_get_display_time(item_data->msgTime);
+ if (time_str) {
+ strncpy(time_status_str, time_str, sizeof(time_status_str)-1);
+ free(time_str);
+ } else {
+ /** This "else" case is for avoiding NULL of the time_status_str */
+ /** if time_status_str is NULL, it could be shown progress icon although it's not sending or retrieving */
+ strncpy(time_status_str, item_data->displayDate, sizeof(time_status_str)-1);
+ }
+ break;
+ }
+
+ if (time_status_str[0] != '\0') {
+ if (item_data->progressbar) {
+ evas_object_del(item_data->progressbar);
+ item_data->progressbar = NULL;
+ }
+
+ elm_object_part_text_set(item_data->entry, "elm.text.time", time_status_str);
+ elm_object_signal_emit(item_data->entry, "elm,state,text,status,enabled", "elm");
+ elm_object_signal_emit(item_data->entry, "elm,state,content,status,disabled", "elm");
+ }
+
}
Eina_Bool msg_ui_bubble_item_load_cb(void *data)
@@ -740,6 +1133,23 @@ Eina_Bool msg_ui_bubble_item_load_cb(void *data)
elm_scroller_gravity_set(bubble_data->scrl, 0.0, 1.0);
__add_bubble_item(bubble_data, item_data, MSG_BOX_PACK_START, NULL);
+
+ /* add date seperator */
+ PMSG_APP_CONV_DATA_S prev_data = NULL;
+ Evas_Object * layout = NULL;
+ prev_data = (PMSG_APP_CONV_DATA_S) eina_list_nth(bubble_data->bubble_list, bubble_data->bubble_index-1);
+
+ if((!prev_data || g_strcmp0(prev_data->displayDate, item_data->displayDate) != 0)) {
+ layout = elm_layout_add(bubble_data->box);
+ elm_layout_file_set(layout, MSGC_UI_DEFAULT_EDJ, "composer/content/bubble/date_line");
+ elm_object_part_text_set(layout, "elm.text.date", item_data->displayDate);
+ 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);
+
+ elm_box_pack_start(bubble_data->box, layout);
+ }
+
bubble_data->realized_list = eina_list_append(bubble_data->realized_list, item_data);
bubble_data->bubble_index--;
@@ -769,9 +1179,9 @@ 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_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;
+ msg_struct_list_s msg_list;
PMSG_APP_CONV_DATA_S item_data = NULL;
int i;
@@ -788,27 +1198,55 @@ void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data)
bubble_data->bubble_count = msg_list.nCount;
if (bubble_data->bubble_count <= 0) {
- msg_release_message_list(&msg_list);
+ msg_release_list_struct(&msg_list);
return;
}
- for (i = 0; i < bubble_data->bubble_count; i++) {
+ int folder_id = MSG_MAX_FOLDER_ID;
+ int msg_id = 0;
+
+ for (i = 0; i < msg_list.nCount; i++) {
+ msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
+
+ if (folder_id == MSG_DRAFT_ID) {
+ msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msg_id);
+ D_MSG("msg_id = %d is a draft message", msg_id);
+
+ bubble_data->bubble_count--;
+ bubble_data->isDraft = true;
+
+ continue;
+ }
+
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]);
+ __set_msg_data_by_conv_data(item_data, msg_list.msg_struct_info[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);
+ /* load last draft message */
+ if (bubble_data->isDraft) {
+ D_MSG("last draft msgid is %d", msg_id);
- }
+ cd->loading_draft = true;
+
+ 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();
+
+ cd->loading_draft = false;
+ }
+
+ if (item_data) {
+ 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);
+ msg_release_list_struct(&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);
@@ -833,23 +1271,31 @@ void msg_ui_bubble_list_data_update(PMSG_BUBBLE_DATA bubble_data)
MSG_UI_LEAVE();
}
-void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg)
+void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg)
{
MSG_UI_ENTER();
PMSG_APP_CONV_DATA_S item_data = NULL;
+ int msg_id = 0 ;
+ time_t msgTime = 0;
+ msg_get_int_value(msg, MSG_MESSAGE_ID_INT, &msg_id);
+ msg_get_int_value(msg, MSG_MESSAGE_DISPLAY_TIME_INT, (int *)(&msgTime));
+
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 (item_data->msgId == msg_id) {
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);
-
+ msg_update_read_status(bubble_data->msgHandle, msg_id, true);
+
+ if ( *item_data->msgTime != msgTime ){
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "item_data->msgTime = %d and msgTime = %d", *item_data->msgTime, msgTime);
+ msg_ui_bubble_list_item_move(bubble_data, msg);
+ } else {
+ __set_msg_data_by_conv_data(item_data, msg);
+ msg_ui_bubble_fill_bubble_contents(bubble_data, item_data);
+ }
break;
}
}
@@ -916,14 +1362,18 @@ 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_append(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg)
{
MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data);
+ int msg_id = 0;
Eina_List *l = NULL;
PMSG_APP_CONV_DATA_S item_data = NULL;
+
+ msg_get_int_value(msg, MSG_MESSAGE_ID_INT, &msg_id);
+
EINA_LIST_FOREACH(bubble_data->bubble_list, l, item_data) {
- if (item_data && item_data->msgId == msg_get_message_id(msg))
+ if (item_data && item_data->msgId == msg_id)
return;
}
@@ -950,20 +1400,23 @@ void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg)
D_LEAVE;
}
-void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg)
+void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg)
{
MSG_UI_ENTER();
MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data);
+ int msg_id = 0;
PMSG_APP_CONV_DATA_S prev_data = NULL;
PMSG_APP_CONV_DATA_S insert_data = NULL;
BUBBLE_PACK_INFO *add_pack_info = NULL;
+ msg_get_int_value(msg, MSG_MESSAGE_ID_INT, &msg_id);
+
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)) {
+ if (add_pack_info->add_item->msgId == msg_id) {
bubble_data->added_list = eina_list_remove(bubble_data->added_list, (const void *)add_pack_info);
free(add_pack_info);
break;
@@ -973,7 +1426,7 @@ void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t ms
EINA_LIST_FOREACH(bubble_data->bubble_list, l, prev_data) {
if (prev_data) {
- if (prev_data->msgId == msg_get_message_id(msg)) {
+ if (prev_data->msgId == msg_id) {
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);
@@ -984,9 +1437,12 @@ void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t ms
bubble_data->bubble_list = eina_list_remove(bubble_data->bubble_list, (const void *)prev_data);
+ bubble_data->bubble_count--;
+
if (prev_data) {
if (prev_data->msgTime)
free(prev_data->msgTime);
+
free(prev_data);
}
break;
@@ -1017,3 +1473,32 @@ void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t ms
MSG_UI_LEAVE();
}
+void msg_ui_bubble_delete_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id)
+{
+ D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data);
+ int err;
+
+ if (bubble_data->popup) {
+ evas_object_del(bubble_data->popup);
+ bubble_data->popup = NULL;
+ }
+
+ bool isDraft = msg_ui_composer_common_is_send_possible((MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data);
+
+ if (bubble_data->bubble_count == 1 && isDraft == false) {
+ bubble_data->bubble_count = 0;
+ err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId);
+ } else {
+ 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_deleted_info(bubble_data);
+ }
+
+ return;
+}
diff --git a/composer/src/bubble/msg-ui-composer-bubble-main.c b/composer/src/bubble/msg-ui-composer-bubble-main.c
index 7f4c019..f47c686 100755
--- a/composer/src/bubble/msg-ui-composer-bubble-main.c
+++ b/composer/src/bubble/msg-ui-composer-bubble-main.c
@@ -15,33 +15,53 @@
*/
#include "msg-ui-composer-bubble.h"
+#include "msg-ui-composer-data.h"
PMSG_BUBBLE_DATA g_bubble_data;
-static int _parse_bundle_data(PMSG_BUBBLE_DATA bubble_data, bundle *data)
+static int _parse_bundle_data(PMSG_BUBBLE_DATA bubble_data, service_h svc_handle)
{
D_ENTER;
- if (!data)
+ if (!svc_handle)
return -1;
- const char *thread_id = NULL;
- const char *contact_id = NULL;
+ char *thread_id = NULL;
+ msg_struct_t threadInfo = NULL;
+ int err;
- thread_id = bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_ID);
- bubble_data->threadId = thread_id?(MSG_THREAD_ID_T)atoi(thread_id):0;
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, &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);
+ msg_struct_list_s addrList;
+ int i = 0;
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+
+ err = msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList);
+ if (err == MSG_SUCCESS) {
+ bubble_data->addr_list.addr_cnt = addrList.nCount;
+
+ for (i =0; i<addrList.nCount; i++) {
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &bubble_data->addr_list.addr_info[i].contact_id);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN);
+ }
+
+ msg_release_list_struct(&addrList);
- 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);
+ } else {
+ D_MSG("[ERROR] msg_get_address_list return error [%d]", err);
+ }
- contact_id = bundle_get_val(data, MSG_BUNDLE_KEY_CONTACT_ID);
- bubble_data->contactId = contact_id? atoi(contact_id):0;
+ threadInfo = msg_create_struct(MSG_STRUCT_THREAD_INFO);
+ err = msg_get_thread(bubble_data->msgHandle, bubble_data->threadId, threadInfo);
+ if (err == MSG_SUCCESS)
+ msg_get_str_value(threadInfo, MSG_THREAD_NAME_STR, bubble_data->threadName, DEF_THREAD_NAME_LEN);
+ else
+ D_MSG("[ERROR] msg_get_thread return error [%d]", err);
- MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "contact ID from bundle data=%d", bubble_data->contactId);
+ msg_release_struct(&threadInfo);
D_LEAVE;
return 0;
@@ -51,34 +71,55 @@ 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();
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ msg_struct_list_s addrList;
+ int i = 0;
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));
+ err = msg_get_message(bubble_data->msgHandle, msgId, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ D_EMSG("msg_get_message is failed err = %d", err);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return -1;
+ }
- bubble_data->threadId = msg_get_ith_thread_id(msgInfo, 0);
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, (int *)(&bubble_data->threadId));
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);
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList);
- 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);
+ bubble_data->addr_list.addr_cnt = addrList.nCount;
- if (msg_get_ith_contact_id(msgInfo, 0))
- bubble_data->contactId = msg_get_ith_contact_id(msgInfo, 0);
+ for (i=0; i<addrList.nCount; i++) {
+ /** contact ID & display name */
+ int contact_id = 0;
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
+
+ if (contact_id > 0) {
+ bubble_data->addr_list.addr_info[i].contact_id = contact_id;
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN);
+ } else {
+ bubble_data->addr_list.addr_info[i].contact_id = 0;
+ }
+
+ /** addresss */
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN);
+ }
+
+ msg_release_list_struct(&addrList);
+
+ if (bubble_data->addr_list.addr_info[0].contact_id > 0)
+ snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", bubble_data->addr_list.addr_info[0].name);
else
- bubble_data->contactId = 0;
+ snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", bubble_data->addr_list.addr_info[0].address);
- msg_release_message(&msgInfo);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
D_LEAVE;
@@ -86,7 +127,7 @@ static int _parse_bundle_with_msg_id(PMSG_BUBBLE_DATA bubble_data, int msgId)
}
-PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(MSG_HANDLE_T msgHandle, void *callback_data)
+PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(msg_handle_t msgHandle, void *callback_data)
{
D_ENTER;
@@ -183,11 +224,15 @@ void msg_ui_bubble_deinit_bubble_data(void *data)
D_LEAVE;
}
-void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b)
+void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, service_h svc_handle)
{
- if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_MSG_ID) == 0) { /* From logs */
+ char *key_type = NULL;
+
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, &key_type);
+ if (key_type && g_strcmp0(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);
+ char *msg_id_str = NULL;
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msg_id_str);
if (!msg_id_str)
return;
@@ -195,8 +240,9 @@ void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b)
msg_id = atoi(msg_id_str);
_parse_bundle_with_msg_id(bubble_data, msg_id);
- } else
- _parse_bundle_data(bubble_data, b);
+ } else {
+ _parse_bundle_data(bubble_data, svc_handle);
+ }
}
void msg_ui_bubble_start_bubble_list(PMSG_BUBBLE_DATA bubble_data)
@@ -247,9 +293,10 @@ void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data)
bubble_data->add_animator = NULL;
}
- if (bubble_data->box) {
+ if (bubble_data->box && bubble_data->scrl) {
elm_object_content_unset(bubble_data->scrl);
evas_object_del(bubble_data->box);
+ bubble_data->box = NULL;
}
EINA_LIST_FREE(bubble_data->bubble_list, item_data) {
@@ -271,19 +318,25 @@ void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data)
D_LEAVE;
}
-Evas_Object *msg_ui_bubble_create_controlbar(Evas_Object *parent, void *user_data)
+Evas_Object *msg_ui_bubble_create_toolbar(void *user_data)
{
- if (!parent || !user_data)
+ if (!user_data) {
+ D_EMSG("[ERROR] user_data is NULL");
return NULL;
+ }
- PMSG_BUBBLE_DATA bubble_data = user_data;
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)user_data;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S*)bubble_data->callback_data;
+
+ Evas_Object *toolbar = elm_toolbar_add(cd->navi_bar);
- Evas_Object *toolbar = NULL;
+ if (!toolbar) {
+ D_EMSG("toolbar is NULL");
+ return 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;
+ elm_object_style_set(toolbar, "naviframe");
return toolbar;
}
@@ -349,38 +402,99 @@ void msg_ui_bubble_start_view(PMSG_BUBBLE_DATA bubble_data)
MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_attach_handler() is success.");
}
}
+
+#ifdef _BUBBLE_FLICK_EVENT
+ evas_object_event_callback_add(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_bubble_layout_mouse_down_cb, (const void*)bubble_data);
+#endif
msg_ui_bubble_list_load(bubble_data);
}
-void msg_ui_bubble_add_normal_control_item(void *user_data)
+Evas_Object *msg_ui_bubble_toolbar_btn_create(Evas_Object *parent, char *icon_path, char *button_text)
{
D_ENTER;
+ D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL");
- if (!user_data)
- return;
+ Evas_Object *button = elm_button_add(parent);
- int i;
+ evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
- PMSG_BUBBLE_DATA bubble_data = user_data;
+ elm_object_style_set(button, "naviframe_control/default");
- 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]);
+ if (icon_path) {
+ Evas_Object *icon = elm_icon_add(button);
+ elm_icon_file_set(icon, icon_path, NULL);
+ elm_object_content_set(button,icon);
+ evas_object_size_hint_min_set(icon, 50, 50);
+ evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ } else if (button_text) {
+ elm_object_text_set(button, button_text);
}
+ evas_object_show(button);
- 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);
+ D_LEAVE;
+ return button;
+}
- 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);
+void msg_ui_bubble_add_normal_toolbar_item(Evas_Object *toolbar, void *user_data)
+{
+ D_ENTER;
+
+ if (!user_data) {
+ D_EMSG("[ERROR] user data is NULL");
+ return;
+ }
+
+ int i;
+ unsigned char num_type;
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)user_data;
+
+ /* create add/view contact button */
+ Evas_Object *addcontact_button = NULL;
+ if (bubble_data->addr_list.addr_info[0].contact_id <= 0) {
+ addcontact_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", 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);
+ addcontact_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_bubble_ctlbar_view_ct_detail_cb, bubble_data->callback_data);
}
+ num_type = msg_ui_bubble_check_word_type(bubble_data->addr_list.addr_info[0].address);
+ if (num_type == WORD_TYPE_NUM) {
+ /* create voicecall button */
+ Evas_Object *voicecall_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_TITLE_ICON_VOICECALL, NULL);
+ evas_object_smart_callback_add(voicecall_button, "clicked", msg_ui_bubble_ctlbar_call_cb, bubble_data->callback_data);
+ bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data);
+ elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], "object", voicecall_button);
+
+ /* create videocall button */
+ Evas_Object *videocall_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_TITLE_ICON_VIDEOCALL, NULL);
+ evas_object_smart_callback_add(videocall_button, "clicked", msg_ui_bubble_ctlbar_vcall_cb, bubble_data->callback_data);
+ bubble_data->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data);
+ elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], "object", videocall_button);
+
+ bubble_data->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data);
+ elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_3], "object", addcontact_button);
+ } else if (num_type == WORD_TYPE_EMAIL) {
+ Evas_Object *email_button = msg_ui_bubble_toolbar_btn_create(toolbar, NULL, dgettext("sys_string","IDS_COM_BODY_EMAIL"));
+ evas_object_smart_callback_add(email_button, "clicked", msg_ui_bubble_ctlbar_email_cb, bubble_data->callback_data);
+ bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data);
+ elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], "object", email_button);
+
+ bubble_data->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data);
+ elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], "object", addcontact_button);
+ } else {
+ bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data);
+ elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], "object", addcontact_button);
+
+ if (num_type == WORD_TYPE_NONE) { // invalid address
+ elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+ elm_object_disabled_set(addcontact_button, EINA_TRUE);
+ }
+ }
+
+
if (bubble_data->threadId <= 0) {
for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) {
if (bubble_data->toolbar_item[i])
@@ -390,8 +504,9 @@ void msg_ui_bubble_add_normal_control_item(void *user_data)
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 */
+ elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); // voice call
+ elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); // video call
+ elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); // add/update contact
}
}
diff --git a/composer/src/bubble/msg-ui-composer-bubble-util.c b/composer/src/bubble/msg-ui-composer-bubble-util.c
index 54c9669..b61db41 100755
--- a/composer/src/bubble/msg-ui-composer-bubble-util.c
+++ b/composer/src/bubble/msg-ui-composer-bubble-util.c
@@ -16,8 +16,10 @@
#include "msg-ui-composer-bubble.h"
#include "msg-ui-composer-main.h"
+#include "msg-ui-composer-common.h"
#include <regex.h>
#include "appsvc.h"
+#include <status.h>
void msg_ui_bubble_launch_voice_call(const char *call_num)
{
@@ -25,21 +27,53 @@ void msg_ui_bubble_launch_voice_call(const char *call_num)
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();
-
+ service_h svc_handle;
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 (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
+ if (num_str) {
+ snprintf(telnum, sizeof(telnum), "tel:%s", num_str); /* Number to make a call */
+ service_set_uri(svc_handle, telnum);
+ }
+ service_send_launch_request(svc_handle, NULL, NULL);
+ service_destroy(svc_handle);
+ }
if (num_str)
free(num_str);
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_bubble_launch_video_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 = NULL;
+
+ num_str = msg_ui_bubble_get_trimmed_number(call_num);
+
+ bundle *b = bundle_create();
+
+ if (!b)
+ return;
+
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, num_str);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE);
+
+ aul_launch_app(VIDEO_CALL_PKG_NAME, b);
bundle_free(b);
+ if (num_str)
+ free(num_str);
+
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
@@ -81,18 +115,9 @@ static void __popup_response_cb(void *data, Evas_Object *obj, void *event_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);
- }
+ if (bubbleData->deleted_info) {
+ evas_object_del(bubbleData->select_info);
+ bubbleData->select_info = NULL;
}
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
@@ -101,6 +126,7 @@ 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");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubbleData->callback_data;
Evas_Object *popup = NULL;
@@ -109,13 +135,14 @@ void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg)
bubbleData->popup = NULL;
}
- popup = elm_popup_add(bubbleData->bubble_layout);
+ popup = elm_popup_add(cd->navi_bar);
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);
+ evas_object_smart_callback_add(bubbleData->popup, "block,clicked", __popup_response_cb, bubbleData);
elm_popup_timeout_set(bubbleData->popup, 1.0);
evas_object_show(bubbleData->popup);
@@ -123,30 +150,12 @@ void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg)
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
-void msg_ui_bubble_show_notify_with_timeout(PMSG_BUBBLE_DATA bubbleData, char *msg, double timeout)
+static void __msg_delete_progress_cancel_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, !bubbleData, "PMSG_BUBBLE_DATA is NULL");
-
- Evas_Object *popup = NULL;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+ PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data;
- 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);
+ bubble_data->del_cancel = true;
}
Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, int count)
@@ -155,10 +164,15 @@ Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData,
MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !pData, NULL);
- Evas_Object *popup, *progressbar, *box, *label;
+ Evas_Object *popup;
+ Evas_Object *progressbar;
+ Evas_Object *box;
+ Evas_Object *label;
+ Evas_Object *cancel_btn;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data;
char buf[DEF_BUF_LEN_S] = { 0, };
- popup = elm_popup_add(pData->bubble_layout);
+ popup = elm_popup_add(cd->navi_bar);
label = elm_label_add(popup);
snprintf(buf, sizeof(buf), "0/%d %s", count, dgettext("sys_string", "IDS_COM_POP_DELETED"));
@@ -177,8 +191,12 @@ Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData,
elm_box_pack_end(box, progressbar);
evas_object_show(box);
- elm_object_content_set(popup, box);
+ cancel_btn = elm_button_add(popup);
+ elm_object_text_set(cancel_btn, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+ elm_object_part_content_set(popup, "button1", cancel_btn);
+ evas_object_smart_callback_add(cancel_btn, "clicked", __msg_delete_progress_cancel_clicked_cb, pData);
+ elm_object_content_set(popup, box);
evas_object_show(popup);
pData->progressbar = progressbar;
@@ -202,7 +220,10 @@ void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData)
elm_object_content_set(pData->select_info, pData->selectioninfo_layout);
}
- elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64");
+ if (pData->isRotate)
+ elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "horizontal/bottom_64");
+ else
+ elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64");
if (pData->check_cnt <= 0) {
evas_object_hide(pData->select_info);
@@ -221,81 +242,204 @@ 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_show_deleted_info(PMSG_BUBBLE_DATA pData)
{
- D_ENTER;
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- PMSG_APP_CONV_DATA_S conv_data = NULL;
- MSG_ERROR_T err = MSG_SUCCESS;;
- int index;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData);
- if (!pData->bubble_list)
- return;
+ if (pData->select_info) {
+ evas_object_del(pData->select_info);
+ pData->select_info = NULL;
+ }
- conv_data = (PMSG_APP_CONV_DATA_S)eina_list_nth(pData->bubble_list, 0);
- if (!conv_data)
- return;
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
- msg_message_t msg = msg_new_message();
- MSG_SENDINGOPT_S sendOpt = {0};
+ bool isDraft = msg_ui_composer_common_is_send_possible((MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data);
- err = msg_get_message(pData->msgHandle, conv_data->msgId, msg, &sendOpt);
+ if (pData->bubble_count == 0 && isDraft == false) {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ char buf[DEF_BUF_LEN_S] = {0,};
- if (err != MSG_SUCCESS)
- goto CONTACT_UPDATE_LEAVE;
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL);
+ snprintf(buf, sizeof(buf), "%d", pData->threadId);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf);
- index = msg_get_ith_contact_id(msg, 0);
+ msg_ui_composer_bubble_del_all(pData->callback_data, svc_handle);
- 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);
+ service_destroy(svc_handle);
+ }
+ }
+}
- 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);
+void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData)
+{
+ D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData);
+
+ msg_error_t err = MSG_SUCCESS;;
+ int thread_id = pData->threadId;;
+ msg_struct_list_s addrList;
+ char display_name[DEF_THREAD_NAME_LEN+1] = {0,};
+ msg_struct_list_s peerList = {0, };
+ int i = 0;
+
+ msg_struct_t sortRule = msg_create_struct(MSG_STRUCT_SORT_RULE);
+ msg_set_int_value(sortRule, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE);
+ msg_set_bool_value(sortRule, MSG_SORT_RULE_ACSCEND_BOOL, false);
+
+ err = msg_get_thread_view_list(pData->msgHandle, sortRule, &peerList);
+ msg_release_struct(&sortRule);
+
+ for (i = 0; i < peerList.nCount; i++) {
+ int tid = 0;
+ msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_ID_INT, &tid);
+ if (thread_id == tid) {
+ msg_get_str_value(peerList.msg_struct_info[i], MSG_THREAD_NAME_STR, display_name, DEF_THREAD_NAME_LEN);
+ break;
}
+ }
+
+ /* update thread Name */
+ bzero(pData->threadName, sizeof(pData->threadName));
+ if (display_name[0] != '\0')
+ snprintf(pData->threadName, DEF_THREAD_NAME_LEN, "%s", display_name);
+
+ /* update address list */
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+
+ err = msg_get_address_list(pData->msgHandle, thread_id, &addrList);
+ if (err == MSG_SUCCESS) {
+ pData->addr_list.addr_cnt = addrList.nCount;
+
+ for (i=0; i<addrList.nCount; i++) {
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &pData->addr_list.addr_info[i].contact_id);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, pData->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, pData->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN);
+ }
+
+ msg_release_list_struct(&addrList);
} 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);
- }
- }
+ D_MSG("[ERROR] msg_get_address_list return error [%d]", err);
+ goto CONTACT_UPDATE_LEAVE;
+ }
- bzero(pData->threadName, sizeof(pData->threadName));
- pData->contactId = 0;
+ /** change control bar button */
+ if (pData->title_optionheader_opened) {
+ unsigned char num_type = msg_ui_bubble_check_word_type(pData->addr_list.addr_info[0].address);
+
+ if (pData->addr_list.addr_info[0].contact_id > 0) {
+ Evas_Object *addcontact_button = msg_ui_bubble_toolbar_btn_create(pData->toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_bubble_ctlbar_view_ct_detail_cb, pData->callback_data);
+
+ if (num_type == WORD_TYPE_NUM) {
+ elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_3]);
+ pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data);
+ elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_3], "object", addcontact_button);
+ } else if (num_type == WORD_TYPE_EMAIL) {
+ elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_2]);
+ pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data);
+ elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_2], "object", addcontact_button);
+ }
+ } else {
+ Evas_Object *addcontact_button = msg_ui_bubble_toolbar_btn_create(pData->toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_bubble_ctlbar_add_to_contact_cb, pData->callback_data);
+
+ if (num_type == WORD_TYPE_NUM) {
+ elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_3]);
+ pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data);
+ elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_3], "object", addcontact_button);
+ } else if (num_type == WORD_TYPE_EMAIL) {
+ elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_2]);
+ pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data);
+ elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_2], "object", addcontact_button);
+ }
}
}
- msg_ui_bubble_composer_navi_title_set(pData->callback_data);
+ /*change title button */
+ if (pData->addr_list.addr_cnt == 1) {
+ if (pData->addr_list.addr_info[0].name[0] != '\0')
+ elm_object_text_set(pData->title_button, pData->addr_list.addr_info[0].name);
+ else
+ elm_object_text_set(pData->title_button, pData->addr_list.addr_info[0].address);
+ } else if (pData->addr_list.addr_cnt > 1) {
+ char title_text[DEF_BUF_LEN+1] = {0,};
+
+ if (pData->addr_list.addr_info[0].name[0] != '\0')
+ snprintf(title_text, sizeof(title_text), "%s +%d", pData->addr_list.addr_info[0].name, pData->addr_list.addr_cnt-1);
+ else
+ snprintf(title_text, sizeof(title_text), "%s +%d", pData->addr_list.addr_info[0].address, pData->addr_list.addr_cnt-1);
+
+ elm_object_text_set(pData->title_button, title_text);
+ } else {
+ elm_object_text_set(pData->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ }
+
CONTACT_UPDATE_LEAVE :
- msg_release_message(&msg);
+ msg_release_list_struct(&peerList);
D_LEAVE;
return;
}
-void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData)
+unsigned char msg_ui_bubble_check_word_type(char *txt)
{
- int r;
- enum appcore_time_format timeformat;
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, !txt, WORD_TYPE_NONE, "Message text is NULL!");
- r = appcore_get_timeformat(&timeformat);
- if (r == MSG_UI_RET_ERR)
- timeformat = APPCORE_TIME_FORMAT_UNKNOWN;
+ int index = 0, numCnt = 0;
- if (timeformat == APPCORE_TIME_FORMAT_24)
- pData->time_fmt = MSG_TIME_FORMAT_24H;
- else
+ if (!g_ascii_strncasecmp(txt, "www.", 4))
+ return WORD_TYPE_URL;
+
+ if (!g_ascii_strncasecmp(txt, "http://", 7))
+ return WORD_TYPE_URL_WITH_PROTC;
+
+ if (txt[0] == '+')
+ index++;
+
+ while (g_ascii_isdigit(txt[index]) || txt[index] == '-') {
+ index++;
+ numCnt++;
+
+ if (numCnt > 2) {
+ if (strlen(txt) <= 20)
+ return WORD_TYPE_NUM;
+ else
+ return WORD_TYPE_NONE;
+ }
+ }
+
+ regex_t reg_email;
+ int ret;
+
+ ret = regcomp(&reg_email, "^([0-9a-z_-][0-9a-z._-]*)@([0-9a-z_-]+)(.[0-9a-z_-]+){1,2}$", REG_EXTENDED | REG_ICASE);
+ if (ret) {
+ D_MSG("regcomp error = %d", ret);
+ return WORD_TYPE_NONE;
+ }
+
+ ret = regexec(&reg_email, (const char *)txt, 0, NULL, 0);
+ regfree(&reg_email);
+
+ if(ret == 0)
+ return WORD_TYPE_EMAIL;
+
+ return WORD_TYPE_NONE;
+}
+
+void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData)
+{
+ int timeformat = msg_common_get_timeformat();
+
+ if (timeformat == MSG_TIME_FORMAT_UNKNOWN)
pData->time_fmt = MSG_TIME_FORMAT_12H;
+ else
+ pData->time_fmt = timeformat;
D_MSG("%s", pData->time_fmt == MSG_TIME_FORMAT_24H ? "TIME FORMAT = 24h" : "TIME FORMAT = 12h");
}
@@ -313,3 +457,40 @@ void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData)
D_MSG("Locale = %s", pData->locale);
}
+bool msg_is_sms(int msg_type)
+{
+ int result = false;
+ switch(msg_type)
+ {
+ case MSG_TYPE_SMS_CB:
+ case MSG_TYPE_SMS_JAVACB:
+ case MSG_TYPE_SMS_WAPPUSH:
+ case MSG_TYPE_SMS_MWI:
+ case MSG_TYPE_SMS_SYNCML:
+ case MSG_TYPE_SMS_REJECT:
+ case MSG_TYPE_SMS:
+ result = true;
+ break;
+ default:
+ break;
+ }
+ return result;
+}
+
+
+bool msg_is_mms(int msg_type)
+{
+ int result = false;
+ switch(msg_type)
+ {
+ case MSG_TYPE_MMS_NOTI:
+ case MSG_TYPE_MMS_JAVA:
+ case MSG_TYPE_MMS:
+ result = true;
+ break;
+ default:
+ break;
+ }
+ return result;
+}
+
diff --git a/composer/src/core/msg-ui-composer-core.c b/composer/src/core/msg-ui-composer-core.c
deleted file mode 100755
index 2f5dc05..0000000
--- a/composer/src/core/msg-ui-composer-core.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * 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)) {
- MSG_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;
- }
- }
-
- 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
index bfecead..440bdbd 100755
--- a/composer/src/external/msg-ui-composer-external.c
+++ b/composer/src/external/msg-ui-composer-external.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
/* include*/
#include "msg-ui-composer-data.h"
#include "msg-ui-composer-external.h"
@@ -22,32 +23,156 @@
#include "msg-ui-composer-popup.h"
#include "msg-ui-composer-body.h"
#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-bubble.h"
+
#include <appsvc.h>
+#include <app_service.h>
#include <ui-gadget.h>
+#include <aul.h>
+#include <aul_service.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);
-static void __msg_ui_composer_external_closed(MSG_COMPOSER_VIEW_DATA_S *cd)
+static void __ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
{
D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ Evas_Object *base;
- if (cd->loaded_aul || cd->state == COMPOSER_STATE_TYPE_RUNNING) {
- if(!msg_ui_composer_popup_exist(cd)) {
- msg_ui_composer_last_focus_load(cd);
- }
+ 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;
+ }
+
+ msg_common_reset_font_size("entry");
+
+ 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_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *priv)
+static void __ug_contacts_checklist_result_cb(ui_gadget_h ug, service_h 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 *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 = 0;
+ int i = 0;
+
+ const char *number_str = NULL;
+ char *service_val = NULL;
+ const char *current_number = NULL;
+ char *entry_text = NULL;
+
+ bool bMaxCount = false;
+ bool bInvalidNum = false;
+ bool bDup = false;
+
+ service_get_extra_data(result, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST, &service_val);
+ D_MSG_RETM_IF(!service_val, "bundle_val data is NULL");
+
+ num_id_list = (int *)g_base64_decode(service_val, (gsize *)&len);
+ D_MSG_RETM_IF(!num_id_list,"number_id list is NULL");
+
+ /* get entry text */
+ if (len > 0) {
+ current_number = msg_ui_composer_recipient_entry_text_get(cd->recipient);
+ if (current_number)
+ entry_text = strdup(current_number);
+ }
+
+ 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;
+ } else {
+ 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);
+ }
+
+ /* set entry text */
+ if (entry_text) {
+ msg_ui_composer_recipient_entry_text_set(cd->recipient, entry_text);
+ g_free(entry_text);
+ }
+
+ 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_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ } else if (bDup) {
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+ }
+
+ g_free(num_id_list);
+
+ D_LEAVE;
+}
+
+static void __ug_calllog_return_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = NULL;
bool bMaxCount = false;
bool bInvalidNum = false;
@@ -61,13 +186,14 @@ static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *p
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;
+ int *list = NULL;
+ int len = 0;
+ int i = 0;
+ char *encoded_str = NULL;
- encoded_str = (char *)bundle_get_val(result, MSG_BUNDLE_KEY_GET_SEL_LIST);
- list = (int *)g_base64_decode(encoded_str, (gsize *)&len);
+ service_get_extra_data(result, MSG_BUNDLE_KEY_GET_SEL_LIST, &encoded_str);
+ if (encoded_str)
+ list = (int *)g_base64_decode(encoded_str, (gsize *)&len);
for (i = 0; i < len / sizeof(int); i++) {
@@ -104,7 +230,7 @@ static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *p
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);
+ msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
} else if (bDup) {
msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
}
@@ -113,43 +239,248 @@ static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *p
D_LEAVE;
}
-static void __ug_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)
+static void __ug_myfile_return_cb(ui_gadget_h ug, service_h result, void *priv)
{
D_ENTER;
+
MSG_COMPOSER_VIEW_DATA_S *cd;
- Evas_Object *base;
- if (!ug || !priv) {
- D_MSG("");
+ char *file_path = NULL;
+
+ 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;
- base = ug_get_layout(ug);
- if (!base) {
- ug_destroy(ug);
- D_MSG("");
+ service_get_extra_data(result, MSG_BUNDLE_KEY_RESULT, &file_path);
+ cd->attachlist = make_tokenize_list(file_path, MYFILE_TOKEN);
+
+ D_LEAVE;
+}
+
+static void __ug_namecard_list_return_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ char *str_id = NULL;
+ int index = 0;
+
+ if (!ug || !priv || !result) {
+ D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result);
return;
}
- switch (mode) {
- case UG_MODE_FULLVIEW:
+ cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
- 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;
+ service_get_extra_data(result, MSG_BUNDLE_KEY_NAMECARD_INDEX, &str_id);
+
+ if (!str_id) {
+ D_EMSG("bundle_get_val Fail");
+ return;
+ }
+
+ D_MSG("Index of Selected namecard = %s", str_id);
+
+ index = atoi(str_id);
+
+ if (index > 0) {
+ char file_path[COMPOSER_FILEPATH_LEN_MAX] = { 0,};
+ if (msg_composer_get_vcf_file_by_index(index, file_path, COMPOSER_FILEPATH_LEN_MAX - 1 ) == true) {
+ D_MSG("file_path= %s", file_path);
+ cd->attachlist = eina_list_append(cd->attachlist, g_strdup(file_path));
+ }
}
D_LEAVE;
+ return;
}
-static void __ug_closed_cb(struct ui_gadget *ug, void *priv)
+static void __ug_calendar_result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = priv;
+
+ int count = 0;
+ int i = 0;
+ char *path = NULL;
+ char *count_str = NULL;
+ char tmp[DEF_BUF_LEN_S];
+
+ if (!ug || !priv || !result) {
+ D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result);
+ return;
+ }
+
+ service_get_extra_data(result, MSG_BUNDLE_KEY_COUNT, &count_str);
+ if (count_str)
+ count = atoi(count_str);
+
+ if (count > 0) {
+ for (i = 0; i < count; i++) {
+ snprintf(tmp, sizeof(tmp)-1, "vfile%d", i + 1);
+ D_MSG("tmp:%s", tmp);
+
+ service_get_extra_data(result, tmp, &path);
+
+ D_MSG("path:%s", path);
+
+ if (path && ecore_file_exists(path)) {
+ cd->attachlist = eina_list_append(cd->attachlist, g_strdup(path));
+ }
+ }
+ }
+ D_LEAVE;
+}
+
+static void __ug_memo_result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = priv;
+ Evas_Object *entry;
+ char *str = NULL;
+ char *tmp_memo = NULL;
+ char *memo_image = NULL;
+ char buf[DEF_BUF_LEN_S] = { 0, };
+ int img_count = 0;
+ int txt_count = 0;
+ int i;
+
+ if (!ug || !priv || !result) {
+ D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result);
+ return;
+ }
+
+ if (service_get_extra_data(result, MSG_BUNDLE_KEY_IMAGE, &str) == SERVICE_ERROR_NONE) {
+ if (str)
+ img_count = atoi(str);
+ }
+
+ D_MSG("[MEMO] attach image count : %d", img_count);
+
+ /*if image memo then attach image */
+ if (img_count > 0) {
+ for (i = 1; i <= img_count; i++) {
+ snprintf(buf, sizeof(buf)-1, "image%d", i);
+ if (service_get_extra_data(result, buf, &memo_image) == SERVICE_ERROR_NONE) {
+ if (memo_image)
+ cd->attachlist = eina_list_append(cd->attachlist, g_strdup(memo_image));
+ }
+ }
+ }
+
+ if (service_get_extra_data(result, MSG_BUNDLE_KEY_TEXT, &str) == SERVICE_ERROR_NONE) {
+ if (str)
+ txt_count = atoi(str);
+ }
+
+ D_MSG("[MEMO]attach text count : %d", txt_count);
+
+ /*if only text memo then add to body area */
+ if (txt_count > 0) {
+ COMPOSER_RECP_ADDR_E recp_type = msg_ui_composer_recipient_addr_type_get(cd->recipient);
+
+ for (i = 1; i <= txt_count; i++) {
+ char* memo_str = NULL;
+ snprintf(buf, sizeof(buf)-1, "text%d", i);
+
+ service_get_extra_data(result, buf, &tmp_memo);
+ D_MSG("text content : %s", tmp_memo);
+
+ entry = msg_ui_composer_last_body_entry_get(cd);
+ if (entry && tmp_memo) {
+ memo_str = elm_entry_utf8_to_markup(tmp_memo);
+ D_PRINT("### memo text = %s", tmp_memo);
+ if (memo_str) {
+ D_PRINT("### memo text markup= %s", memo_str);
+ elm_entry_entry_insert(entry, memo_str);
+ g_free(memo_str);
+ }
+
+ if (recp_type != COMPOSER_RECP_ADDR_INVALID) {
+ /* change focus to entry*/
+ msg_ui_composer_last_focused_entry_set(cd, entry);
+ msg_ui_composer_last_focus_load(cd);
+ }
+ }
+ }
+
+ if (recp_type == COMPOSER_RECP_ADDR_INVALID && img_count == 0) {
+ msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ }
+ }
+}
+
+static void __ug_viewer_result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ char *msgid_str = NULL;
+ int msg_id = 0;
+
+ 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;
+
+ if (service_get_extra_data(result, MSG_BUNDLE_KEY_DELETE_MSG, &msgid_str) == SERVICE_ERROR_NONE) {
+ if (msgid_str)
+ msg_id = atoi(msgid_str);
+
+ D_MSG("Delete request msg id(%d) from viewer", msg_id);
+ msg_ui_bubble_delete_msg(cd->bubble_data, msg_id);
+ return;
+ }
+
+ if (service_get_extra_data(result, MSG_BUNDLE_KEY_RESEND, &msgid_str) == SERVICE_ERROR_NONE) {
+ if (msgid_str)
+ msg_id = atoi(msgid_str);
+
+ D_MSG("Resend request msg id(%d) from viewer", msg_id);
+ msg_ui_bubble_resend_msg(cd->bubble_data, msg_id);
+ return;
+ }
+
+ D_LEAVE;
+}
+
+static void __ug_gallery_return_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ char *file_path = NULL;
+ char *count_str = NULL;
+ int count = 0;
+
+ 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;
+
+ service_get_extra_data(result, MSG_BUNDLE_KEY_COUNT, &count_str);
+ if (count_str)
+ count = atoi(count_str);
+ D_MSG("gallery selected item count = %d", count);
+
+ service_get_extra_data(result, MSG_BUNDLE_KEY_PATH, &file_path);
+ D_MSG("gallery selected item file_path = %s", file_path);
+
+ cd->attachlist = make_tokenize_list(file_path, GALLERY_TOKEN);
+
+ D_LEAVE;
+}
+
+static void __ug_closed_cb(ui_gadget_h ug, void *priv)
{
D_ENTER;
@@ -160,6 +491,9 @@ static void __ug_closed_cb(struct ui_gadget *ug, void *priv)
cd->loaded_ug = NULL;
}
+ msg_common_apply_font_size("entry", cd->content_layout);
+ msg_ui_composer_apply_font_size(cd);
+
__msg_ui_composer_external_closed(cd);
D_LEAVE;
@@ -168,18 +502,20 @@ static void __ug_closed_cb(struct ui_gadget *ug, void *priv)
/*
* Create External UG
*/
-struct ui_gadget * msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id)
+ui_gadget_h 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;
+ ui_gadget_h ug;
struct ug_cbs cbs = { 0, };
- bundle *kb = bundle_create();
+ service_h svc_handle = NULL;
- if (!kb)
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
return NULL;
+ }
char contactId[DEF_BUF_LEN_S] = { 0, };
char buf[DEF_BUF_LEN_D] = { 0, };
@@ -187,47 +523,49 @@ struct ui_gadget * msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DA
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);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, 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);
+ ug = ug_create(cd->ug, UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &cbs);
cd->loaded_ug = ug;
- bundle_free(kb);
+ service_destroy(svc_handle);
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)
+ui_gadget_h 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;
+
+ ui_gadget_h ug;
struct ug_cbs cbs = { 0, };
- bundle *kb = bundle_create();
+ service_h svc_handle = NULL;
- if (!kb)
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
return NULL;
+ }
char buf[DEF_BUF_LEN_D] = { 0, };
-
+ D_MSG("type = %d", type);
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);
+ snprintf(buf, sizeof(buf), "%d", type);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, 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);
+ snprintf(buf, sizeof(buf), "%d", type);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, str);
+ } else {
+ service_destroy(svc_handle);
return NULL;
}
@@ -236,175 +574,510 @@ struct ui_gadget * msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA
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);
+ ug = ug_create(cd->ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &cbs);
+ service_destroy(svc_handle);
cd->loaded_ug = ug;
D_LEAVE;
return ug;
}
-struct ui_gadget *ug_calllog_create(void *data)
+ui_gadget_h msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle)
{
D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
- struct ui_gadget *ug;
- struct ug_cbs cbs = { 0, };
+ ui_gadget_h ug;
+ struct ug_cbs cbs;
- MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ 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, svc_handle, &cbs);
+ cd->loaded_ug = ug;
+
+ D_LEAVE;
+ return ug;
+}
+
+ui_gadget_h msg_ui_composer_launch_email_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
- bundle *kb = bundle_create();
+ ui_gadget_h ug;
+ struct ug_cbs cbs;
cbs.layout_cb = __ug_layout_cb;
- cbs.result_cb = __ug_calllog_return_cb;
+ cbs.result_cb = NULL;
cbs.destroy_cb = __ug_closed_cb;
- cbs.priv = data;
- ug = ug_create(cd->ug, TXT_UG_NAME_LOG, UG_MODE_FULLVIEW, kb, &cbs);
+ cbs.priv = cd;
- bundle_free(kb);
+ ug = ug_create(cd->ug, EMAIL_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &cbs);
+ cd->loaded_ug = ug;
+ D_LEAVE;
return ug;
}
-static void __ug_contacts_checklist_result_cb(struct ui_gadget *ug, bundle *result, void *priv)
+ui_gadget_h msg_ui_composer_launch_viewer_create(void *data, service_h svc_handle)
{
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 *)data;
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer 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");
+ ui_gadget_h ug;
+ struct ug_cbs cbs;
- int contact_index;
- int *num_id_list = NULL;
- int len, i;
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = __ug_viewer_result_cb;
+ cbs.destroy_cb = __ug_closed_cb;
+ cbs.priv = cd;
- const char *number_str;
- const char *bundle_val;
+ ug = ug_create(cd->ug, TXT_UG_NAME_MSG_VIEWER, UG_MODE_FULLVIEW, svc_handle, &cbs);
+ cd->loaded_ug = ug;
- bool bMaxCount = false;
- bool bInvalidNum = false;
- bool bDup = false;
+ D_LEAVE;
+ return ug;
+}
- bundle_val = bundle_get_val(result, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST);
- D_MSG_RETM_IF(!bundle_val,"bundle_val data is NULL");
+ui_gadget_h ug_contact_checklist_create(void *data)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
- num_id_list = (int *)g_base64_decode(bundle_val, (gsize *)&len);
- D_MSG_RETM_IF(!num_id_list,"number_id list is NULL");
+ ui_gadget_h ug;
+ struct ug_cbs cbs = {0,};
+ service_h svc_handle = NULL;
- for (i = 0; i < len / sizeof(int); i++) {
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
- if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) {
- bMaxCount = true;
- break;
- }
+ char contact_ug[DEF_BUF_LEN] = { 0, };
- 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;
- }
+ snprintf(contact_ug, sizeof(contact_ug)-1, "%d", CT_UG_REQUEST_CHECK_FOR_NUMBER);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, contact_ug);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_REQUEST_TYPE, MSG_BUNDLE_VALUE_CONTACT_CHECK_LIST);
- 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);
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = __ug_contacts_checklist_result_cb;
+ cbs.destroy_cb = __ug_closed_cb;
+ cbs.priv = data;
- 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;
- }
+ ug = ug_create(cd->ug, TXT_UG_NAME_CONTACT, UG_MODE_FULLVIEW, svc_handle, &cbs);
- if (msg_ui_composer_recipient_vaild_check(number_str) == EINA_FALSE) {
- bInvalidNum = true;
- }
+ service_destroy(svc_handle);
- msg_ui_composer_recipient_append(cd->recipient, number_str, contact_index);
+ D_LEAVE;
+ return ug;
+}
- } else {
- D_EMSG("contact index[%d] is unuseable !!", contact_index);
- }
+ui_gadget_h ug_calllog_create(void *data)
+{
+ D_ENTER;
- contacts_svc_value_free(value);
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0, };
+
+ service_h svc_handle = NULL;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
}
- 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);
+ 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, svc_handle, &cbs);
+
+ service_destroy(svc_handle);
+
+ return ug;
+}
+
+ui_gadget_h ug_myfile_create(void *data)
+{
+ D_ENTER;
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0, };
+
+ service_h svc_handle = NULL;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
}
- g_free(num_id_list);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FILE_TYPE, MSG_BUNDLE_VALUE_ALL);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_SELECT_TYPE, MSG_BUNDLE_VALUE_MULTI_FILE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_DRMTYPE, MSG_BUNDLE_VALUE_DRM_WITHOUT_FL);
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = __ug_myfile_return_cb;
+ cbs.destroy_cb = __ug_closed_cb;
+ cbs.priv = data;
+
+ ug = ug_create(cd->ug, TXT_UG_NAME_MYFILE, UG_MODE_FULLVIEW, svc_handle, &cbs);
+
+ service_destroy(svc_handle);
D_LEAVE;
+ return ug;
}
-struct ui_gadget *ug_contact_checklist_create(void *data)
+ui_gadget_h ug_namecard_create(void *data)
{
D_ENTER;
- struct ui_gadget *ug;
- struct ug_cbs cbs = {0,};
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0, };
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
- bundle *b;
+ service_h svc_handle = NULL;
- b = bundle_create();
- if (!b)
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
return NULL;
+ }
char contact_ug[DEF_BUF_LEN] = { 0, };
+ snprintf(contact_ug, sizeof(contact_ug)-1, "%d", CT_UG_REQUEST_SELECT_CONTACT);
- 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);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, contact_ug);
cbs.layout_cb = __ug_layout_cb;
- cbs.result_cb = __ug_contacts_checklist_result_cb;
+ cbs.result_cb = __ug_namecard_list_return_cb;
cbs.destroy_cb = __ug_closed_cb;
cbs.priv = data;
+ ug = ug_create(cd->ug, TXT_UG_NAME_CONTACT, UG_MODE_FULLVIEW, svc_handle, &cbs);
+
+ service_destroy(svc_handle);
+
+ D_LEAVE;
+ return ug;
+}
+
+ui_gadget_h ug_msgviewer_create(void *data, msg_struct_t msg_data)
+{
+ D_ENTER;
+
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);
+ ui_gadget_h ug;
+ struct ug_cbs cbs;
+ service_h svc_handle = NULL;
+
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = __ug_closed_cb;
+ cbs.priv = (void *)cd;
- bundle_free(b);
+ char preview_data[DEF_BUF_LEN_S] = { 0, };
+ D_MSG("[DEBUG] hex address [%x]", (unsigned int)msg_data);
+ snprintf(preview_data, sizeof(preview_data)-1, "%x", (unsigned int)msg_data);
+ D_MSG("[DEBUG] hex address [%s]", preview_data);
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
+
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_PREVIEW_MODE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_PREVIEW_DATA, preview_data);
+
+ ug = ug_create(cd->ug, TXT_UG_NAME_MSG_VIEWER, UG_MODE_FULLVIEW, svc_handle, &cbs);
+
+ service_destroy(svc_handle);
D_LEAVE;
return ug;
}
-struct ui_gadget *msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b)
+ui_gadget_h ug_calendar_create(void *data)
{
D_ENTER;
- D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
- struct ui_gadget *ug;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ ui_gadget_h ug;
struct ug_cbs cbs;
+ service_h svc_handle = NULL;
cbs.layout_cb = __ug_layout_cb;
- cbs.result_cb = NULL;
+ cbs.result_cb = __ug_calendar_result_cb;
cbs.destroy_cb = __ug_closed_cb;
- cbs.priv = cd;
+ cbs.priv = (void *)cd;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
+
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_FILE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MAX, MSG_BUNDLE_VALUE_CALENDAR_MAX);
+
+ ug = ug_create(cd->ug, TXT_UG_NAME_CALENDAR, UG_MODE_FULLVIEW, svc_handle, &cbs);
+
+ service_destroy(svc_handle);
- ug = ug_create(cd->ug, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, b, &cbs);
- cd->loaded_ug = ug;
D_LEAVE;
return ug;
}
+ui_gadget_h ug_memo_create(void *data)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0, };
+ service_h svc_handle = NULL;
+
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = __ug_memo_result_cb;
+ cbs.destroy_cb = __ug_closed_cb;
+ cbs.priv = (void *)cd;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
+
+ ug = ug_create(cd->ug, TXT_UG_NAME_MEMO, UG_MODE_FULLVIEW, svc_handle, &cbs);
+
+ service_destroy(svc_handle);
+
+ return ug;
+}
+
+ui_gadget_h ug_gallery_create(void *data)
+{
+ D_ENTER;
+
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0, };
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ service_h svc_handle = NULL;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
+
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_LAUNCH_TYPE, MSG_BUNDLE_VALUE_SELECT_MULTIPLE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FILE_TYPE, MSG_BUNDLE_VALUE_GALLERY_ALL);
+
+ cbs.layout_cb = __ug_layout_cb;
+ cbs.result_cb = __ug_gallery_return_cb;
+ cbs.destroy_cb = __ug_closed_cb;
+ cbs.priv = data;
+
+ ug = ug_create(cd->ug, TXT_UG_NAME_GALLERY, UG_MODE_FULLVIEW, svc_handle, &cbs);
+
+ service_destroy(svc_handle);
+
+ D_LEAVE;
+ return ug;
+}
+
+static void __appsvc_camera_result_cb(service_h request, service_h reply, service_result_e result, void *data)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ int ret = 0;
+ D_MSG("result : %d", result);
+
+ if (result == SERVICE_RESULT_SUCCEEDED) {
+ char *result_filename;
+ ret = service_get_extra_data(reply, SERVICE_DATA_SELECTED, &result_filename);
+ if (ret != SERVICE_ERROR_NONE) {
+ D_EMSG("service_get_extra_data() is failed : %d", ret);
+ return;
+ }
+
+ if (result_filename) {
+ cd->attachlist = eina_list_append(cd->attachlist, g_strdup(result_filename));
+ } else {
+ D_EMSG("No result");
+ }
+ }
+
+ __msg_ui_composer_external_closed(cd);
+
+ D_LEAVE;
+}
+
+int appsvc_take_picture(void *data)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ int ret;
+ service_h svc_handle = NULL;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ service_set_operation(svc_handle, SERVICE_OPERATION_CREATE_CONTENT);
+ service_set_mime(svc_handle, "image/jpg");
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CALLER, MESSAGE_PKGNAME);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESOLUTION, MSG_BUNDLE_VALUE_VGA);
+
+ ret = service_send_launch_request(svc_handle, __appsvc_camera_result_cb, cd);
+ if (ret != SERVICE_ERROR_NONE) {
+ D_EMSG("service_send_launch_request is failed ret = %d", ret);
+ service_destroy(svc_handle);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ service_destroy(svc_handle);
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+int appsvc_take_camcorder(void *data)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ int ret;
+ service_h svc_handle = NULL;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ service_set_operation(svc_handle, SERVICE_OPERATION_CREATE_CONTENT);
+ service_set_mime(svc_handle, "video/3gp");
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CALLER, MESSAGE_PKGNAME);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESOLUTION, MSG_BUNDLE_VALUE_QCIF);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_LIMIT, MSG_BUNDLE_VALUE_CAM_LIMIT_SIZE);
+
+ ret = service_send_launch_request(svc_handle, __appsvc_camera_result_cb, cd);
+ if (ret != SERVICE_ERROR_NONE) {
+ D_EMSG("service_send_launch_request is failed ret = %d", ret);
+ service_destroy(svc_handle);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ service_destroy(svc_handle);
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static void __appsvc_record_voice_result_cb(bundle *b, int reserved, appsvc_result_val result, void *data)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ if (result == APPSVC_RES_OK) {
+ const char *result_filename = appsvc_get_data(b, APPSVC_DATA_SELECTED);
+ if (result_filename) {
+ D_MSG("result file name : %s", result_filename);
+ cd->attachlist = eina_list_append(cd->attachlist, g_strdup(result_filename));
+ } else {
+ D_MSG("No result");
+ }
+ }
+ __msg_ui_composer_external_closed(cd);
+ D_LEAVE;
+}
+
+int appsvc_record_voice(void *data)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ int ret;
+ bundle *b;
+
+ b = bundle_create();
+ appsvc_set_operation(b, APPSVC_OPERATION_CREATE_CONTENT);
+ appsvc_set_mime(b, "audio/amr"); /*"audio/mp4" for high quality*/
+ appsvc_add_data(b, "SIZE", MSG_BUNDLE_VALUE_VR_LIMIT_SIZE); /* unit:KB (if max size is not set, no limit.)*/
+ ret = appsvc_run_service(b, 0, __appsvc_record_voice_result_cb, cd);
+ bundle_free(b);
+
+ if (ret < APPSVC_RET_OK) {
+ D_EMSG("appsvc_run_service is failed ret = %d", ret);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+int appsvc_launch_app(const char *uri)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(uri == NULL, COMPOSER_RETURN_FAIL, "uri is NULL");
+ int ret;
+
+ bundle *b = bundle_create();
+ appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
+ appsvc_set_uri(b, uri);
+ ret = appsvc_run_service(b, 0, NULL, NULL);
+ bundle_free(b);
+
+ if (ret < APPSVC_RET_OK) {
+ D_EMSG("appsvc_run_service is failed ret = %d", ret);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static void __msg_ui_composer_external_closed(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ if (cd->attachlist) {
+ msg_ui_composer_body_items_add(cd);
+ }
+
+ if (cd->loaded_aul || cd->state == COMPOSER_STATE_TYPE_RUNNING) {
+ if (!msg_ui_composer_popup_exist(cd)) {
+ D_MSG("set last focus via external");
+ msg_ui_composer_last_focus_load(cd);
+ }
+ }
+
+ D_LEAVE;
+}
+
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;
+ ui_gadget_h external_ug = NULL;
switch (ext_type) {
+ case COMPOSER_EXT_TYPE_GALLERY:
+ external_ug = ug_gallery_create(cd);
+ break;
+
+ case COMPOSER_EXT_TYPE_MYFILE:
+ external_ug = ug_myfile_create(cd);
+ break;
+
case COMPOSER_EXT_TYPE_LOG:
external_ug = ug_calllog_create(cd);
break;
@@ -412,6 +1085,22 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_external_ug_call(MSG_COMPOSER_VIEW_DATA_S
case COMPOSER_EXT_TYPE_CONTACTLIST:
external_ug = ug_contact_checklist_create(cd);
break;
+
+ case COMPOSER_EXT_TYPE_NAMECARD:
+ external_ug = ug_namecard_create(cd);
+ break;
+
+ case COMPOSER_EXT_TYPE_CALENDAR:
+ external_ug = ug_calendar_create(cd);
+ break;
+
+ case COMPOSER_EXT_TYPE_MEMO:
+ external_ug = ug_memo_create(cd);
+ break;
+ case COMPOSER_EXT_TYPE_MSGVIEWER:
+ external_ug = ug_msgviewer_create(cd, reserved);
+ break;
+
default:
D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type);
ret = COMPOSER_RETURN_FAIL;
@@ -427,18 +1116,66 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_external_ug_call(MSG_COMPOSER_VIEW_DATA_S
return ret;
}
+COMPOSER_RETURN_TYPE_E msg_ui_composer_external_aul_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;
+
+ switch (ext_type) {
+ case COMPOSER_EXT_TYPE_CAMERA:
+ ret = appsvc_take_picture(cd);
+ break;
+ case COMPOSER_EXT_TYPE_CAMCORDER:
+ ret = appsvc_take_camcorder(cd);
+ break;
+ case COMPOSER_EXT_TYPE_VOICEREC:
+ ret = appsvc_record_voice(cd);
+ break;
+ case COMPOSER_EXT_TYPE_COMMON:
+ ret = appsvc_launch_app(reserved);
+ break;
+
+ default:
+ D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type);
+ ret = COMPOSER_RETURN_FAIL;
+ break;
+ }
+
+ if (ret != COMPOSER_RETURN_FAIL)
+ cd->loaded_aul = TRUE;
+
+ D_MSG("%d", cd->loaded_aul);
+ 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);
+ D_MSG("Launch external call type[%d]", ext_type);
switch (ext_type) {
+ case COMPOSER_EXT_TYPE_GALLERY:
+ case COMPOSER_EXT_TYPE_MYFILE:
case COMPOSER_EXT_TYPE_LOG:
case COMPOSER_EXT_TYPE_CONTACTLIST:
+ case COMPOSER_EXT_TYPE_NAMECARD:
+ case COMPOSER_EXT_TYPE_CALENDAR:
+ case COMPOSER_EXT_TYPE_MEMO:
+ case COMPOSER_EXT_TYPE_MSGVIEWER:
ret = msg_ui_composer_external_ug_call(cd, ext_type, reserved);
break;
+
+ case COMPOSER_EXT_TYPE_VOICEREC:
+ case COMPOSER_EXT_TYPE_CAMERA:
+ case COMPOSER_EXT_TYPE_CAMCORDER:
+ case COMPOSER_EXT_TYPE_COMMON:
+ ret = msg_ui_composer_external_aul_call(cd, ext_type, reserved);
+ break;
+
default:
D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type);
ret = COMPOSER_RETURN_FAIL;
@@ -448,4 +1185,3 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_external_call(MSG_COMPOSER_VIEW_DATA_S *c
D_LEAVE;
return ret;
}
-
diff --git a/composer/src/gadget/msg-ui-composer-gadget.c b/composer/src/gadget/msg-ui-composer-gadget.c
index 1e840c5..9a269e6 100755
--- a/composer/src/gadget/msg-ui-composer-gadget.c
+++ b/composer/src/gadget/msg-ui-composer-gadget.c
@@ -14,9 +14,9 @@
* 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"
@@ -26,24 +26,26 @@
#define UG_MODULE_API __attribute__ ((visibility("default")))
#endif
-static void __base_layout_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+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;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
- if (!pcomp_data)
+ if (!cd)
return;
- msg_ui_composer_destroy(pcomp_data);
+ msg_ui_composer_destroy(cd);
D_LEAVE;
}
-static void *__msg_ui_composer_on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv)
+static void *__msg_ui_composer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h data, void *priv)
{
D_ENTER;
- MSG_COMPOSER_VIEW_DATA_S *pcomp_data;
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ int win_w = 0;
+ int win_h = 0;
if (ug == NULL || priv == NULL) {
D_EMSG("[ASSERT] ug = %p, priv = %p", ug, priv);
@@ -52,72 +54,87 @@ static void *__msg_ui_composer_on_create(struct ui_gadget *ug, enum ug_mode mode
bindtextdomain("message", LOCALEDIR);
- pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv;
- pcomp_data->ug = ug;
+ cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+ cd->ug = ug;
- pcomp_data->main_window = ug_get_window();
+ cd->main_window = ug_get_window();
- if (pcomp_data->main_window == NULL) {
+ if (cd->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) {
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &win_w, &win_h);
+ cd->window_w = win_w;
+ cd->window_h = win_h;
+ D_MSG("screen width = %d, screen_height = %d", win_w, win_h);
+
+ cd->base = msg_ui_composer_layout_create(cd->main_window, true);
+ if (cd->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");
+ char *from = NULL;
+ char *thread_id = NULL;
+ char *msg_id = NULL;
- 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;
- }
+ cd->bg = msg_ui_composer_bg_create(cd->base);
+ elm_object_part_content_set(cd->base, "elm.swallow.bg", cd->bg);
+ elm_object_style_set(cd->bg, "edit_mode");
+
+ service_get_extra_data(data, MSG_BUNDLE_KEY_FROM, &from);
- 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;
+ if (from && g_strcmp0(from, MSG_BUNDLE_VALUE_INTERNAL) == 0)
+ cd->isMsgInternal = true;
+ else
+ cd->isMsgInternal = false;
+
+ service_get_extra_data(data, MSG_BUNDLE_KEY_THREAD_ID, &thread_id);
+ service_get_extra_data(data, MSG_BUNDLE_KEY_MSG_ID, &msg_id);
+ if (thread_id || msg_id) {
+ cd->msg_ug_mode = MSG_UG_MODE_BUBBLE_COMPOSER;
} else {
- if (pcomp_data->isMsgInternal == true) {
- pcomp_data->msg_ug_mode = MSG_UG_MODE_FULL_COMPOSER;
+ if (cd->isMsgInternal == true) {
+ cd->msg_ug_mode = MSG_UG_MODE_FULL_COMPOSER;
} else {
- pcomp_data->msg_ug_mode = MSG_UG_MODE_ONLY_COMPOSER;
+ cd->msg_ug_mode = MSG_UG_MODE_ONLY_COMPOSER;
}
}
- D_MSG("UG MODE %d[Internal = %d]", pcomp_data->msg_ug_mode, pcomp_data->isMsgInternal);
+ D_MSG("UG MODE %d[Internal = %d]", cd->msg_ug_mode, cd->isMsgInternal);
- pcomp_data->isFullview = true;
+ cd->isFullview = true;
- evas_object_event_callback_add(pcomp_data->base, EVAS_CALLBACK_DEL, __base_layout_delete_cb, pcomp_data);
+ evas_object_event_callback_add(cd->base, EVAS_CALLBACK_DEL, __base_layout_delete_cb, cd);
- if (msg_ui_composer_init(pcomp_data) != COMPOSER_RETURN_SUCCESS) {
+ if (msg_ui_composer_init(cd) != COMPOSER_RETURN_SUCCESS) {
D_EMSG("msg_ui_composer_init error");
return NULL;
}
- if (msg_ui_composer_create(pcomp_data) != COMPOSER_RETURN_SUCCESS) {
+ if (msg_ui_composer_create(cd) != COMPOSER_RETURN_SUCCESS) {
D_EMSG("creating main layout failed");
return NULL;
}
- return pcomp_data->base;
+ return cd->base;
}
-static void __msg_ui_composer_on_start(struct ui_gadget *ug, bundle *data, void *priv)
+static void __msg_ui_composer_on_start(ui_gadget_h ug, service_h data, void *priv)
{
D_ENTER;
- MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+
+ msg_ui_composer_start(cd, data);
- msg_ui_composer_start(pcomp_data, data);
+ msg_common_apply_font_size("entry", cd->content_layout);
+ msg_ui_composer_apply_font_size(cd);
D_LEAVE;
}
-static void __msg_ui_composer_on_pause(struct ui_gadget *ug, bundle *data, void *priv)
+static void __msg_ui_composer_on_pause(ui_gadget_h ug, service_h data, void *priv)
{
D_ENTER;
MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
@@ -132,13 +149,18 @@ static void __msg_ui_composer_on_pause(struct ui_gadget *ug, bundle *data, void
D_LEAVE;
}
-static void __msg_ui_composer_on_resume(struct ui_gadget *ug, bundle *data, void *priv)
+static void __msg_ui_composer_on_resume(ui_gadget_h ug, service_h 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");
+ if (!cd->loaded_ug)
+ msg_common_apply_font_size("entry", cd->content_layout);
+
+ msg_ui_composer_apply_font_size(cd);
+
cd->state = COMPOSER_STATE_TYPE_RUNNING;
cd->loaded_aul = FALSE;
@@ -151,7 +173,7 @@ static void __msg_ui_composer_on_resume(struct ui_gadget *ug, bundle *data, void
D_LEAVE;
}
-static void __msg_ui_composer_on_destroy(struct ui_gadget *ug, bundle *data, void *priv)
+static void __msg_ui_composer_on_destroy(ui_gadget_h ug, service_h data, void *priv)
{
D_ENTER;
@@ -174,30 +196,19 @@ static void __msg_ui_composer_on_destroy(struct ui_gadget *ug, bundle *data, voi
D_LEAVE;
}
-static void __msg_ui_composer_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv)
+static void __msg_ui_composer_on_message(ui_gadget_h ug, service_h msg, service_h 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);
- }
- }
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv;
+ if (msg)
+ msg_ui_composer_reset_request(cd, msg);
D_LEAVE;
}
-static void __msg_ui_composer_on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv)
+static void __msg_ui_composer_on_event(ui_gadget_h ug, enum ug_event event, service_h data, void *priv)
{
D_ENTER;
switch (event) {
@@ -207,6 +218,18 @@ static void __msg_ui_composer_on_event(struct ui_gadget *ug, enum ug_event event
break;
case UG_EVENT_LANG_CHANGE:
break;
+ case UG_EVENT_ROTATE_PORTRAIT:
+ msg_ui_composer_rotate(priv, COMPOSER_ROTATE_PORTRAIT);
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+ msg_ui_composer_rotate(priv, COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN);
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE:
+ msg_ui_composer_rotate(priv, COMPOSER_ROTATE_LANDSCAPE);
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+ msg_ui_composer_rotate(priv, COMPOSER_ROTATE_LANDSCAPE_UPSIDEDOWN);
+ break;
default:
break;
}
@@ -219,11 +242,11 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
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));
+ MSG_COMPOSER_VIEW_DATA_S *cd = NULL;
+ cd = (MSG_COMPOSER_VIEW_DATA_S *)calloc(1, sizeof(MSG_COMPOSER_VIEW_DATA_S));
- if (!pcomp_data) {
- D_EMSG("[ERROR] pcomp_data calloc failed");
+ if (!cd) {
+ D_EMSG("[ERROR] cd calloc failed");
return COMPOSER_RETURN_FAIL;
}
@@ -235,7 +258,7 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
ops->message = __msg_ui_composer_on_message;
ops->event = __msg_ui_composer_on_event;
ops->key_event = NULL;
- ops->priv = (void *)pcomp_data;
+ ops->priv = (void *)cd;
ops->opt = UG_OPT_INDICATOR_PORTRAIT_ONLY;
return MSG_UI_RET_SUCCESS;
@@ -248,10 +271,10 @@ UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
return;
}
- MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)ops->priv;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)ops->priv;
- if (pcomp_data) {
- free(pcomp_data);
+ if (cd) {
+ free(cd);
ops->priv = NULL;
}
diff --git a/composer/src/message/msg-ui-composer-message.c b/composer/src/message/msg-ui-composer-message.c
index c58160d..45f2ab1 100755
--- a/composer/src/message/msg-ui-composer-message.c
+++ b/composer/src/message/msg-ui-composer-message.c
@@ -14,18 +14,40 @@
* limitations under the License.
*/
+
/* includes*/
-#include "msg-ui-composer-core.h"
+#include "msg-ui-composer-subject.h"
+#include "msg-ui-composer-util.h"
#include "msg-ui-composer-body.h"
#include "msg-ui-composer-message.h"
#include "msg-ui-composer-message-data.h"
+#include "msg-ui-composer-attachment.h"
#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-recipient.h"
-#include <MapiMessage.h>
-#include <MapiTransport.h>
#include <glib-object.h>
#include <glib.h>
-#include <MsgSettingTypes.h>
+
+/* defines */
+#define MSG_DATA_TEMPPATH DATADIR "/"
+
+#define MSG_COMPOSER_SMIL_SCREEN_WIDTH 480
+#define MSG_COMPOSER_SMIL_SCREEN_HEIGHT 800
+
+#define MSG_COMPOSER_SMIL_POS_TOP 1
+#define MSG_COMPOSER_SMIL_POS_BOTTOM 50
+#define MSG_COMPOSER_SMIL_POS_LEFT 0
+
+#define MSG_COMPOSER_SMIL_REGION_WIDTH 100
+#define MSG_COMPOSER_SMIL_REGION_HEIGHT 50
+
+#define MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR 0xFFFFFF
+#define MSG_COMPOSER_PAGE_DEFAULT_DURATION 5000 //(msec)
+#define MSG_COMPOSER_SMIL_DEFAULT_FONT_COLOR 0x000000
+#define MSG_COMPOSER_SMIL_DEFAULT_FONT_SIZE 30
+#define MSG_COMPOSER_SMIL_DEFAULT_BOLD false
+#define MSG_COMPOSER_SMIL_DEFAULT_UNDERLINE false
+
/* globals */
@@ -46,7 +68,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_init()
if (msg_data != NULL)
free(msg_data);
- msg_data = (MSG_COMP_MSG_DATA_S *) calloc(1, sizeof(MSG_COMP_MSG_DATA_S));
+ 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");
@@ -84,7 +106,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_destroy()
return COMPOSER_RETURN_SUCCESS;
}
-COMPOSER_RETURN_TYPE_E msg_ui_composer_add_address(char *number)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_address(char *number)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -99,10 +121,18 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_add_address(char *number)
return COMPOSER_RETURN_SUCCESS;
}
+GSList *msg_ui_composer_message_get_address(void)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(msg_data == NULL, NULL, "msg_data is NULL. need to init");
+
+ return msg_data->recp_list;
+}
+
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");
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL. need to init");
return COMPOSER_RETURN_NULL_POINTER;
}
@@ -124,6 +154,173 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_sms_body(char *body_text)
return COMPOSER_RETURN_SUCCESS;
}
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_subject(char *subject, int length)
+{
+ D_ENTER;
+ if (msg_data == NULL || subject == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is NULL or no subject");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (subject && length > 0)
+ msg_data->mms_data.isSubject = true;
+
+ if (length <= sizeof(msg_data->mms_data.subject))
+ strncpy(msg_data->mms_data.subject, subject, length);
+ else
+ strncpy(msg_data->mms_data.subject, subject, sizeof(msg_data->mms_data.subject)-1);
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_attach_count(int attach_count)
+{
+ D_ENTER;
+
+ if (!msg_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
+
+ mms_data->attach_count = attach_count;
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_attachments(const char *filepath, int filetype)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(ecore_file_exists(filepath) == EINA_FALSE, COMPOSER_RETURN_FAIL,"File is NOT exist");
+
+ if (!msg_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
+ int attach_count = mms_data->attach_count;
+
+ int i = 0;
+ for (i = 0; i < attach_count; i++) {
+ if (strlen(mms_data->attachlist[i].filepath) <= 0) {
+ mms_data->attachlist[i].filetype = filetype;
+
+ strncpy(mms_data->attachlist[i].filepath, filepath, strlen(filepath));
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] attachment file path : [%s]", mms_data->attachlist[i].filepath);
+ break;
+ }
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_page_count(int page_count)
+{
+ D_ENTER;
+
+ if (!msg_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ msg_data->mms_data.page_count = page_count;
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_is_text_top(bool isTextTop)
+{
+ D_ENTER;
+
+ if (!msg_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ msg_data->mms_data.isTextTop = isTextTop;
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_text(const char *text, int nPage)
+{
+ D_ENTER;
+
+ if (!msg_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist !!");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
+ int text_len = 0;
+
+ if (text)
+ text_len = strlen(text);
+
+ if (text && text_len > 0) {
+ mms_data->pagelist[nPage].isText = true;
+
+ if (text_len <= COMPOSER_MMS_TEXT_MAX_BYTE)
+ strncpy(mms_data->pagelist[nPage].body_text, text, text_len);
+ else
+ strncpy(mms_data->pagelist[nPage].body_text, text, COMPOSER_MMS_TEXT_MAX_BYTE);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] no text");
+ mms_data->pagelist[nPage].isText = false;
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_media(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type, int nPage, int duration)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(ecore_file_exists(file_path) == EINA_FALSE, COMPOSER_RETURN_FAIL,"File is NOT exist");
+
+ if (!msg_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is NOT exist");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
+
+ if (!file_path) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No file path");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ switch (media_type) {
+
+ case COMPOSER_MEDIA_TYPE_IMAGE:
+ mms_data->pagelist[nPage].isImage = true;
+ strncpy(mms_data->pagelist[nPage].image_file_path, file_path, strlen(file_path));
+ break;
+ case COMPOSER_MEDIA_TYPE_VIDEO:
+ mms_data->pagelist[nPage].isVideo = true;
+ strncpy(mms_data->pagelist[nPage].image_file_path, file_path, strlen(file_path));
+ break;
+ case COMPOSER_MEDIA_TYPE_AUDIO:
+ mms_data->pagelist[nPage].isSound = true;
+ strncpy(mms_data->pagelist[nPage].sound_file_path, file_path, strlen(file_path));
+ mms_data->pagelist[nPage].page_duration = duration;
+ break;
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid media type");
+ return COMPOSER_RETURN_INVALID_MEDIA_TYPE;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
/*****************************************************
*
@@ -142,13 +339,25 @@ static COMPOSER_RETURN_TYPE_E __msg_ui_composer_set_recipient()
int count = g_slist_length(msg_data->recp_list);
int i = 0;
+ msg_struct_list_s *addr_list = NULL;
+
+ msg_get_list_handle(msg_data->msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void**)&addr_list);
+ addr_list->nCount = count;
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;
+ if (address == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] address is value NULL, skip");
+ continue;
}
+
+ int addr_type = get_address_type((const char*)address);
+ if (addr_type == COMPOSER_UTIL_ADDRTYPE_NUMBER)
+ msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_PLMN);
+ else if (addr_type == COMPOSER_UTIL_ADDRTYPE_EMAIL)
+ msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_EMAIL);
+ msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_RECIPIENT_TYPE_INT, MSG_RECIPIENTS_TYPE_TO);
+ msg_set_str_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, address, strlen(address));
}
return COMPOSER_RETURN_SUCCESS;
@@ -159,13 +368,14 @@ 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_release_struct(&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 !!");
+ msg_data->msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+
+ if (msg_data->msgInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_create_struct failed");
return COMPOSER_RETURN_FAIL;
}
@@ -181,8 +391,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message()
return COMPOSER_RETURN_FAIL;
}
- if (msg_ui_comp_core_release_message(msg_data->msgInfo)
- != COMPOSER_RETURN_SUCCESS) {
+ if (msg_release_struct(&msg_data->msgInfo) != MSG_SUCCESS) {
MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is already destroyed !!");
return COMPOSER_RETURN_FAIL;
}
@@ -190,73 +399,267 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message()
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)
+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_handle == NULL || opt == NULL) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message handle or option data is NULL");
- return COMPOSER_RETURN_NULL_POINTER;
+ if (msg_data == NULL || msg_data->msgInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!");
+ return COMPOSER_RETURN_FAIL;
}
- COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+ int err = MSG_SUCCESS;
+ /* set message type to SMS */
+ if (msg_set_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, MSG_TYPE_SMS) != MSG_SUCCESS) {
+ 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_data->sms_data.body_text)
+ err = msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SMS_DATA_STR, msg_data->sms_data.body_text, strlen(msg_data->sms_data.body_text));
+ else
+ err = msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SMS_DATA_STR, NULL, 0);
- 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 (err != MSG_SUCCESS) {
+ 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;
}
- 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;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_smil_header(msg_handle_t msg_handle, msg_struct_t mms_data, bool isTextTop)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ if (!mms_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL");
+ return COMPOSER_RETURN_FAIL;
}
+ msg_struct_t text_region = NULL;
+ msg_struct_t image_region = NULL;
+
+ /************ make rootlayout ***************/
+ msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_WIDTH_INT, MSG_COMPOSER_SMIL_SCREEN_WIDTH);
+ msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_HEIGHT_INT, MSG_COMPOSER_SMIL_SCREEN_HEIGHT);
+ msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR);
+
+ /************ make region ********************/
+ /* 1. add text region */
+ msg_mms_add_item(mms_data, MSG_STRUCT_MMS_REGION, &text_region);
+ msg_set_str_value(text_region, MSG_MMS_REGION_ID_STR, "Text", strlen("Text"));
+ msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_LEFT_INT, MSG_COMPOSER_SMIL_POS_LEFT);
+
+ if (isTextTop)
+ msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_TOP);
+ else
+ msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_BOTTOM);
+
+ msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_WIDTH_INT, MSG_COMPOSER_SMIL_REGION_WIDTH);
+ msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_HEIGHT_INT, MSG_COMPOSER_SMIL_REGION_HEIGHT);
+ msg_set_int_value(text_region, MSG_MMS_REGION_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR);
+
+ /* 2. image(video) region */
+ msg_mms_add_item(mms_data, MSG_STRUCT_MMS_REGION, &image_region);
+ msg_set_str_value(image_region, MSG_MMS_REGION_ID_STR, "Image", strlen("Image"));
+ msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_LEFT_INT, MSG_COMPOSER_SMIL_POS_LEFT);
+
+ if (isTextTop)
+ msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_BOTTOM);
+ else
+ msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_TOP);
+
+ msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_WIDTH_INT, MSG_COMPOSER_SMIL_REGION_WIDTH);
+ msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_HEIGHT_INT, MSG_COMPOSER_SMIL_REGION_HEIGHT);
+ msg_set_int_value(image_region, MSG_MMS_REGION_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR);
+
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
- return ret;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_mms_body(msg_handle_t msg_handle, msg_struct_t fw_mms_data)
+{
+ D_ENTER;
+
+ if (!msg_data || !fw_mms_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data or FW mms data pointer is NULL");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ MSG_COMP_MMS_DATA_S *ui_mms_data = &msg_data->mms_data;
+ int page_count = ui_mms_data->page_count;
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ msg_struct_t page_info = NULL;
+ int page_duration = 0;
+
+ /* verify page duration */
+ if (MSG_COMPOSER_PAGE_DEFAULT_DURATION < ui_mms_data->pagelist[i].page_duration)
+ page_duration = ui_mms_data->pagelist[i].page_duration;
+ else
+ page_duration = MSG_COMPOSER_PAGE_DEFAULT_DURATION;
+
+ /* 1. make page */
+ if (msg_mms_add_item(fw_mms_data, MSG_STRUCT_MMS_PAGE, &page_info) != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] create mms page error");
+ return COMPOSER_RETURN_FAIL;
+ }
+ msg_set_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, page_duration);
+
+ /* 2. add media */
+ /* 1) text */
+ if (ui_mms_data->pagelist[i].isText) {
+ FILE *fp;
+ char szFilePath[DEF_BUF_LEN_L] = { 0x00, };
+ char szFileName[DEF_BUF_LEN_L] = { 0x00, };
+ char strMsg[COMPOSER_MMS_TEXT_MAX_BYTE + 1] = { 0x00, };
+
+ msg_struct_t added_media = NULL;
+ msg_struct_t text_style = NULL;
+
+ /* create txt file */
+ snprintf(szFilePath, sizeof(szFilePath), "%sMMS_Temp_%d.txt", MSG_DATA_TEMPPATH, i + 1);
+ snprintf(szFileName, sizeof(szFileName), "MMS_Temp_%d.txt", i + 1);
+
+ fp = fopen(szFilePath, "wb");
+ if (!fp) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "fopen error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ strncpy(strMsg, ui_mms_data->pagelist[i].body_text, sizeof(strMsg) - 1);
+ fwrite(strMsg, strlen(strMsg), 1, fp);
+ fclose(fp);
+
+ msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
+ msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_TEXT);
+ msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Text", strlen("Text"));
+ msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath, strlen(szFilePath));
+
+ /** set font style */
+ text_style = msg_create_struct(MSG_STRUCT_MMS_SMIL_TEXT);
+ msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_COLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_FONT_COLOR);
+ msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_SIZE_INT, MSG_COMPOSER_SMIL_DEFAULT_FONT_SIZE);
+ msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_BOLD_BOOL, MSG_COMPOSER_SMIL_DEFAULT_BOLD);
+ msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_BOLD_BOOL, MSG_COMPOSER_SMIL_DEFAULT_UNDERLINE);
+
+ msg_set_struct_handle(added_media, MSG_MMS_MEDIA_SMIL_TEXT_HND, text_style);
+ msg_release_struct(&text_style);
+ }
+
+ /* 2) image / video */
+ if (ui_mms_data->pagelist[i].isImage) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] image file added");
+ msg_struct_t added_media = NULL;
+ char *filepath = ui_mms_data->pagelist[i].image_file_path;
+
+ msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
+ msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_IMG);
+ msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Image", strlen("Image"));
+ msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath));
+ } else if (ui_mms_data->pagelist[i].isVideo) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] video file added");
+ msg_struct_t added_media = NULL;
+ char *filepath = ui_mms_data->pagelist[i].image_file_path;
+
+ msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
+ msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_VIDEO);
+ msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Image", strlen("Image"));
+ msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath));
+ }
+ /* 3) sound */
+ if (ui_mms_data->pagelist[i].isSound) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sound file added");
+ msg_struct_t added_media = NULL;
+ char *filepath = ui_mms_data->pagelist[i].image_file_path;
+
+ msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
+ msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_AUDIO);
+ msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath));
+ }
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
}
-static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_sms_message(MSG_HANDLE_T msg_handle)
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_mms_message(msg_handle_t msg_handle)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ msg_struct_t fw_mms_data = NULL;
+ MSG_COMP_MMS_DATA_S ui_mms_data = { 0, };
+
if (msg_data == NULL || msg_data->msgInfo == NULL) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!");
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data 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 !!");
+
+ ui_mms_data = msg_data->mms_data;
+
+ /* set msg type to MMS */
+ if (msg_set_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, MSG_TYPE_MMS) != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] set message type[MMS] 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 !!");
+ /* create mms data */
+ fw_mms_data = msg_create_struct(MSG_STRUCT_MMS);
+ if (fw_mms_data == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] create mms message error!!");
return COMPOSER_RETURN_FAIL;
}
+
+ /* create smil header <rootlayout> <region> */
+ if (__msg_ui_composer_make_smil_header(msg_handle, fw_mms_data, ui_mms_data.isTextTop) != COMPOSER_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] smil header create error");
+ msg_release_struct(&fw_mms_data);
+ return COMPOSER_RETURN_FAIL;
+ }
+ /* set subject */
+ int subject_len = strlen(ui_mms_data.subject);
+ if (ui_mms_data.isSubject == true || subject_len > 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] Set subject ");
+ if (msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SUBJECT_STR, ui_mms_data.subject, subject_len) != MSG_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] mms set subject error ");
+ }
+ /* set attachment */
+ if (ui_mms_data.attach_count > 0) {
+ int i = 0;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ui_mms_data.attach_count = %d", ui_mms_data.attach_count);
+
+ if (ui_mms_data.attach_count > COMPOSER_MMS_MAX_ATTACH_COUNT) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] attachment count error, max count change");
+ ui_mms_data.attach_count = COMPOSER_MMS_MAX_ATTACH_COUNT;
+ }
+
+ for (i = 0; i < ui_mms_data.attach_count; i++) {
+ MSG_COMP_ATTACH_DATA_S *attach_data = &ui_mms_data.attachlist[i];
+ if (attach_data == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] attachment data is NULL");
+ break;
+ }
+ msg_struct_t attachment = NULL;
+ msg_mms_add_item(fw_mms_data, MSG_STRUCT_MMS_ATTACH, &attachment);
+ msg_set_str_value(attachment, MSG_MMS_ATTACH_FILEPATH_STR, attach_data->filepath, strlen(attach_data->filepath));
+ }
+ }
+ /* make body */
+ /* 1) make page */
+ __msg_ui_composer_make_mms_body(msg_handle, fw_mms_data);
+
+ /* 2) set MMS body */
+ msg_set_mms_struct(msg_data->msgInfo, fw_mms_data);
+ msg_release_struct(&fw_mms_data);
+
/* set recipient */
- if (__msg_ui_composer_set_recipient(msg_data) != COMPOSER_RETURN_SUCCESS) {
+ if (__msg_ui_composer_set_recipient() != COMPOSER_RETURN_SUCCESS) {
MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]__msg_ui_composer_set_recipient error !!");
return COMPOSER_RETURN_FAIL;
}
@@ -264,7 +667,7 @@ static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_sms_message(MSG_HANDLE_T ms
return COMPOSER_RETURN_SUCCESS;
}
-static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(MSG_HANDLE_T msg_handle)
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(msg_handle_t msg_handle)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -273,25 +676,71 @@ static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(MSG_HANDLE_T msg_handle)
return COMPOSER_RETURN_FAIL;
}
- COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
- MSG_REQUEST_S req = { 0 };
+ msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO);
+ int msg_type = MSG_TYPE_INVALID;
+ int err;
+
+ msg_struct_t sendOpt = NULL;
+ msg_get_struct_handle(req, MSG_REQUEST_SENDOPT_HND, &sendOpt);
+ msg_set_bool_value(sendOpt, MSG_SEND_OPT_SETTING_BOOL, false);
- req.msg = msg_data->msgInfo;
- req.sendOpt.bSetting = false;
+ msg_set_struct_handle(req, MSG_REQUEST_MESSAGE_HND, msg_data->msgInfo);
+ msg_get_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, &msg_type);
- if (msg_is_sms(req.msg)) {
+ if (msg_is_sms(msg_type)) {
MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] try to send sms");
- ret = msg_ui_comp_core_send_sms(msg_handle, &req);
+ err = msg_sms_send_message(msg_handle, req);
+ } else if (msg_is_mms(msg_type)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] try to send mms");
+ err = msg_mms_send_message(msg_handle, req);
} else {
MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] error message type");
- msg_ui_comp_core_release_message(msg_data->msgInfo);
+ msg_release_struct(&req);
return COMPOSER_RETURN_FAIL;
}
- return ret;
+ msg_release_struct(&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;
+ }
+}
+
+msg_struct_t msg_ui_composer_message_make_preview(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 NULL;
+ }
+
+ if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] create new message error !!!");
+ return NULL;
+ }
+
+ if (__msg_ui_composer_make_mms_message(msg_handle)
+ != COMPOSER_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] make mms message error !!!");
+ return NULL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return msg_data->msgInfo;
}
-COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_handle)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(msg_handle_t msg_handle, msg_thread_id_t *tid)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -302,8 +751,8 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_ha
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){
+ /* 1. create a new message (create msg_struct_t) */
+ if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) {
return COMPOSER_RETURN_FAIL;
}
@@ -311,23 +760,105 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_ha
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 if (msg_data->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ if (__msg_ui_composer_make_mms_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) {
+ if (ret != COMPOSER_RETURN_FAIL) {
ret = __msg_ui_composer_send(msg_handle);
+
+ if (ret == COMPOSER_RETURN_SUCCESS) {
+ msg_struct_list_s *addr_list = NULL;
+
+ msg_get_list_handle(msg_data->msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
+ msg_get_thread_id_by_address(msg_handle, addr_list, tid);
+ }
+ }
+
+ /*4. release message */
+ msg_release_struct(&msg_data->msgInfo);
+ msg_data->msgInfo = NULL;
+
+ return ret;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message(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 save message,,, msg_data is NULL");
+ return COMPOSER_RETURN_FAIL;
}
+
+ COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+
+ /* 1. create a new message (create msg_struct_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 if (msg_data->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ if (__msg_ui_composer_make_mms_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. save message */
+ if (ret != COMPOSER_RETURN_FAIL) {
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ msg_set_bool_value(sendOpt, MSG_SEND_OPT_SETTING_BOOL, false);
+
+ ret = msg_add_message(msg_handle, msg_data->msgInfo, sendOpt);
+
+ msg_release_struct(&sendOpt);
+ }
+
/*4. release message */
- msg_ui_comp_core_release_message(msg_data->msgInfo);
+ msg_release_struct(&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)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_data(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ if (msg_data == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not save message,,, msg_data is NULL");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, cd == NULL, COMPOSER_RETURN_FAIL);
+
+ if (msg_ui_composer_recipient_read_data(cd) != COMPOSER_RETURN_SUCCESS) {
+ D_EMSG("Make recipient data Error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (__msg_ui_composer_body_read_data(cd) != COMPOSER_RETURN_SUCCESS) {
+ D_EMSG("Make body data Error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(msg_handle_t msg_handle, int msgID)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -336,45 +867,208 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(MSG_HANDLE_T msg_han
return COMPOSER_RETURN_NULL_POINTER;
}
- msg_message_t load_msg = NULL;
-
- MSG_SENDINGOPT_S sendOpt = { 0, };
+ msg_struct_t load_msg = NULL;
+ msg_struct_t sendOpt = NULL;
+ msg_struct_t mmsBody = NULL;
/* create new message */
- if (msg_ui_comp_core_create_new_message(&load_msg)
- != COMPOSER_RETURN_SUCCESS) {
+ load_msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ if (load_msg == NULL) {
MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] message create message failed.");
return COMPOSER_RETURN_FAIL;
}
+ sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ if (sendOpt == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] message create sendopt failed.");
+ msg_release_struct(&load_msg);
+ return COMPOSER_RETURN_FAIL;
+ }
/* load message */
- if (msg_ui_comp_core_get_message(msg_handle, load_msg, msgID, &sendOpt)
- != COMPOSER_RETURN_SUCCESS) {
+ if (msg_get_message(msg_handle,(msg_message_id_t)msgID, load_msg, sendOpt) != MSG_SUCCESS) {
MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] msg_get_message failed");
+ msg_release_struct(&load_msg);
+ msg_release_struct(&sendOpt);
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);
+ int msgType;
+ msg_get_int_value(load_msg, MSG_MESSAGE_TYPE_INT, &msgType);
- msg_data->msg_type = msg_type;
+ if (msgType == MSG_TYPE_SMS) {
+ char *body_text = NULL;
+ int body_size = 0;
- if (msg_type == COMPOSER_MSG_TYPE_SMS) {
+ msg_data->msg_type = COMPOSER_MSG_TYPE_SMS;
- char *body_text = NULL;
- msg_ui_comp_core_get_sms_body(load_msg, &body_text);
+ msg_get_int_value(load_msg, MSG_MESSAGE_DATA_SIZE_INT, &body_size);
+
+ if (body_size > 0)
+ body_text = (char *)calloc(1, body_size+1);
+
+ if (body_text)
+ msg_get_str_value(load_msg, MSG_MESSAGE_SMS_DATA_STR, body_text, body_size);
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);
}
+
+ if (body_text)
+ free(body_text);
+
+ } else if (msgType == MSG_TYPE_MMS) {
+ char subject[MAX_SUBJECT_LEN+1] = {0,};
+ msg_data->msg_type = COMPOSER_MSG_TYPE_MMS;
+
+ /* load mms body */
+ mmsBody = msg_create_struct(MSG_STRUCT_MMS);
+ if (mmsBody == NULL) {
+ msg_release_struct(&load_msg);
+ msg_release_struct(&sendOpt);
+ return COMPOSER_RETURN_FAIL;
+ }
+ msg_get_mms_struct(load_msg, mmsBody);
+
+ if (msg_get_str_value(load_msg, MSG_MESSAGE_SUBJECT_STR, subject, MAX_SUBJECT_LEN) != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No subject data");
+ msg_data->mms_data.isSubject = false;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] loaded subject : [%s]", subject);
+ msg_data->mms_data.isSubject = true;
+ strncpy(msg_data->mms_data.subject, subject, COMPOSER_SUBJECT_MAX_BYTE);
+ }
+
+ /* load attachment */
+ msg_list_handle_t attach_list = NULL;
+ msg_get_list_handle(mmsBody, MSG_MMS_ATTACH_LIST_HND, (void **)&attach_list);
+ msg_data->mms_data.attach_count = msg_list_length(attach_list);
+
+ if (msg_data->mms_data.attach_count > 0) {
+ int i = 0;
+
+ for (i = 0; i < msg_data->mms_data.attach_count ; i++) {
+ msg_struct_t attach_info = (msg_struct_t)msg_list_nth_data(attach_list, i);
+
+ if (attach_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] attachment [%d]th item loading error ", i);
+ continue;
+ }
+
+ msg_get_int_value(attach_info, MSG_MMS_ATTACH_MIME_TYPE_INT, &msg_data->mms_data.attachlist[i].filetype);
+ msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, msg_data->mms_data.attachlist[i].filepath, sizeof(msg_data->mms_data.attachlist[i].filepath));
+ msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, msg_data->mms_data.attachlist[i].filename, sizeof(msg_data->mms_data.attachlist[i].filename));
+ }
+ }
+
+ /* load body (page and text, media) */
+ msg_list_handle_t page_list = NULL;
+ msg_get_list_handle(mmsBody, MSG_MMS_PAGE_LIST_HND, (void **)&page_list);
+
+ msg_data->mms_data.page_count = msg_list_length(page_list);
+
+ if (msg_data->mms_data.page_count > 0) {
+ int i = 0;
+
+ for (i = 0; i < msg_data->mms_data.page_count; i++) {
+ msg_struct_t pageInfo = msg_list_nth_data(page_list, i);
+ msg_list_handle_t media_list = NULL;
+ int media_count = 0;
+
+ if (pageInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] MMS PAGE [%d]th page loading error ", i);
+ continue;
+ }
+
+ msg_get_list_handle(pageInfo, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&media_list);
+ media_count = msg_list_length(media_list);
+
+ if (media_count > 0) {
+ int j = 0;
+
+ for (j = 0; j < media_count; j++) {
+ msg_struct_t mediaInfo = (msg_struct_t)msg_list_nth_data(media_list, j);
+ int mediatype;
+
+ if (mediaInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] MMS PAGE [%d]th page loading error ", j);
+ continue;
+ }
+
+ msg_get_int_value(mediaInfo, MSG_MMS_MEDIA_TYPE_INT, &mediatype);
+ /* if media type image or video */
+ if (mediatype == MMS_SMIL_MEDIA_IMG) {
+ msg_data->mms_data.pagelist[i].isImage = true;
+ msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, msg_data->mms_data.pagelist[i].image_file_path, sizeof(msg_data->mms_data.pagelist[i].image_file_path));
+ } else if (mediatype == MMS_SMIL_MEDIA_VIDEO || mediatype == MMS_SMIL_MEDIA_IMG_OR_VIDEO) {
+ msg_data->mms_data.pagelist[i].isVideo = true;
+ msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, msg_data->mms_data.pagelist[i].image_file_path, sizeof(msg_data->mms_data.pagelist[i].image_file_path));
+ } else if (mediatype == MMS_SMIL_MEDIA_AUDIO) {
+ msg_data->mms_data.pagelist[i].isSound = true;
+ msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, msg_data->mms_data.pagelist[i].sound_file_path, sizeof(msg_data->mms_data.pagelist[i].sound_file_path));
+ } else if (mediatype == MMS_SMIL_MEDIA_TEXT) {
+ FILE *fp = NULL;
+ char filepath[DEF_BUF_LEN_L] = {0,};
+ msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, filepath, sizeof(filepath));
+
+ if (access(filepath, R_OK) == 0) {
+ if (!(fp = fopen(filepath, "r"))) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]File Open Error");
+ msg_data->mms_data.pagelist[i].isText = false;
+ continue;
+ }
+
+ struct stat stat_buf;
+ if (stat(filepath, &stat_buf) != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]Getting file information Error");
+ msg_data->mms_data.pagelist[i].isText = false;
+ fclose(fp);
+ continue;
+ }
+
+ if (stat_buf.st_size <= 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]Getting file size is ZERO");
+ msg_data->mms_data.pagelist[i].isText = false;
+ fclose(fp);
+ continue;
+ }
+
+ msg_data->mms_data.pagelist[i].isText = true;
+
+ int result = fread(msg_data->mms_data.pagelist[i].body_text, sizeof(char), stat_buf.st_size, fp);
+ if (result != stat_buf.st_size)
+ D_EMSG("fread result is different!! result = %d, stat_buf.st_size = %d", result, stat_buf.st_size);
+
+ fclose(fp);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] file access failed");
+ msg_data->mms_data.pagelist[i].isText = false;
+ }
+
+ } else {
+ msg_release_struct(&mmsBody);
+ msg_release_struct(&load_msg);
+ msg_release_struct(&sendOpt);
+ return COMPOSER_RETURN_INVALID_MEDIA_TYPE;
+ }
+ }
+ }
+ }
+ }
} else {
+ msg_data->msg_type = COMPOSER_MSG_TYPE_INVALID;
MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid message type");
- msg_ui_comp_core_release_message(load_msg);
+ msg_release_struct(&load_msg);
+ msg_release_struct(&sendOpt);
return COMPOSER_RETURN_INVALID_MSG_TYPE;
}
- msg_ui_comp_core_release_message(load_msg);
+ if (msgType == MSG_TYPE_MMS)
+ msg_release_struct(&mmsBody);
+
+ msg_release_struct(&load_msg);
+ msg_release_struct(&sendOpt);
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
return COMPOSER_RETURN_SUCCESS;
}
@@ -383,11 +1077,43 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_loaded_data(void *composer_da
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ int i = 0;
+
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;
}
+ /* subject */
+ if (msg_data->mms_data.isSubject) {
+ msg_ui_composer_subject_set_loaded_data(composer_data, msg_data->mms_data.subject);
+ }
+
+ /* attachment */
+ for (i = 0; i < msg_data->mms_data.attach_count; i++) {
+ char *filepath = msg_data->mms_data.attachlist[i].filepath;
+ int filetype = msg_data->mms_data.attachlist[i].filetype;
+
+ msg_ui_composer_attachment_set_loaded_data(composer_data, filepath, filetype);
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] MMS PAGE COUNT [%d]", msg_data->mms_data.page_count);
+ for (i = 0; i < msg_data->mms_data.page_count; i++) {
+ if (msg_data->mms_data.pagelist[i].isImage) {
+ msg_ui_composer_body_set_loaded_media(composer_data, msg_data->mms_data.pagelist[i].image_file_path, COMPOSER_MEDIA_TYPE_IMAGE, i);
+ } else if (msg_data->mms_data.pagelist[i].isVideo) {
+ msg_ui_composer_body_set_loaded_media(composer_data, msg_data->mms_data.pagelist[i].image_file_path, COMPOSER_MEDIA_TYPE_VIDEO, i);
+ }
+
+ if (msg_data->mms_data.pagelist[i].isSound) {
+ msg_ui_composer_body_set_loaded_media(composer_data, msg_data->mms_data.pagelist[i].sound_file_path, COMPOSER_MEDIA_TYPE_AUDIO, i);
+ }
+
+ if (msg_data->mms_data.pagelist[i].isText) {
+ msg_ui_composer_body_set_loaded_text(composer_data, msg_data->mms_data.pagelist[i].body_text, i);
+ }
+ }
+
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
return COMPOSER_RETURN_SUCCESS;
}
diff --git a/composer/src/ui-composer/msg-ui-composer-attachment.c b/composer/src/ui-composer/msg-ui-composer-attachment.c
new file mode 100755
index 0000000..3cb1ce6
--- /dev/null
+++ b/composer/src/ui-composer/msg-ui-composer-attachment.c
@@ -0,0 +1,551 @@
+/*
+ * 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-attachment.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-external.h"
+#include "msg-ui-composer-data.h"
+#include "msg-ui-composer-body.h"
+#include "msg-ui-composer-subject.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-util.h"
+#include <msg-ui-common-utility.h>
+
+int64 msg_ui_composer_get_attached_item_size(void *data)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data;
+
+ int64 temp_file_size = 0;
+ Eina_List *list = NULL;
+
+ MSG_COMPOSER_ATTACH_ITEM_S *cai;
+ EINA_LIST_FOREACH(attach_data->attachitem_list, list, cai) {
+ temp_file_size += msg_composer_get_file_size(cai->file_path);
+ }
+
+ D_LEAVE;
+ return temp_file_size;
+}
+
+static void __msgc_update_attach_main_layout(MSG_COMPOSER_VIEW_DATA_S *cd, int attach_count)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "cd is NULL");
+ D_MSG_RETM_IF(cd->ly_attach_main == NULL, "ly_attach_main is NULL");
+
+ char buf[DEF_BUF_LEN_S + 1] = {0,};
+ snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BODY_PD_ATTACHMENTS"), attach_count);
+
+ edje_object_part_text_set(_EDJ(cd->ly_attach_main), "text.filename", buf);
+
+ D_LEAVE;
+}
+
+static void __msgc_remove_attachment_item(void *data, MSG_COMPOSER_ATTACH_ITEM_S *remove_item)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+ MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data;
+
+ attach_data->attachitem_list = eina_list_remove(attach_data->attachitem_list, remove_item);
+ attach_data->attachment_Cnt--;
+
+ __msgc_update_attach_main_layout(cd, attach_data->attachment_Cnt);
+
+ /* remove temp file */
+ ecore_file_remove(remove_item->file_path);
+
+ evas_object_del(remove_item->layout);
+ g_free(remove_item);
+
+ msg_ui_composer_body_info_area_update(cd);
+
+ if (attach_data->attachment_Cnt == 0) {
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ if (!msg_ui_composer_common_is_send_possible(cd)) {
+ elm_object_disabled_set(cd->send_button, EINA_TRUE);
+ edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");/* remove character count */
+ 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);
+ }
+ }
+ }
+ }
+ }
+ } else {
+ elm_object_disabled_set(cd->send_button, EINA_FALSE);
+ }
+ /* remove attach main layout */
+ MSGC_EVAS_OBJECT_DEL(cd->ly_attach_main);
+ }
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_attachment_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+ MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data;
+
+ if (attach_data->attachment_Cnt > 0) {
+ MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL;
+ int attach_count = attach_data->attachment_Cnt;
+ int i = 0;
+
+ for (i = 0; i < attach_count; i++) {
+ attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)
+ eina_list_nth(attach_data->attachitem_list, 0);
+
+ if (attach_item) {
+ if (evas_object_visible_get(cd->ly_attach_main) == EINA_FALSE)
+ elm_box_unpack(cd->body_box, attach_item->layout);
+
+ evas_object_del(attach_item->layout);
+
+ attach_data->attachitem_list = eina_list_remove(attach_data->attachitem_list, attach_item);
+ free(attach_item);
+ }
+ }
+ /* remove attach main layout */
+ if (evas_object_visible_get(cd->ly_attach_main) == EINA_TRUE)
+ elm_box_unpack(cd->body_box, cd->ly_attach_main);
+
+ evas_object_del(cd->ly_attach_main);
+ cd->ly_attach_main = NULL;
+ }
+
+ attach_data->attachment_Cnt = 0;
+ attach_data->attachitem_list = NULL;
+
+ D_LEAVE;
+}
+
+static void __msgc_attachment_del_icon_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(data == NULL, "composer data is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ Evas_Object *layout = evas_object_data_get(obj, "layout");
+ MSG_COMPOSER_ATTACH_ITEM_S *remove_item = NULL;
+
+ remove_item = evas_object_data_get(layout, "attach_item");
+ __msgc_remove_attachment_item(data, remove_item);
+
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ D_LEAVE;
+}
+
+static void __msgc_attachment_thumb_icon_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ Evas_Object *layout = evas_object_data_get(obj, "layout");
+ MSG_COMPOSER_ATTACH_ITEM_S *attach_item = evas_object_data_get(layout, "attach_item");
+
+ D_MSG("File path %s", attach_item->file_path);
+
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_COMMON, attach_item->file_path);
+
+ D_LEAVE;
+}
+
+static Evas_Object *__msgc_attachment_create_attach_layout(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent, const char *filepath)
+{
+ D_ENTER;
+
+ if (!cd || !filepath || strlen(filepath) == 0) {
+ D_EMSG("compsoer data or file information is not exist !!!");
+ return NULL;
+ }
+
+ Evas_Object *layout = NULL;
+ Evas_Object *thumb_icon = NULL;
+ Evas_Object *del_icon = NULL;
+ const char *filename = NULL;
+ const char *icon_path = NULL;
+
+ layout = elm_layout_add(parent);
+
+ if (!layout) {
+ D_EMSG("layout create error");
+ return NULL;
+ }
+
+ elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_ATTACHMENT_ITEM);
+ 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);
+
+ thumb_icon = elm_icon_add(layout);
+
+ icon_path = msg_common_get_file_icon(filepath);
+
+ if (icon_path) {
+ elm_icon_file_set(thumb_icon, icon_path, NULL);
+ } else {
+ D_EMSG("icon_path is NULL");
+ elm_icon_file_set(thumb_icon, MSGC_IMG_ATTACHMENT_ICON, NULL);
+ }
+
+ evas_object_data_set(thumb_icon, "layout", layout);
+
+ evas_object_show(thumb_icon);
+
+ elm_object_part_content_set(layout, "swl.image", thumb_icon);
+
+ filename = ecore_file_file_get(filepath);
+ if (filename) {
+ edje_object_part_text_set(_EDJ(layout), "text.filename", filename);
+ } else {
+ D_EMSG("Error of filename");
+ }
+
+ del_icon = elm_icon_add(layout);
+ elm_icon_file_set(del_icon, MSGC_IMG_ATTACHMENT_DEL_ICON, NULL);
+ evas_object_size_hint_weight_set(del_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(del_icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_focus_allow_set(del_icon, EINA_TRUE);
+
+ evas_object_show(del_icon);
+ evas_object_data_set(del_icon, "layout", layout);
+
+ elm_object_part_content_set(layout, "swl.delete_btn", del_icon);
+
+ evas_object_smart_callback_add(del_icon, "clicked", __msgc_attachment_del_icon_clicked_cb, cd);
+
+ if (!cd->isAppControl)
+ evas_object_smart_callback_add(thumb_icon, "clicked", __msgc_attachment_thumb_icon_clicked_cb, cd);
+
+ D_LEAVE;
+ return layout;
+}
+
+int msg_ui_composer_get_attach_count(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, 0, "cd is NULL");
+ Eina_List *attach_list = cd->attach_data.attachitem_list;
+ D_MSG_RETVM_IF(attach_list == NULL, 0, "attach_list is NULL");
+
+ int attach_count = eina_list_count(attach_list);
+
+ return attach_count;
+}
+
+void msg_ui_composer_expand_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "cd is NULL");
+
+ if (evas_object_visible_get(cd->ly_attach_main) == EINA_TRUE) {
+ /*hide attach main layout */
+ elm_box_unpack(cd->body_box, cd->ly_attach_main);
+ evas_object_hide(cd->ly_attach_main);
+
+ /* show attach list */
+ MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL;
+ Eina_List *attach_list = cd->attach_data.attachitem_list;
+ int attach_count = eina_list_count(attach_list);
+ int i = 0;
+
+ D_MSG("attach_count = %d", attach_count);
+
+ Eina_List *page_list = cd->body_data.page_list;
+ MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0);
+
+ for (i = 0; i < attach_count; i++) {
+ attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(attach_list, i);
+ if (attach_item) {
+ elm_box_pack_before(cd->body_box, attach_item->layout, page_data->layout);
+ evas_object_show(attach_item->layout);
+ } else {
+ D_EMSG("attach_item is NULL!! i = %d", i);
+ }
+ }
+ } else {
+ D_MSG("attach main layout is Already hidden");
+ }
+}
+
+void msg_ui_composer_contract_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "cd is NULL");
+
+ if (evas_object_visible_get(cd->ly_attach_main) == EINA_FALSE) {
+ /* hide attachment list */
+ MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL;
+ Eina_List *attach_list = cd->attach_data.attachitem_list;
+ int attach_count = eina_list_count(attach_list);
+ int i = 0;
+
+ D_MSG("attach_count = %d", attach_count);
+
+ for (i = 0; i < attach_count; i++) {
+ attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(attach_list, i);
+ if (attach_item) {
+ elm_box_unpack(cd->body_box, attach_item->layout);
+ evas_object_hide(attach_item->layout);
+ } else {
+ D_EMSG("attach_item is NULL !! i = %d", i);
+ }
+ }
+
+ Eina_List *page_list = cd->body_data.page_list;
+ MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0);
+ /* show attach main layout */
+ elm_box_pack_before(cd->body_box, cd->ly_attach_main, page_data->layout);
+ evas_object_show(cd->ly_attach_main);
+ } else {
+ D_MSG("attach main layout is Already shown");
+ }
+}
+
+static void __msgc_attachment_main_layout_clicked_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(data == NULL, "data is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ msg_ui_composer_expand_attach_list(cd);
+ D_LEAVE;
+}
+
+static Evas_Object *__msgc_attachment_create_attach_main_layout(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent, int attach_count)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+ Evas_Object *layout = NULL;
+ Evas_Object *thumb_icon = NULL;
+
+ layout = elm_layout_add(parent);
+
+ if (!layout) {
+ D_EMSG("layout create error");
+ return NULL;
+ }
+
+ elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_ATTACHMENT_MAIN);
+ 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);
+
+ thumb_icon = elm_icon_add(layout);
+ elm_icon_file_set(thumb_icon, MSGC_IMG_ATTACHMENT_ICON, NULL);
+ evas_object_show(thumb_icon);
+
+ elm_object_part_content_set(layout, "swl.image", thumb_icon);
+
+ char buf[DEF_BUF_LEN_S + 1] = {0,};
+
+ snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BODY_PD_ATTACHMENTS"), attach_count);
+ edje_object_part_text_set(_EDJ(layout), "text.filename", buf);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, __msgc_attachment_main_layout_clicked_cb, cd);
+
+ D_LEAVE;
+ return layout;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_add_attach_media(MSG_COMPOSER_VIEW_DATA_S
+ *cd, const char *filepath, COMPOSER_MEDIA_TYPE_E media_type)
+{
+ D_ENTER;
+
+ if (!cd || !filepath || strlen(filepath) == 0) {
+ D_EMSG("composer data or file path is not exist");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ Evas_Object *body_box = cd->body_box;
+ MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data;
+ MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL;
+
+ int attach_count = eina_list_count(attach_data->attachitem_list);
+
+ if (attach_count >= COMPOSER_MMS_MAX_ATTACH_COUNT) {
+ char popup_msg[DEF_BUF_LEN_L + 1] = { 0, };
+ snprintf(popup_msg, sizeof(popup_msg) - 1, MSGC_STR_POP_ATTACHMENT_COUNT_MAX, COMPOSER_MMS_MAX_ATTACH_COUNT, COMPOSER_MMS_MAX_ATTACH_COUNT);
+ Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (attach_count > 0) {
+ Eina_List *list = attach_data->attachitem_list;
+ MSG_COMPOSER_ATTACH_ITEM_S *attached_item = NULL;
+ int i = 0;
+
+ for (i = 0; i < attach_count; i++) {
+ attached_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(list, i);
+
+ if (strncmp(attached_item->file_path, filepath, strlen(attached_item->file_path)) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] already exist");
+ Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_FILE_EXIST, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
+ return COMPOSER_RETURN_ATTACHMENT_ALREADY_EXIST;
+ }
+ }
+ }
+
+ attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)calloc(1, sizeof(MSG_COMPOSER_ATTACH_ITEM_S));
+ if (!attach_item) {
+ D_EMSG("calloc is failed");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ char *file_name = ecore_file_app_exe_get(ecore_file_file_get(filepath));
+ if (!file_name) {
+ D_EMSG("file_name is NULL");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ strncpy(attach_item->file_path, filepath, strlen(filepath));
+ strncpy(attach_item->file_name, file_name, strlen(file_name));
+ g_free(file_name);
+
+ /* create attach main layout */
+ if (!cd->ly_attach_main) {
+ cd->ly_attach_main = __msgc_attachment_create_attach_main_layout(cd, cd->ly_body, attach_count);
+ evas_object_hide(cd->ly_attach_main);
+ }
+
+ msg_ui_composer_expand_attach_list(cd);
+
+ attach_item->type = media_type;
+
+ attach_item->layout = __msgc_attachment_create_attach_layout(cd, cd->ly_body, attach_item->file_path);
+ if (!attach_item->layout) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] attachment item create error");
+ g_free(attach_item);
+
+ if (!attach_count)
+ MSGC_EVAS_OBJECT_DEL(cd->ly_attach_main);
+
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ evas_object_data_set(attach_item->layout, "attach_item", attach_item);
+
+ attach_data->attachitem_list = eina_list_append(attach_data->attachitem_list, attach_item);
+ attach_data->attachment_Cnt++;
+
+ Eina_List *page_list = cd->body_data.page_list;
+ MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0);
+
+ elm_box_pack_before(body_box, attach_item->layout, page_data->layout);
+
+ elm_object_disabled_set(cd->send_button, EINA_FALSE);
+
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ msg_ui_composer_body_info_area_update(cd);
+
+ __msgc_update_attach_main_layout(cd, attach_data->attachment_Cnt);
+
+ D_MSG("cd->attach_index = %d", cd->attach_index);
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ int media_count = eina_list_count(cd->attachlist);
+
+ /* show invalid popup when last content is added*/
+ if (media_count == cd->attach_index) {
+ msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ }
+ } else {
+ /* change last focused entry to a page that is added media recently*/
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, cd->current_edit_entry);
+ if (page_data) {
+ msg_ui_composer_last_focused_entry_set(cd, page_data->entry);
+ msg_ui_composer_last_focus_load(cd);
+ }
+ }
+ D_LEAVE;
+
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_read_attachments(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "composer data is NULL");
+ MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data;
+ int attach_count = attach_data->attachment_Cnt;
+ Eina_List *attach_list = attach_data->attachitem_list;
+ MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL;
+ int i = 0;
+
+ msg_ui_composer_message_set_attach_count(attach_count);
+
+ for (i = 0; i < attach_data->attachment_Cnt; i++) {
+ attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(attach_list, i);
+ if (attach_item) {
+ if (msg_ui_composer_message_add_attachments(attach_item->file_path, attach_item->type) != COMPOSER_RETURN_SUCCESS) {
+ attach_count--;
+ }
+ } else {
+ attach_count--;
+ }
+ }
+
+ if (attach_count < 0)
+ attach_count = 0;
+
+ msg_ui_composer_message_set_attach_count(attach_count);
+
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_attachment_set_loaded_data(void *data, const char
+ *filepath, int filetype)
+{
+ D_MSG_RETVM_IF(data == NULL, COMPOSER_RETURN_NULL_POINTER, "data is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ char local_item_path[COMPOSER_FILEPATH_LEN_MAX + 1] = {0,};
+ /* copy temp file */
+ if (msg_ui_composer_common_get_file(cd, filepath, local_item_path, COMPOSER_FILEPATH_LEN_MAX) != COMPOSER_RETURN_SUCCESS) {
+ D_EMSG("get file error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ return msg_ui_composer_add_attach_media(cd, local_item_path, filetype);
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-body-callback.c b/composer/src/ui-composer/msg-ui-composer-body-callback.c
index d1d030b..63cd6fa 100755
--- a/composer/src/ui-composer/msg-ui-composer-body-callback.c
+++ b/composer/src/ui-composer/msg-ui-composer-body-callback.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
/* includes */
#include "msg-ui-composer-body.h"
#include "msg-ui-composer-recipient.h"
@@ -21,17 +22,143 @@
#include "msg-ui-composer-body-page.h"
#include "msg-ui-composer-body-callback.h"
#include "msg-ui-composer-common.h"
-
+#include "msg-ui-composer-attachment.h"
+#include "msg-ui-composer-subject.h"
#include "msg-ui-composer-message.h"
#include "msg-ui-composer-popup.h"
#include "msg-ui-composer-util.h"
#include "msg-ui-composer-external.h"
-
+#include "syspopup_caller.h"
/*==================================================================================================
* FUNCTION IMPLEMENTATIONS
*==================================================================================================*/
-static void __nosim_popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+static void __add_list_popup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data || !event_info) {
+ D_EMSG("invalid argument, argument data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ if (cd->add_menu_clicked)
+ return;
+
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ elm_list_item_selected_set(item, EINA_FALSE);
+
+ const char *label = elm_object_item_text_get(item);
+ if (!label) {
+ D_EMSG("label is NULL !!");
+ return;
+ }
+
+ cd->add_menu_clicked = true;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "label = %s", label);
+ if (cd->isAppControl) {
+ if (!g_strcmp0(label, MSGC_STR_SUBJECT)) {
+ msg_ui_composer_add_subject(cd);
+ } else {
+ D_EMSG("Unknown Menu List Item");
+ }
+ } else {
+ if (!g_strcmp0(label, MSGC_STR_SUBJECT)) {
+ msg_ui_composer_add_subject(cd);
+ } else if (!g_strcmp0(label, MSGC_STR_GALLERY)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_GALLERY, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_MYFILE)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_MYFILE, NULL);
+ } else if (!g_strcmp0(label, _MSGSTR("IDS_MSGC_BODY_TAKE_PICTURE"))) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_CAMERA, NULL);
+ } else if (!g_strcmp0(label, _MSGSTR("IDS_MSGC_BODY_RECORD_AUDIO"))) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_VOICEREC, NULL);
+ } else if (!g_strcmp0(label, _MSGSTR("IDS_MSGC_BODY_CAPTURE_VIDEO"))) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_CAMCORDER, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_CONTACT)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_NAMECARD, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_CALENDAR)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_CALENDAR, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_MEMO)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_MEMO, NULL);
+ } else {
+ D_EMSG("Unknown Menu List Item");
+ }
+ }
+
+ MSGC_EVAS_OBJECT_DEL(cd->add_popup);
+ cd->add_button_clicked = false;
+ cd->add_menu_clicked = false;
+ D_LEAVE;
+}
+
+static void __add_list_popup_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->add_popup);
+ cd->add_button_clicked = false;
+ cd->add_menu_clicked = false;
+
+ D_LEAVE;
+}
+
+static void __add_list_popup_show(void *data)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ Evas_Object *popup = NULL;
+ Evas_Object *list = NULL;
+ Elm_Object_Item *item = NULL;
+
+ list = elm_list_add(cd->main_window);
+ D_MSG_RETM_IF(list == NULL, "list is NULL");
+
+ if (!cd->isAppControl) {
+ if (!cd->isSubject)
+ item = elm_list_item_append(list, MSGC_STR_SUBJECT, NULL, NULL, __add_list_popup_clicked_cb, data);
+
+ elm_list_item_append(list, MSGC_STR_GALLERY, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_BODY_TAKE_PICTURE"), NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_BODY_CAPTURE_VIDEO"), NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_BODY_RECORD_AUDIO"), NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_MYFILE, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_CONTACT, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_CALENDAR, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_MEMO, NULL, NULL, __add_list_popup_clicked_cb, data);
+ } else {
+ item = elm_list_item_append(list, MSGC_STR_SUBJECT, NULL, NULL, __add_list_popup_clicked_cb, data);
+ if (cd->isSubject)
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ }
+
+ elm_list_go(list);
+
+ if (!cd->isAppControl) {
+ popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_POP_ATTACH"), list, NULL);
+ } else {
+ elm_list_mode_set(list, ELM_LIST_EXPAND);
+ popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_POP_ATTACH"), list, "min_menustyle");
+ }
+
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __add_list_popup_btn_clicked_cb, cd);
+
+ cd->add_popup = popup;
+
+ D_LEAVE;
+}
+
+static void __nosim_popup_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
D_ENTER;
@@ -55,6 +182,7 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void
D_MSG_RETM_IF(data == NULL, "Composer Data is NULL");
MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ msg_thread_id_t tid = 0;
if (cd->send_button)
elm_object_disabled_set(cd->send_button, EINA_TRUE);
@@ -78,11 +206,11 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void
/*check recipient count is zero*/
if (msg_ui_composer_recipient_count_get(rd) == 0) {
D_EMSG("there is no recipient");
- msg_ui_composer_status_popup_show(cd, "there is no recipient", COMPOSER_STATUS_POPUP_DEFAULT_TIME); // FIXME :: should change msg from STMS
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_NO_RECIPIENT);
}
/*check invalid recipient*/
- Eina_List * invalid_list = msg_ui_composer_recipient_invalid_recipient_list_get(rd);
+ Eina_List *invalid_list = msg_ui_composer_recipient_invalid_recipient_list_get(rd);
if (invalid_list) {
RECIPIENT_ITEM_S *r_item;
char *ret = NULL;
@@ -113,7 +241,8 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void
if (err_msg != NULL) {
Evas_Object *popup = msg_ui_composer_status_popup_show(cd, err_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
- Evas_Object * btn1 = elm_button_add(popup);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
elm_object_part_content_set(popup, "button1", btn1);
evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
@@ -127,7 +256,6 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void
}
}
-
/*Make message*/
msg_ui_composer_message_init();
@@ -142,7 +270,7 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void
}
/*Send message*/
- COMPOSER_RETURN_TYPE_E ret = msg_ui_composer_message_make_and_send(cd->msg_handle);
+ COMPOSER_RETURN_TYPE_E ret = msg_ui_composer_message_make_and_send(cd->msg_handle, &tid);
if (ret == COMPOSER_RETURN_SUCCESS) {
D_MSG("Send Success");
@@ -151,41 +279,23 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void
ug_destroy_me(cd->ug);
} else if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER) {
- RECIPIENT_ITEM_S r_item = {0,};
-
- if (cd->recipient) {
- Elm_Object_Item *mbe_item = elm_multibuttonentry_first_item_get(cd->recipient->mbe);
- if (mbe_item) {
- RECIPIENT_ITEM_S *recipient_item = elm_object_item_data_get(mbe_item);
- if (recipient_item) {
- memcpy(&r_item, recipient_item, sizeof(RECIPIENT_ITEM_S));
- }
- }
- }
-
msg_ui_composer_change_bubble_view(cd);
- int tid = msg_ui_composer_thread_id_get(cd->msg_handle, r_item.recipient);
+
if (tid <= 0) {
D_EMSG("Can not find thread id!!");
+ msg_ui_composer_message_destroy();
ug_destroy_me(cd->ug);
- return;
- }
- char *recipient = msg_ui_composer_thread_recipient_get(cd->msg_handle, tid);
- if (recipient == NULL) {
- D_EMSG("Can not find thread address!!");
- ug_destroy_me(cd->ug);
return;
}
- msg_ui_composer_recipient_set_recipient(cd, recipient);
- msg_ui_composer_bubble_data_set(cd, recipient, r_item.display_name, r_item.index, tid);
+ msg_ui_composer_bubble_data_set(cd, tid);
msg_ui_bubble_start_view(cd->bubble_data);
+ msg_ui_composer_navi_title_set((void *)cd);
- msg_ui_bubble_composer_navi_title_set((void *)cd);
- msg_ui_bubble_add_normal_control_item(cd->bubble_data);
+ /* set recipient list for bubble composer */
+ msg_ui_composer_recipient_set_recipient_list(cd, tid);
- g_free(recipient);
msg_ui_composer_clear(cd);
} else {
msg_ui_composer_clear(cd);
@@ -196,7 +306,8 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void
if (ret == COMPOSER_RETURN_NO_SIM) {
D_MSG("Send Fail : NO SIM");
Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_NOSIM, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
- Evas_Object * btn1 = elm_button_add(popup);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
elm_object_part_content_set(popup, "button1", btn1);
evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
@@ -222,6 +333,37 @@ error_return:
D_LEAVE;
}
+void msg_ui_composer_body_add_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] error data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ if (cd->add_button_clicked)
+ return;
+
+ cd->add_button_clicked = true;
+ __add_list_popup_show(cd);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_entry_maxlength_reached_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");
+
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_MAXLENGHT_CHAR);
+
+ D_LEAVE;
+}
+
void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
@@ -250,11 +392,12 @@ void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *e
}
g_free(body_text);
+ msg_ui_composer_message_type_check_and_change(cd);
+
msg_ui_composer_body_info_area_update(cd);
if (msg_ui_composer_common_is_send_possible(cd)) {
elm_object_disabled_set(cd->send_button, EINA_FALSE);
- edje_object_signal_emit(_EDJ(cd->ly_body), "body_contract","*"); // FIXME :: check status for signal emit
} else {
elm_object_disabled_set(cd->send_button, EINA_TRUE);
}
@@ -262,25 +405,234 @@ void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *e
D_LEAVE;
}
+void msg_ui_composer_body_entry_press_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");
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ elm_entry_context_menu_disabled_set(obj, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(obj, EINA_TRUE);
+ } else {
+ elm_entry_context_menu_disabled_set(obj, EINA_FALSE);
+ elm_entry_magnifier_disabled_set(obj, EINA_FALSE);
+ }
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_entry_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");
+
+ int attach_count = msg_ui_composer_get_attach_count(cd);
+
+ if (attach_count > 1)
+ msg_ui_composer_contract_attach_list(cd);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_entry_unfocused_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");
+
+ if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+
+ int page_count = body_data->page_count;
+
+ if (page_count == 1) {
+ D_MSG("There is 1 page !!!");
+ } else {
+ MSG_COMPOSER_BODY_PAGE_S *page_data = evas_object_data_get(obj, "page_data");
+ if (page_data == NULL) {
+ D_EMSG("page_data is NULL");
+ } else {
+ /* hide delete button */
+ D_MSG("hide delete button");
+ edje_object_signal_emit(_EDJ(page_data->upper_layout), "hide.delete", "*");
+ }
+ }
+ }
+
+ D_LEAVE;
+}
+
void msg_ui_composer_body_entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
- if (!data) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT} data is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ /* if focused_cb is called twice becuase of double click, move focus to popup */
+ if (msg_ui_composer_popup_exist(cd))
+ msg_ui_composer_popup_focus(cd);
+
return;
}
- MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ /* change body scroller size */
+ int keypad_h = msg_ui_composer_get_keypad_height(obj);
+ msg_ui_composer_change_body_scroll_size(cd, keypad_h);
+
+ if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
- if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
+ Eina_List *page_list = body_data->page_list;
+ int page_count = body_data->page_count;
+ if (page_count == 1) {
+ D_MSG("page NO.1 focused !!!");
+ cd->current_edit_entry = 0;
+ } else {
+ MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+ if (page_data->entry == obj) {
+ D_MSG("page NO.[%d]/[%d] focused !!!", i + 1, page_count);
+ cd->current_edit_entry = i;
+ break;
+ }
+ }
+ page_data = evas_object_data_get(obj, "page_data");
+ if (page_data == NULL) {
+ D_EMSG("page_data is NULL");
+ } else {
+ /* show delete button */
+ D_MSG("show delete button");
+ edje_object_signal_emit(_EDJ(page_data->upper_layout), "show.delete", "*");
+ }
+ }
+ } else if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
cd->current_edit_entry = 0;
} else {
- MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] message composer invalid message type");
+ D_MSG("message composer invalid message type");
}
msg_ui_composer_last_focused_entry_set(data, obj);
D_LEAVE;
}
+void msg_ui_composer_body_page_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Callback data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ Evas_Object *layout = evas_object_data_get(obj, "layout");
+
+ msg_ui_composer_mms_body_remove_page(cd, layout);
+
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ msg_ui_composer_body_info_area_update(cd);
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_media_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data || !obj) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] NULL pointer error");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ 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;
+ int body_length = 0;
+
+ Evas_Object *delete_layout = (Evas_Object *)evas_object_data_get(obj, "layout");
+
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+
+ if (!page_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page data is NULL !!!");
+ return;
+ }
+
+ if (page_data->sound_item == delete_layout) {
+ msg_ui_composer_mms_insert_item_remove(cd, delete_layout, COMPOSER_MEDIA_TYPE_AUDIO);
+
+ char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry));
+ if (!body_text)
+ return;
+
+ body_length = strlen(body_text);
+
+ if (body_length == 0 && !page_data->is_image_item)
+ msg_ui_composer_mms_body_remove_page(cd, page_data->layout);
+
+ g_free(body_text);
+
+ break;
+ } else if (page_data->image_item == delete_layout) {
+
+ char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry));
+ if (!body_text)
+ return;
+
+ body_length = strlen(body_text);
+
+ if (page_data->isVideo) {
+ msg_ui_composer_mms_insert_item_remove(cd, delete_layout, COMPOSER_MEDIA_TYPE_VIDEO);
+ } else {
+ msg_ui_composer_mms_insert_item_remove(cd, delete_layout, COMPOSER_MEDIA_TYPE_IMAGE);
+ }
+
+ if (body_length == 0 && !page_data->is_sound_item)
+ msg_ui_composer_mms_body_remove_page(cd, page_data->layout);
+
+ g_free(body_text);
+ break;
+ }
+ }
+
+ msg_ui_composer_message_type_check_and_change(cd);
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_body_layout_resize_cb(void *data, Evas *e, 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");
+ Evas_Coord x = 0;
+ Evas_Coord y = 0;
+ Evas_Coord w = 0;
+ Evas_Coord h = 0;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ D_MSG("body layout height = %d", h);
+
+ cd->ly_body_h = h;
+
+ if (h >= COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT)
+ msg_ui_composer_body_info_area_update(cd);
+ else
+ edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");
+
+ D_LEAVE;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-body-page.c b/composer/src/ui-composer/msg-ui-composer-body-page.c
index 156e87a..4005d14 100755
--- a/composer/src/ui-composer/msg-ui-composer-body-page.c
+++ b/composer/src/ui-composer/msg-ui-composer-body-page.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#include "msg-ui-composer-body.h"
#include "msg-ui-composer-body-page.h"
#include "msg-ui-composer-body-callback.h"
@@ -66,6 +67,7 @@ static const unsigned short g_GSM7BitExtToUCS2[] =
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;
@@ -120,6 +122,117 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_sms_body(MSG_COMPOSER_VIEW_DATA
return COMPOSER_RETURN_SUCCESS;
}
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_mms_body(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_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;
+
+ msg_ui_composer_message_set_page_count(page_count);
+
+ if (body_data->region_order == COMPOSER_REGION_ORDER_IMAGE_TOP)
+ msg_ui_composer_message_set_is_text_top(false);
+ else
+ msg_ui_composer_message_set_is_text_top(true);
+
+ int i = 0;
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+ char *body_text;
+
+ if (page_data->entry) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read TEXT region data");
+ char *entry_text = g_strdup(elm_entry_entry_get(page_data->entry));
+ convert_ps_to_br(entry_text);
+
+ body_text = elm_entry_markup_to_utf8(entry_text);
+
+ if (body_text && strlen(body_text) > 0) {
+ msg_ui_composer_message_mms_set_text(body_text, i);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] no text [%d]", i + 1);
+ }
+
+ if (body_text)
+ g_free(body_text);
+
+ g_free(entry_text);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] no page entry @ page [%d]", i + 1);
+ }
+
+ if (page_data->is_image_item) {
+
+ if (page_data->isVideo) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read video region data");
+ msg_ui_composer_message_mms_set_media(page_data->image_file_path, COMPOSER_MEDIA_TYPE_VIDEO, i, 0);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read image region data");
+ msg_ui_composer_message_mms_set_media(page_data->image_file_path, COMPOSER_MEDIA_TYPE_IMAGE, i, 0);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No [Image] region data");
+ }
+
+ if (page_data->is_sound_item) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read SOUND region data");
+
+ msg_ui_composer_message_mms_set_media(page_data->sound_file_path, COMPOSER_MEDIA_TYPE_AUDIO, i, page_data->sound_duration);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No [Sound] region data");
+ }
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static int __msg_ui_composer_body_verify_region_order(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+ return COMPOSER_REGION_ORDER_UNDETERMINDED;
+ }
+
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+ Eina_List *page_list = body_data->page_list;
+ int page_count = body_data->page_count;
+ int region_order = COMPOSER_REGION_ORDER_UNDETERMINDED;
+
+ if (page_count < 1) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] no page");
+ return COMPOSER_REGION_ORDER_UNDETERMINDED;
+ } else {
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+ const char *entry_text = elm_entry_entry_get(page_data->entry);
+
+ if (entry_text && strlen(entry_text)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] Region order TEXT TOP");
+ region_order = COMPOSER_REGION_ORDER_TEXT_TOP;
+ break;
+ }
+ }
+ if (region_order == COMPOSER_REGION_ORDER_UNDETERMINDED)
+ region_order = COMPOSER_REGION_ORDER_IMAGE_TOP;
+ }
+
+ D_LEAVE;
+ return region_order;
+}
+
int msg_ui_composer_body_entry_char_count(void *data, const unsigned char *body_ucs2_text, int ucs2_len, int *char_count)
{
D_ENTER;
@@ -203,7 +316,7 @@ int msg_ui_composer_body_entry_char_count(void *data, const unsigned char *body_
return dst_char_encode;
}
-void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd)
+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");
@@ -219,6 +332,7 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd)
int cms_page = 0;
int cms_max_count = 0;
int max_count = 0;
+ int remaining_count = 0;
if (char_count == 0) {
edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");
@@ -228,6 +342,10 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd)
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 (!(char_count % COMPOSER_CMS_UNICODE_MAX_LEN))
+ --cms_page;
+
if (cms_page >= COMPOSER_CMS_MAX_PAGE)
max_count = COMPOSER_CMS_UNICODE_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
else
@@ -240,6 +358,10 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd)
} 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 (!(char_count % COMPOSER_CMS_GSM7_MAX_LEN))
+ --cms_page;
+
if (cms_page >= COMPOSER_CMS_MAX_PAGE)
max_count = COMPOSER_CMS_GSM7_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
else
@@ -253,41 +375,55 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd)
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);
+ remaining_count = max_count - char_count;
+ snprintf(count_str, sizeof(count_str), "%d/%d", remaining_count, cms_page+1);
+
+ if (cd->ly_body_h >= COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT)
+ edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", count_str);
+
+ } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ int64 msg_size = 0;
+ int64 sizeKB = 0;
+ int64 sizeB = 0;
+
+ msg_ui_composer_get_message_size(cd, &msg_size);
+
+ if (msg_size < MSGC_1KB) {
+ snprintf(count_str, sizeof(count_str), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
+ } else {
+ sizeKB = (int64)msg_size/MSGC_1KB;
+ sizeB = (int64)msg_size%MSGC_1KB;
+
+ if (sizeB >= (MSGC_1KB/2))
+ sizeKB++;
+ snprintf(count_str, sizeof(count_str), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
+ }
+
+ if (cd->ly_body_h >= COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT)
+ 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)
+static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent, MSG_COMPOSER_BODY_PAGE_S *page_data)
{
D_ENTER;
- if (!cd || !parent) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid paremeter ");
+ if (!cd || !parent || !page_data) {
+ D_EMSG("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);
+ D_EMSG("elm_layout_add error !!");
return NULL;
}
@@ -298,8 +434,7 @@ static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S
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);
+ D_EMSG("elm_box_add error !!");
return NULL;
}
@@ -310,39 +445,124 @@ static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S
entry = elm_entry_add(page_box);
if (!entry) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] elm_box_add error !!");
- g_free(page_data);
+ D_EMSG("elm_box_add error !!");
return NULL;
}
+
+ /* fix font size */
+ elm_entry_text_style_user_push(entry, "DEFAULT='font_size=36'");
+
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);
-
+ elm_entry_markup_filter_append(entry, msg_composer_entry_filter_addimage, cd);
/* 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;
+ limit_filter.max_char_count = COMPOSER_MMS_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);
+ ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)entry_ctx, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, msg_ui_composer_entry_imf_resize_cb, cd);
evas_object_show(entry);
- evas_object_data_set(entry,"page_data", page_data);
+ 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, "unfocused", msg_ui_composer_body_entry_unfocused_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);
+ evas_object_smart_callback_add(entry, "press", msg_ui_composer_body_entry_press_cb, cd);
+ evas_object_smart_callback_add(entry, "clicked", msg_ui_composer_body_entry_clicked_cb, cd);
+ evas_object_smart_callback_add(entry, "maxlength,reached", msg_ui_composer_body_entry_maxlength_reached_cb, cd);
+
+ Evas_Object *del_icon = elm_icon_add(parent);
+ elm_icon_file_set(del_icon, MSGC_IMG_PAGE_DEL_ICON, NULL);
+ evas_object_size_hint_weight_set(del_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(del_icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_focus_allow_set(del_icon, EINA_TRUE);
+
+ evas_object_data_set(del_icon, "layout", page_data->layout);
+ elm_object_part_content_set(layout, "swl.del_button", del_icon);
+
+ evas_object_smart_callback_add(del_icon, "clicked", msg_ui_composer_body_page_del_btn_clicked_cb, cd);
elm_box_pack_end(page_box, entry);
elm_object_part_content_set(layout, "swl.page", page_box);
+ page_data->upper_layout = layout;
page_data->entry = entry;
page_data->page_box = page_box;
+ page_data->del_icon = del_icon;
+
+ D_LEAVE;
+ return layout;
+}
+
+static Evas_Object *__msg_ui_composer_body_page_main_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent)
+{
+ D_ENTER;
+
+ if (!cd || !parent) {
+ D_EMSG("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 *new_page = NULL;
+ Evas_Object *page_main_box = NULL;
+
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)calloc(1, sizeof(MSG_COMPOSER_BODY_PAGE_S));
+ if (!page_data) {
+ D_EMSG("page_data is NULL!! calloc error");
+ return NULL;
+ }
+
+ layout = elm_layout_add(parent);
+ if (!layout) {
+ D_EMSG(" 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_MAIN);
+ 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_main_box = elm_box_add(layout);
+ if (!page_main_box) {
+ D_EMSG("elm_box_add error !!");
+ g_free(page_data);
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(page_main_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(page_main_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ evas_object_show(page_main_box);
+
+ page_data->page_main_box = page_main_box;
page_data->layout = layout;
+
+ new_page = __msg_ui_composer_body_page_create(cd, page_main_box, page_data);
+ if (!new_page) {
+ D_EMSG(" new_page error !!");
+ g_free(page_data);
+ return NULL;
+ }
+
+ elm_box_pack_end(page_main_box, new_page);
+
+ elm_object_part_content_set(layout, "swl.page.main", page_main_box);
+
+
body_data->page_list = eina_list_append(body_data->page_list, (void *)page_data);
D_LEAVE;
@@ -359,11 +579,10 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *c
}
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) {
+ if (body_data->page_count >= COMPOSER_MMS_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;
@@ -374,7 +593,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *c
return COMPOSER_RETURN_FAIL;
}
- new_page = __msg_ui_composer_body_page_create(cd, main_box);
+ new_page = __msg_ui_composer_body_page_main_create(cd, main_box);
if (!new_page) {
MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page create error");
return COMPOSER_RETURN_FAIL;
@@ -387,7 +606,60 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *c
return COMPOSER_RETURN_SUCCESS;
}
-COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_insert_item_remove(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_item, COMPOSER_MEDIA_TYPE_E media_type)
+{
+ D_ENTER;
+
+ if (!cd || !remove_item) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data or remove item 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;
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+
+ if (media_type == COMPOSER_MEDIA_TYPE_IMAGE || media_type == COMPOSER_MEDIA_TYPE_VIDEO) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] remove image region media item !!");
+ if (page_data->image_item == remove_item) {
+ page_data->is_image_item = false;
+ page_data->image_item = NULL;
+ page_data->isVideo = false;
+ /* remove temp file */
+ ecore_file_remove(page_data->image_file_path);
+ memset(page_data->image_file_path, 0x00, sizeof(page_data->image_file_path));
+ evas_object_del(remove_item);
+ break;
+ }
+ } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] remove sound media item !!");
+ if (page_data->sound_item == remove_item) {
+ page_data->is_sound_item = false;
+ page_data->sound_item = NULL;
+ /* remove temp file */
+ ecore_file_remove(page_data->sound_file_path);
+ memset(page_data->sound_file_path, 0x00, sizeof(page_data->sound_file_path));
+ evas_object_del(remove_item);
+ break;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid media type");
+ continue;
+ }
+ }
+
+ msg_ui_composer_body_info_area_update(cd);
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page)
{
D_ENTER;
@@ -400,14 +672,24 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S
MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
Eina_List *page_list = body_data->page_list;
int page_count = body_data->page_count;
+ int i = 0;
if (page_count == 1) { // in case of only one page exist
page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0);
+
+ if (page_data->is_image_item)
+ msg_ui_composer_mms_insert_item_remove(cd, page_data->image_item, COMPOSER_MEDIA_TYPE_IMAGE);
+
+ if (page_data->is_sound_item)
+ msg_ui_composer_mms_insert_item_remove(cd, page_data->sound_item, COMPOSER_MEDIA_TYPE_AUDIO);
+
elm_entry_entry_set(page_data->entry, "");
- if (cd->ly_body)
- {
- Evas_Object* entry = msg_ui_composer_last_focused_entry_get(cd);
+ /* hide delete button */
+ edje_object_signal_emit(_EDJ(page_data->upper_layout), "hide.delete", "*");
+
+ 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;
@@ -417,20 +699,368 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S
}
}
}
+ }
+ }
+
+ Evas_Object *body_entry = msg_ui_composer_last_body_entry_get(cd);
+ Evas_Object *last_focused_entry = msg_ui_composer_last_focused_entry_get(cd);
+ /* last focus is body entry*/
+ if (body_entry && (body_entry == last_focused_entry)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "focus change to the first page");
+ /* focus change to the first page */
+ cd->current_edit_entry = 0;
+ msg_ui_composer_last_focused_entry_set(cd, page_data->entry);
+ msg_ui_composer_last_focus_load(cd);
+ }
+ } else {
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, i);
+
+ if (page_data->layout == remove_page) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEUBG] Remove MMS (%d)th page", i + 1);
+ elm_box_unpack(cd->body_box, remove_page);
+
+ Evas_Object *body_entry = msg_ui_composer_last_body_entry_get(cd);
+ Evas_Object *last_focused_entry = msg_ui_composer_last_focused_entry_get(cd);
+
+ /* page count should be decresed before delete page layout */
+ body_data->page_list = eina_list_remove(body_data->page_list, page_data);
+ body_data->page_count--;
+
+ if (page_data->page_main_box) {
+ if (page_data->page_box) {
+ if (page_data->image_item) {
+ elm_box_unpack(page_data->page_box, page_data->image_item);
+ evas_object_del(page_data->image_item);
+ }
+
+ if (page_data->entry) {
+ elm_box_unpack(page_data->page_box, page_data->entry);
+ evas_object_del(page_data->entry);
+ }
+
+ evas_object_del(page_data->page_box);
+ }
+
+ if (page_data->del_icon)
+ evas_object_del(page_data->del_icon);
+
+ evas_object_del(page_data->upper_layout);
- 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", "*");
+ if (page_data->sound_item) {
+ elm_box_unpack(page_data->page_main_box, page_data->sound_item);
+ evas_object_del(page_data->sound_item);
+ }
+
+ evas_object_del(page_data->page_main_box);
+ }
+
+ evas_object_del(page_data->layout);
+
+ free(page_data);
+
+ D_MSG("before update current entry");
+ /* deleted page is current edit page */
+ if (cd->current_edit_entry == i) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "update focus index");
+ /* update body focus index*/
+ if (i == 0) { /* if it is first page, update focus index to next page */
+ cd->current_edit_entry = 0;
+ } else { /* if it is not first page, update focus index to previous page */
+ cd->current_edit_entry = i - 1;
+ }
+
+ /* change focus when last focused entry is a body entry */
+ if (body_entry && (body_entry == last_focused_entry)) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, cd->current_edit_entry);
+ if (page_data) {
+ msg_ui_composer_last_focused_entry_set(cd, page_data->entry);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] page_data is NULL");
+ }
+ }
+ } else if (cd->current_edit_entry > i) {
+ /* update body focus index*/
+ cd->current_edit_entry--;
+
+ if (cd->current_edit_entry <= 0)
+ cd->current_edit_entry = 0;
+ }
+ break;
}
}
- /* focus change to the first page */
- cd->current_edit_entry = 0;
- msg_ui_composer_last_focused_entry_set(cd, page_data->entry);
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static Evas_Object *__msg_ui_composer_body_media_layout_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *file_path, Evas_Object *parent, int isSound)
+{
+ D_ENTER;
+
+ if (!cd) {
+ D_EMSG("composer data is NULL");
+ return NULL;
+ }
+
+ Evas_Object *layout = NULL;
+ Evas_Object *thumb_icon = NULL;
+ Evas_Object *del_button = NULL;
+ const char *filename = NULL;
+ char thumbnail_path[COMPOSER_FILEPATH_LEN_MAX + 1] = { 0, };
+
+ layout = elm_layout_add(parent);
+ if (!layout) {
+ D_EMSG("layout create error !!!!");
+ return NULL;
+ }
+ if (isSound == 1 )
+ elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_BODY_SOUND);
+ else
+ elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_BODY_MEDIA);
+
+ 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);
+
+ thumb_icon = elm_icon_add(layout);
+
+ COMPOSER_MEDIA_TYPE_E media_type = msg_composer_get_media_type(file_path);
+
+ if (media_type == COMPOSER_MEDIA_TYPE_IMAGE) {
+ elm_icon_file_set(thumb_icon, file_path, NULL);
+ evas_object_size_hint_min_set(thumb_icon, MSGC_IMAGE_THUMB_WIDTH, MSGC_IMAGE_THUMB_HEIGHT);
+ } else if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) {
+ if (msg_composer_common_get_thumbnail(cd, file_path, thumbnail_path, COMPOSER_FILEPATH_LEN_MAX) == COMPOSER_RETURN_SUCCESS) {
+ elm_icon_file_set(thumb_icon, thumbnail_path, NULL);
+ } else {
+ elm_icon_file_set(thumb_icon, MSGC_IMG_INSERT_ETC_ICON, NULL);
+ }
+ evas_object_size_hint_min_set(thumb_icon, MSGC_IMAGE_THUMB_WIDTH, MSGC_IMAGE_THUMB_HEIGHT);
+ } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) {
+ const char *icon_path = NULL;
+
+ icon_path = msg_common_get_file_icon(file_path);
+ if (icon_path) {
+ elm_icon_file_set(thumb_icon, icon_path, NULL);
+ } else {
+ D_EMSG("icon_path is NULL");
+ elm_icon_file_set(thumb_icon, MSGC_IMG_INSERT_VOICE_ICON, NULL);
+ }
+ evas_object_size_hint_min_set(thumb_icon, MSGC_SOUND_THUMB_WIDTH, MSGC_SOUND_THUMB_HEIGHT);
} else {
- D_EMSG("Invalid page count !!");
+ elm_icon_file_set(thumb_icon, MSGC_IMG_INSERT_ETC_ICON, NULL);
+ evas_object_size_hint_min_set(thumb_icon, MSGC_SOUND_THUMB_WIDTH, MSGC_SOUND_THUMB_HEIGHT);
}
+
+ evas_object_show(thumb_icon);
+ elm_object_part_content_set(layout, "swl.thumbnail", thumb_icon);
+
+ if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) {
+ filename = ecore_file_file_get(file_path);
+ if (filename) {
+ edje_object_part_text_set(_EDJ(layout), "text.filename", filename);
+ }
+ }
+
+ del_button = elm_icon_add(layout);
+
+ if (media_type == COMPOSER_MEDIA_TYPE_AUDIO)
+ elm_icon_file_set(del_button, MSGC_SOUND_INSERT_DEL_ICON, NULL);
+ else
+ elm_icon_file_set(del_button, MSGC_IMG_INSERT_DEL_ICON, NULL);
+
+ evas_object_size_hint_align_set(del_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_focus_allow_set(del_button, EINA_TRUE);
+
+ evas_object_data_set(del_button, "layout", layout);
+ evas_object_smart_callback_add(del_button, "clicked", msg_ui_composer_body_media_del_btn_clicked_cb, cd);
+
+ elm_object_part_content_set(layout, "swl.del_button", del_button);
+
+ D_LEAVE;
+ return layout;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_insert_media(MSG_COMPOSER_VIEW_DATA_S *cd, const char *file_path, COMPOSER_MEDIA_TYPE_E media_type)
+{
+ D_ENTER;
+
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (file_path == NULL || strlen(file_path) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] empty file path");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ 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 = eina_list_count(page_list);
+ bool is_new_page_needed = false;
+ int length = 0;
+
+ /* error cases */
+ if (page_count < 1) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] mms page count error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (page_count <= cd->current_edit_entry) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] mms page count error 2");
+ return COMPOSER_RETURN_INVALID_PAGE;
+ }
+
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, cd->current_edit_entry);
+
+ if (media_type == COMPOSER_MEDIA_TYPE_IMAGE) {
+ if (page_data->is_image_item)
+ is_new_page_needed = true;
+
+ if (body_data->region_order == COMPOSER_REGION_ORDER_UNDETERMINDED)
+ body_data->region_order = __msg_ui_composer_body_verify_region_order(cd);
+ } else if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) {
+ if (page_data->is_image_item || page_data->is_sound_item)
+ is_new_page_needed = true;
+
+ if (body_data->region_order == COMPOSER_REGION_ORDER_UNDETERMINDED)
+ body_data->region_order = __msg_ui_composer_body_verify_region_order(cd);
+ } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) {
+ if (page_data->is_sound_item || (page_data->is_image_item && page_data->isVideo))
+ is_new_page_needed = true;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid media type [%d]", media_type);
+ return COMPOSER_RETURN_INVALID_MEDIA_TYPE;
+ }
+
+ if (is_new_page_needed) {
+ if (msg_ui_composer_body_add_page(cd) != COMPOSER_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] Fail of new page created");
+ return COMPOSER_RETURN_FAIL;
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] new page created");
+ /* if new page added, current edit entry is changed to a new page's entry */
+ cd->current_edit_entry = page_count;
+ }
+
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, cd->current_edit_entry);
+
+ if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) {
+ page_data->is_sound_item = true;
+ length = strlen(file_path);
+ strncpy(page_data->sound_file_path, file_path, length);
+ page_data->sound_file_path[length] = '\0';
+
+ msg_composer_common_get_media_duration(file_path, &page_data->sound_duration);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] audio file duration [%d]", page_data->sound_duration);
+
+ page_data->sound_item = __msg_ui_composer_body_media_layout_create(cd, page_data->sound_file_path, page_data->layout, 1);
+
+ if (page_data->sound_item) {
+ elm_box_pack_end(page_data->page_main_box, page_data->sound_item);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] creating insert item layout error");
+ return COMPOSER_RETURN_FAIL;
+ }
+ } else {
+ page_data->is_image_item = true;
+ page_data->isVideo = media_type == COMPOSER_MEDIA_TYPE_VIDEO ? true : false;
+ length = strlen(file_path);
+ strncpy(page_data->image_file_path, file_path, length);
+ page_data->image_file_path[length] = '\0';
+
+ page_data->image_item = __msg_ui_composer_body_media_layout_create(cd, page_data->image_file_path, page_data->layout, 0);
+
+ if (page_data->image_item) {
+ elm_box_pack_start(page_data->page_box, page_data->image_item);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] creating insert item layout error");
+ return COMPOSER_RETURN_FAIL;
+ }
+ }
+
+ elm_object_disabled_set(cd->send_button, EINA_FALSE);
+ msg_ui_composer_message_type_check_and_change(cd);
+ msg_ui_composer_body_info_area_update(cd);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "cd->attach_index = %d", cd->attach_index);
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ int media_count = eina_list_count(cd->attachlist);
+
+ /* show invalid popup when last content is added */
+ if (media_count == cd->attach_index) {
+ msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ }
+ } else {
+ /* change last focused entry to a page that is added media recently*/
+ msg_ui_composer_last_focused_entry_set(cd, page_data->entry);
+ msg_ui_composer_last_focus_load(cd);
+ }
+
D_LEAVE;
return COMPOSER_RETURN_SUCCESS;
}
+int msg_ui_composer_get_inserted_item_size(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+ return MSG_UI_RET_ERR;
+ }
+
+ int page_count = cd->body_data.page_count;
+ Eina_List *page_list = cd->body_data.page_list;
+ int total_size = 0;
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+ int image_file_size = 0;
+ int sound_file_size = 0;
+
+ if (page_data->is_image_item) {
+ image_file_size = msg_composer_get_file_size(page_data->image_file_path);
+ }
+ if (page_data->is_sound_item) {
+ sound_file_size = msg_composer_get_file_size(page_data->sound_file_path);
+ }
+
+ total_size = total_size + image_file_size + sound_file_size;
+ }
+
+ D_LEAVE;
+ return total_size;
+}
+
+void msg_ui_composer_body_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd, const char *font_sytle)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ D_MSG_RETM_IF(font_sytle == NULL, "font_sytle is NULL");
+
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+ D_MSG_RETM_IF(body_data->page_list == NULL, "page_list is NULL");
+
+ int page_count = body_data->page_count;
+ MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, i);
+ if (page_data && page_data->entry) {
+ elm_entry_text_style_user_push(page_data->entry, font_sytle);
+ }
+ }
+
+ D_LEAVE;
+}
+
diff --git a/composer/src/ui-composer/msg-ui-composer-body.c b/composer/src/ui-composer/msg-ui-composer-body.c
index 86cb4ca..3cd0801 100755
--- a/composer/src/ui-composer/msg-ui-composer-body.c
+++ b/composer/src/ui-composer/msg-ui-composer-body.c
@@ -14,14 +14,17 @@
* limitations under the License.
*/
+
/* includes */
+#include <drm_client.h>
#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-subject.h"
#include "msg-ui-composer-common.h"
-
+#include "msg-ui-composer-attachment.h"
#include "msg-ui-composer-external.h"
#include "msg-ui-composer-message.h"
#include "msg-ui-composer-popup.h"
@@ -29,7 +32,39 @@
#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)
+static void __attach_max_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);
+
+ D_LEAVE;
+}
+
+static void __attach_max_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);
+ ug_destroy_me(cd->ug);
+
+ D_LEAVE;
+}
+
+static void __attach_max_popup_close_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ Evas_Object *popup = (Evas_Object *)data;
+
+ MSGC_EVAS_OBJECT_DEL(popup);
+ D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S *cd, int64 *size)
{
D_ENTER;
@@ -40,7 +75,13 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S
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);
+ /* This is a temporal approach to get a message size */
+ /* currently, Message size is sum of attached files and inserted files */
+ /* it will be implemented, message size validate API on MF side */
+ inserted_size = msg_ui_composer_get_inserted_item_size(cd);
+ attached_size = msg_ui_composer_get_attached_item_size(cd);
+
+ D_MSG("inserted_size(%lld) + attached_size(%lld)",inserted_size ,attached_size);
total_size = inserted_size + attached_size;
*size = total_size;
@@ -48,6 +89,627 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S
return COMPOSER_RETURN_SUCCESS;
}
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_jpeg_image_resolution_change(const char *src_path, const char *dst_path)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(src_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Source Path is Invaild");
+ D_MSG_RETVM_IF(dst_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Destination Path is Invaild");
+
+ unsigned int restrict_w = 0;
+ unsigned int restrict_h = 0;
+ unsigned int from_w = 0;
+ unsigned int from_h = 0;
+ unsigned int to_w = 0;
+ unsigned int to_h = 0;
+
+ /*Check Jpeg file*/
+ const char *file_ext = msg_common_get_file_ext(src_path);
+ D_MSG_RETVM_IF((strcasecmp(file_ext, "jpeg") != 0 && strcasecmp(file_ext, "jpg") != 0), COMPOSER_RETURN_FAIL, "File Ext Value is NOT Valid");
+
+ /*Get original image resolution*/
+ int util_ret = jpeg_image_get_resolution(src_path, &from_w, &from_h);
+ D_MSG_RETVM_IF(util_ret != COMPOSER_UTIL_ERR_NONE, COMPOSER_RETURN_FAIL, "Fail to Get Resolution");
+
+ D_MSG("Input IMAGE resolution %d X %d", from_w, from_h);
+ if (from_w > from_h) {
+ restrict_w = MSGC_RESTRICT_MAX_IMG_W;
+ restrict_h = MSGC_RESTRICT_MAX_IMG_H;
+ } else {
+ restrict_w = MSGC_RESTRICT_MAX_IMG_H;
+ restrict_h = MSGC_RESTRICT_MAX_IMG_W;
+ }
+
+ D_MSG("Set RESTRICT resolution %d X %d", restrict_w, restrict_h);
+
+ if (from_w > restrict_w && from_h > restrict_h) {
+ double weight_w = (double)restrict_w/from_w;
+ double weight_h = (double)restrict_h/from_h;
+ if (weight_w < weight_h) {
+ to_w = restrict_w;
+ to_h = from_h*weight_w;
+ } else if (weight_w > weight_h) {
+ to_w = from_w*weight_h;
+ to_h = restrict_h;
+ } else {
+ to_w = restrict_w;
+ to_h = restrict_h;
+ }
+ } else if (from_w > restrict_w) {
+ double weight_w = (double)restrict_w/from_w;
+ to_w = restrict_w;
+ to_h = from_h*weight_w;
+ } else if (from_h > restrict_h) {
+ double weight_h = (double)restrict_h/from_h;
+ to_w = from_w*weight_h;
+ to_h = restrict_h;
+ } else {
+ D_MSG("It does not need to resize image");
+ return COMPOSER_RETURN_SUCCESS;
+ }
+
+ D_MSG("Set input image resolution to %d X %d",to_w, to_h);
+
+ util_ret = jpeg_image_resize(src_path, to_w, to_h, dst_path);
+ if (util_ret != COMPOSER_UTIL_ERR_NONE) {
+ D_EMSG("image resize error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_jpeg_image_quality_down(const char *src_path, const char *dst_path, int64 wishsize)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(src_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Source Path is Invaild");
+ D_MSG_RETVM_IF(dst_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Destination Path is Invaild");
+ D_MSG_RETVM_IF(wishsize <= 0, COMPOSER_RETURN_FAIL, "Parameter remain size (%d) is Invaild", wishsize);
+
+ const int max_resize_loop = COMPOSER_RESIZE_LOOP_MAX;
+ int quality;
+ char *file_ext;
+ int i = 0;
+ int util_ret;
+
+ file_ext = msg_common_get_file_ext(src_path);
+ D_MSG_RETVM_IF((strcasecmp(file_ext, "jpeg") != 0 && strcasecmp(file_ext, "jpg") != 0), COMPOSER_RETURN_FAIL, "File Ext Value is NOT Valid");
+
+ /*Set proper quality for image quality down*/
+ int64 file_size = msg_composer_get_file_size(src_path);
+
+ if (file_size > wishsize ) {
+ int percent;
+ percent = (int)(wishsize * 100) / file_size;
+ D_MSG("percent(%d) = wishsize(%lld) / filesize(%lld)", percent, wishsize, file_size);
+
+ /* remain size of msg / Original File Size x 100 = percentage to reduce original file
+ If percent > 60 then proper quality is 95
+ If 40 < percent < 60 then proper quality is 85
+ If 20 < percent < 40 then proper quality is 60
+ If 15 < percent < 20 then proper quality is 20
+ If 15 < percent < 20 then proper quality is 20
+ If 10 < percent < 15 then proper quality is 10
+ */
+
+ if (percent > 60) {
+ quality = 95;
+ } else if (percent > 40) {
+ quality = 85;
+ } else if (percent > 20) {
+ quality = 60;
+ } else if (percent > 15) {
+ quality = 20;
+ } else if (percent > 10) {
+ quality = 10;
+ } else{
+ D_EMSG("Available size is too small to resize");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_MSG("quality= %d", quality);
+ } else {
+ D_MSG("It does NOT need Quality Set");
+ return COMPOSER_RETURN_SUCCESS;
+ }
+
+ /*Try image qulity down */
+ for (i = 0; i < max_resize_loop; i++) {
+
+ if (quality < 10) {
+ D_EMSG("Quality is Too Low to Resize");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ util_ret = jpeg_image_quality_set(src_path, quality, dst_path);
+ if (util_ret == COMPOSER_UTIL_ERR_NONE) {
+
+ file_size = msg_composer_get_file_size(dst_path);
+
+ if (wishsize > file_size) {
+ return COMPOSER_RETURN_SUCCESS;
+ }
+
+ quality /= 2;
+
+ } else {
+ D_EMSG("Fail to Resizing");
+ return COMPOSER_RETURN_FAIL;
+ }
+ }
+
+ D_EMSG("Resized Result Size Is Not Satisfy to Add");
+ return COMPOSER_RETURN_FAIL;
+}
+
+static void __msg_ui_composer_body_resize_end_job(void *data)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ COMPOSER_THREAD_DATA_S *th_data;
+ COMPOSER_RETURN_TYPE_E ret;
+ char *list_data;
+
+ th_data = data;
+ D_MSG_RETM_IF(th_data == NULL, "Thread Data is NULL");
+
+ cd = th_data->cd;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ cd->job_thread_end = NULL;
+ cd->attach_thread = NULL;
+
+ if (th_data->status == COMPOSER_THREAD_STATUS_RESIZE_SUCCESS) {
+ /*attach item exist*/
+ if (cd->iter_list) {
+ ret = msg_ui_composer_body_items_add(cd);
+ if (ret == COMPOSER_RETURN_RESIZE_IMAGE) {
+ D_MSG("resize attach item ...");
+ if (th_data)
+ g_free(th_data);
+ return;
+ }
+ }
+ } else {
+ char popup_msg[DEF_BUF_LEN_L] = { 0, };
+ /* remove temp file */
+ ecore_file_remove(th_data->filepath);
+
+ if (cd->isLoad == true && cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+ snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX_Q, cd->mms_max_size/ 1024);
+ Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, 0);
+
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_OK);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_ok_btn_clicked_cb, cd);
+
+ Evas_Object *btn2 = elm_button_add(popup);
+ elm_object_style_set(btn2, "popup_button/default");
+ elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL);
+ elm_object_part_content_set(popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", __attach_max_popup_cancel_btn_clicked_cb, cd);
+ cd->popup_end = popup;
+ } else {
+ snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX, cd->mms_max_size/ 1024);
+ Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_close_btn_clicked_cb, popup);
+ }
+ }
+
+ if (cd->isLoad == true)
+ cd->isLoad = false;
+
+ EINA_LIST_FREE(cd->attachlist, list_data) {
+ if (list_data)
+ g_free(list_data);
+ }
+
+ cd->attachlist = NULL;
+ cd->attach_index = 0;
+
+ /*resizing progress popup*/
+ if (cd->progress_popup) {
+ evas_object_del(cd->progress_popup);
+ cd->progress_popup = NULL;
+ }
+
+ cd->iter_list = NULL;
+
+ if (th_data)
+ g_free(th_data);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_resize_worker_end_cb(void *data, Ecore_Thread *thread)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ COMPOSER_THREAD_DATA_S *th_data;
+
+ th_data = data;
+ D_MSG_RETM_IF(th_data == NULL, "Thread Data is NULL");
+
+ cd = th_data->cd;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ if (cd->job_thread_end)
+ ecore_job_del(cd->job_thread_end);
+
+ cd->job_thread_end = ecore_job_add(__msg_ui_composer_body_resize_end_job, th_data);
+
+ D_LEAVE;
+}
+
+
+void msg_ui_composer_body_resize_worker_feedback_cb(void *data, Ecore_Thread *thread, void *msg_data)
+{
+ D_ENTER;
+ COMPOSER_THREAD_DATA_S *th_data = data;
+
+ D_MSG_RETM_IF(th_data == NULL, "Thread Data is Invalid");
+ D_MSG_RETM_IF(msg_data == NULL, "Thread Message Data is Invalid");
+
+ D_MSG("Received Resized Image path = %s", msg_data);
+ msg_ui_composer_body_insert_media(th_data->cd, msg_data, COMPOSER_MEDIA_TYPE_IMAGE);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_resize_worker_thread(void *data, Ecore_Thread *thread)
+{
+ D_ENTER;
+ COMPOSER_RETURN_TYPE_E resize_result;
+ COMPOSER_RETURN_TYPE_E ret;
+ MSG_COMPOSER_VIEW_DATA_S *cd;
+ COMPOSER_THREAD_DATA_S *th_data = data;
+
+ if (!th_data) {
+ D_EMSG("No th_data");
+ ecore_thread_feedback(thread, "No th_data");
+ return;
+ }
+
+ cd = th_data->cd;
+ if (!cd) {
+ D_EMSG("No cd");
+ ecore_thread_feedback(thread, "No cd");
+ return;
+ }
+
+ if (th_data->need_ChangeResolution == true) {
+ ret = __msg_ui_composer_jpeg_image_resolution_change(th_data->filepath, th_data->filepath);
+ if (ret != COMPOSER_RETURN_SUCCESS) {
+ th_data->status = COMPOSER_THREAD_STATUS_RESIZE_FAIL;
+ return;
+ }
+ }
+
+ resize_result = __msg_ui_composer_jpeg_image_quality_down(th_data->filepath, th_data->filepath, th_data->wishsize);
+ if (resize_result == COMPOSER_RETURN_SUCCESS) {
+ th_data->status = COMPOSER_THREAD_STATUS_RESIZE_SUCCESS;
+ ecore_thread_feedback(thread, th_data->filepath);
+ } else {
+ th_data->status = COMPOSER_THREAD_STATUS_RESIZE_FAIL;
+ }
+
+ D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_items_add(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is Invalid");
+ D_MSG_RETVM_IF(cd->attachlist == NULL, COMPOSER_RETURN_FAIL, "Composer attach List is Invalid");
+
+ char *list_data = NULL;
+ COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
+ Eina_List *l = NULL;
+ Eina_List *o = NULL;
+ char popup_msg[DEF_BUF_LEN_L] = { 0, };
+
+ if (cd->iter_list)
+ o = cd->iter_list;
+ else
+ o = cd->attachlist;
+
+ EINA_LIST_FOREACH(o, l, list_data) {
+ cd->attach_index++;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "cd->attach_index = %d", cd->attach_index);
+ if (list_data) {
+ ret = msg_ui_composer_body_item_add(cd, list_data);
+ if (ret == COMPOSER_RETURN_RESIZE_IMAGE) {
+ break;
+ } else if (ret == COMPOSER_RETURN_DRM_FORWARDLOCK) {
+ Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_FILE_IS_FORWARD_LOCK, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
+ break;
+ } else if (ret == COMPOSER_RETURN_OVERSIZE_FILE) {
+
+ if (cd->isLoad == true && cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+ snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX_Q, cd->mms_max_size/ 1024);
+ Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, 0);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_OK);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_ok_btn_clicked_cb, cd);
+ Evas_Object *btn2 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL);
+ elm_object_part_content_set(popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", __attach_max_popup_cancel_btn_clicked_cb, cd);
+ cd->popup_end = popup;
+ } else {
+ snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX, cd->mms_max_size/ 1024);
+ Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, 0);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_close_btn_clicked_cb, popup);
+ }
+
+ break;
+ } else if (ret != COMPOSER_RETURN_SUCCESS) {
+ msg_ui_composer_status_popup_show(cd, _MSGSTR("IDS_MSGC_POP_MMSCANTADD"), COMPOSER_STATUS_POPUP_DEFAULT_TIME);
+ D_MSG("Fail to add item");
+ break;
+ }
+ }
+ }
+
+ if (ret == COMPOSER_RETURN_RESIZE_IMAGE) {
+ cd->iter_list = eina_list_next(l);
+ } else {
+ if (cd->isLoad == true)
+ cd->isLoad = false;
+
+ EINA_LIST_FREE(cd->attachlist,list_data) {
+ if (list_data)
+ free(list_data);
+ }
+ cd->iter_list = NULL;
+ cd->attach_index = 0;
+ }
+
+ D_LEAVE;
+ return ret;
+}
+
+bool msg_ui_composer_body_weburi_append(MSG_COMPOSER_VIEW_DATA_S *cd, const char *uri)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, false, "Composer Data is Invalid");
+ D_MSG_RETVM_IF(uri == NULL, false, "uri is NULL");
+ D_MSG_RETVM_IF(is_web_uri(uri) == false, false, "url is NOT weburi");
+
+ Evas_Object *entry = msg_ui_composer_last_body_entry_get(cd);
+ D_MSG_RETVM_IF(entry == NULL, false, "entry is NULL");
+
+ char *str = elm_entry_utf8_to_markup(uri);
+ D_MSG_RETVM_IF(str == NULL, false, "markup string is NULL");
+
+ char *prev_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+ if (prev_str) {
+ if (strlen(prev_str) > 0) {
+ char *enter = elm_entry_utf8_to_markup("\n");
+ if (enter) {
+ elm_entry_entry_append(entry, enter);
+ g_free(enter);
+ }
+ elm_entry_entry_append(entry, str);
+ } else {
+ elm_entry_entry_set(entry, str);
+ }
+
+ g_free(prev_str);
+ } else {
+ D_MSG("prev_str is NULL !!");
+ elm_entry_entry_set(entry, str);
+ }
+
+ g_free(str);
+ D_LEAVE;
+ return true;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_item_add(MSG_COMPOSER_VIEW_DATA_S *cd, const char *item_path)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "Composer Data is Invalid");
+ D_MSG_RETVM_IF(item_path == NULL, COMPOSER_RETURN_NULL_POINTER, "item_path is NULL");
+
+ COMPOSER_RETURN_TYPE_E ret;
+ COMPOSER_MEDIA_TYPE_E media_type;
+ bool is_drm = false;
+
+ /*if path is web uri then set path as body text*/
+ if (is_web_uri(item_path) == true) {
+ if (msg_ui_composer_body_weburi_append(cd, item_path) == false)
+ return COMPOSER_RETURN_FAIL;
+
+ return COMPOSER_RETURN_SUCCESS;
+ }
+
+ /*check file path*/
+ D_MSG_RETVM_IF(ecore_file_exists(item_path) == EINA_FALSE, COMPOSER_RETURN_FAIL, "item_path(%s) is NOT Exist", item_path);
+ D_MSG_RETVM_IF(ecore_file_is_dir(item_path) == EINA_TRUE, COMPOSER_RETURN_FAIL, "item_path(%s) is dir", item_path);
+
+ /*Check drm file && forward lock*/
+ drm_bool_type_e is_drm_file = DRM_FALSE;
+ if (drm_is_drm_file(item_path, &is_drm_file) == DRM_RETURN_SUCCESS &&
+ is_drm_file == DRM_TRUE) {
+ int ret = DRM_RETURN_SUCCESS;
+ drm_file_info_s drmInfo;
+
+ memset(&drmInfo, 0x0, sizeof(drm_file_info_s));
+
+ ret = drm_get_file_info(item_path, &drmInfo);
+ if (ret != DRM_RETURN_SUCCESS) {
+ D_EMSG("Error drm_get_file_info");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (drmInfo.oma_info.method == DRM_METHOD_TYPE_FORWARD_LOCK ||
+ drmInfo.oma_info.method == DRM_METHOD_TYPE_COMBINED_DELIVERY) {
+ D_MSG("drm file type %d is not allowed add", drmInfo.oma_info.method);
+ return COMPOSER_RETURN_DRM_FORWARDLOCK;
+ }
+
+ is_drm = true;
+ }
+
+ /*Check Media Type*/
+ media_type = msg_composer_get_media_type(item_path);
+ D_MSG("media_type = %d", media_type);
+
+ /*Check Creation Mode*/
+ bool bIsSuitable = true;
+ int creationMode;
+ msg_struct_t setting = NULL;
+ setting = msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT);
+
+ if (setting) {
+ msg_get_mms_send_opt(cd->msg_handle, setting);
+ if (msg_get_int_value(setting, MSG_MMS_SENDOPT_CREATION_MODE_INT, &creationMode) == MSG_SUCCESS) {
+ if (creationMode == MSG_CREATION_MODE_RESTRICTED || creationMode == MSG_CREATION_MODE_WARNING) {
+ D_MSG("restricted");
+ bIsSuitable = msg_composer_util_is_allow_creation_mode(item_path, media_type);
+ }
+ }
+
+ msg_release_struct(&setting);
+ } else {
+ D_EMSG("msg_create_struct is failed");
+ }
+
+ /*Check file size && resize able (if Image)*/
+ int64 msg_size, file_size, remain_size;
+ ret = msg_ui_composer_get_message_size(cd, &msg_size);
+ D_MSG_RETVM_IF(ret != COMPOSER_RETURN_SUCCESS, COMPOSER_RETURN_FAIL, "Fail to Get Message Size");
+ remain_size = cd->mms_max_size - msg_size;
+
+ file_size = msg_composer_get_file_size(item_path);
+ if (file_size > remain_size) {
+
+ char *file_ext = msg_common_get_file_ext(item_path);
+ /*If image type resize*/
+ if (media_type == COMPOSER_MEDIA_TYPE_IMAGE
+ && is_drm == false
+ && (strcasecmp(file_ext, "jpeg") == 0 || strcasecmp(file_ext, "jpg") == 0)) {
+
+ COMPOSER_THREAD_DATA_S *th_data;
+ th_data = calloc(1, sizeof(COMPOSER_THREAD_DATA_S));
+ if (th_data == NULL)
+ return COMPOSER_RETURN_FAIL;
+
+ th_data->cd = cd;
+
+ if (bIsSuitable) {
+ th_data->need_ChangeResolution = false;
+ D_MSG("Suitable");
+ } else {
+ th_data->need_ChangeResolution = true;
+ D_MSG("Not Suitable");
+ }
+
+ th_data->wishsize = remain_size;
+
+ ret = msg_ui_composer_common_get_file(cd, item_path, th_data->filepath, sizeof(th_data->filepath)-1);
+ if (ret != COMPOSER_RETURN_SUCCESS) {
+ D_EMSG("get file error");
+ g_free(th_data);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (!cd->progress_popup)
+ cd->progress_popup = msg_ui_composer_progress_popup_show(th_data->cd, _MSGSTR("IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"));
+
+ cd->attach_thread = ecore_thread_feedback_run(msg_ui_composer_body_resize_worker_thread,
+ msg_ui_composer_body_resize_worker_feedback_cb,
+ msg_ui_composer_body_resize_worker_end_cb,
+ msg_ui_composer_body_resize_worker_end_cb,
+ th_data, EINA_TRUE);
+
+ if (!cd->attach_thread) {
+ D_EMSG("thread run is failed");
+ /*resizing progress popup*/
+ if (cd->progress_popup) {
+ evas_object_del(cd->progress_popup);
+ cd->progress_popup = NULL;
+ }
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ return COMPOSER_RETURN_RESIZE_IMAGE;
+ } else {
+ D_MSG("Adding Item Size is too big to add or remain msg size is too small");
+ return COMPOSER_RETURN_OVERSIZE_FILE;
+ }
+
+ } else {
+ char local_item_path[COMPOSER_FILEPATH_LEN_MAX + 1] = {0,};
+ /* copy temp file */
+ ret = msg_ui_composer_common_get_file(cd, item_path, local_item_path, COMPOSER_FILEPATH_LEN_MAX);
+
+ if (ret != COMPOSER_RETURN_SUCCESS) {
+ D_EMSG("get file error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (bIsSuitable) {
+ if (media_type == COMPOSER_MEDIA_TYPE_IMAGE || media_type == COMPOSER_MEDIA_TYPE_VIDEO || media_type == COMPOSER_MEDIA_TYPE_AUDIO) {
+ msg_ui_composer_body_insert_media(cd, local_item_path, media_type);
+ } else {
+ msg_ui_composer_add_attach_media(cd, local_item_path, media_type);
+ }
+ } else {
+ D_MSG("Adding Item is not Suitable to add");
+ return COMPOSER_RETURN_FAIL;
+ }
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static Evas_Object *__msg_ui_composer_body_create_add_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);
+
+ elm_object_theme_set(button, cd->th);
+ elm_object_style_set(button, "circle/add_plus");
+
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(button);
+
+ evas_object_smart_callback_add(button, "clicked", msg_ui_composer_body_add_btn_clicked_cb, cd);
+
+ cd->add_button = button;
+
+ D_LEAVE;
+ return button;
+}
+
static Evas_Object *__msg_ui_composer_body_create_main_field(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent)
{
D_ENTER;
@@ -67,12 +729,6 @@ static Evas_Object *__msg_ui_composer_body_create_main_field(MSG_COMPOSER_VIEW_D
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);
@@ -97,6 +753,34 @@ static Evas_Object *__msg_ui_composer_body_create_main_field(MSG_COMPOSER_VIEW_D
return scroller;
}
+static COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_mms_data(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_NULL_POINTER;
+ }
+
+ if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_MMS);
+
+ if (cd->isSubject)
+ msg_ui_composer_read_subject(cd);
+
+ if (cd->attach_data.attachment_Cnt > 0)
+ msg_ui_composer_read_attachments(cd);
+
+ msg_ui_composer_body_read_mms_body(cd);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid message type");
+ return COMPOSER_RETURN_INVALID_MSG_TYPE;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_data(MSG_COMPOSER_VIEW_DATA_S *cd)
{
D_ENTER;
@@ -108,8 +792,11 @@ COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_data(MSG_COMPOSER_VIEW_DATA_S
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 {
+ } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] message type MMS!!");
+ __msg_ui_composer_body_read_mms_data(cd);
+ } else {
MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type!!");
msg_ui_composer_message_destroy();
return COMPOSER_RETURN_FAIL;
@@ -127,6 +814,7 @@ static Evas_Object *__msg_ui_composer_body_create_send_button(MSG_COMPOSER_VIEW_
return NULL;
Evas_Object *button = NULL;
+ Evas_Object *icon = NULL;
button = elm_button_add(parent);
if (!button) {
@@ -134,18 +822,22 @@ static Evas_Object *__msg_ui_composer_body_create_send_button(MSG_COMPOSER_VIEW_
return NULL;
}
- elm_object_style_set(button, "style2");
+ elm_object_theme_set(button, cd->th);
+ elm_object_style_set(button, "sendbutton");
+
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);
+ icon = elm_icon_add(parent);
+ elm_icon_file_set(icon, MSGC_IMG_SEND_ICON, NULL);
+
+ elm_object_part_content_set(button, "icon", icon);
evas_object_show(button);
evas_object_smart_callback_add(button, "clicked", msg_ui_composer_body_send_btn_clicked_cb, cd);
D_LEAVE;
-
return button;
}
@@ -178,6 +870,7 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje
}
Evas_Object *layout = NULL;
+ Evas_Object *add_button = NULL;
Evas_Object *main_field = NULL;
layout = __msg_ui_compsoer_body_layout_create(cd, parent);
@@ -186,6 +879,12 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje
return NULL;
}
+ add_button = __msg_ui_composer_body_create_add_button(cd, parent);
+ if (!add_button) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] add_button_field 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 !!");
@@ -195,8 +894,9 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje
if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
elm_box_clear(cd->body_box);
msg_ui_composer_body_add_page(cd);
- } else {
+ } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ } else {
MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type");
return NULL;
}
@@ -208,13 +908,22 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje
}
elm_object_disabled_set(cd->send_button, EINA_TRUE);
+
+ elm_object_part_content_set(layout, "body.swl.add_button", add_button);
elm_object_part_content_set(layout, "body.swl.main", main_field);
elm_object_part_content_set(layout, "body.swl.send_button", cd->send_button);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, msg_ui_composer_body_body_layout_resize_cb, cd);
+
D_LEAVE;
return layout;
}
+void msg_ui_composer_body_delete(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+
+}
+
void msg_ui_composer_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
{
D_ENTER;
@@ -228,15 +937,65 @@ void msg_ui_composer_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
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);
+ msg_ui_composer_mms_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_read_preview_message(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_NULL_POINTER;
+ }
+
+ if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ __msg_ui_composer_body_read_mms_data(cd);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invlaid message type!!");
+ return COMPOSER_RETURN_INVALID_MSG_TYPE;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_media(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, char *filepath, int filetype, 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);
+
+ pcomp_data->current_edit_entry = nPage;
+
+ char local_item_path[COMPOSER_FILEPATH_LEN_MAX + 1] = {0, };
+ /* copy temp file */
+ if (msg_ui_composer_common_get_file(pcomp_data, filepath, local_item_path, COMPOSER_FILEPATH_LEN_MAX) != COMPOSER_RETURN_SUCCESS) {
+ D_EMSG("get file error");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (msg_ui_composer_body_insert_media(pcomp_data, local_item_path, filetype) != COMPOSER_RETURN_SUCCESS) {
+ D_EMSG("insert media error");
+ return COMPOSER_RETURN_FAIL;
+ }
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
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;
@@ -253,11 +1012,13 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_text(MSG_COMPOSER_VIEW_DA
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);
+ char *markup_text = elm_entry_utf8_to_markup(body_text);
elm_entry_entry_set(entry, markup_text);
- g_free(markup_text);
+ if (markup_text)
+ g_free(markup_text);
+
D_LEAVE;
return COMPOSER_RETURN_SUCCESS;
}
@@ -291,11 +1052,100 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_data_init(MSG_COMPOSER_VIEW_DATA_S *
return COMPOSER_RETURN_SUCCESS;
}
+static bool __msg_ui_composer_is_mms_text(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object* entry)
+{
+ D_ENTER;
+
+ if (!cd || !entry) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] NULL parameter passed.");
+ return false;
+ }
+
+ int ucs2_len = 0;
+ int char_count = 0;
+ int cms_page = 0;
+ int cms_max_count = 0;
+ int char_encode = COMPOSER_CHAR_ENCODE_MAX;
+ char* body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+ unsigned char ucs2_text[4000] = {0,};
+
+ if (body_text == NULL){
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] no text on there")
+ return false;
+ }
+
+ ucs2_len = msg_ui_composer_convert_UTF8ToUCS2(ucs2_text, 4000, body_text, strlen(body_text));
+ free(body_text);
+
+ char_encode = msg_ui_composer_body_entry_char_count(cd, ucs2_text, ucs2_len, &char_count);
+
+ if (char_encode == COMPOSER_CHAR_ENCODE_UNICODE) {
+ cms_max_count = COMPOSER_CMS_UNICODE_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
+ } else if (char_encode == COMPOSER_CHAR_ENCODE_GSM7) {
+ cms_max_count = COMPOSER_CMS_GSM7_MAX_LEN * COMPOSER_CMS_MAX_PAGE;
+ } else {
+ return false;
+ }
+
+ D_LEAVE;
+ if (cms_page > COMPOSER_CMS_MAX_PAGE || cms_max_count < char_count) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+Eina_Bool msg_ui_composer_body_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+ return EINA_FALSE;
+ }
+
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+ Eina_List *page_list = body_data->page_list;
+ MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+
+ if (body_data->page_count > 1) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] composer message type MMS (multi-page)");
+ return EINA_TRUE;
+ } else if (body_data->page_count == 1) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0);
+ if (!page_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page data is NULL");
+ return EINA_FALSE;
+ }
+
+ if (page_data->is_image_item && (strlen(page_data->image_file_path) > 0)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] composer message type MMS (image/video data exist)");
+ return EINA_TRUE;
+ }
+
+ if (page_data->is_sound_item && (strlen(page_data->sound_file_path) > 0)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] composer message type MMS (image/video data exist)");
+ return EINA_TRUE;
+ }
+
+ if (__msg_ui_composer_is_mms_text(cd, page_data->entry) == true) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] number of body character is over CMS max count)");
+ return EINA_TRUE;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page_count value is not valid");
+ return EINA_FALSE;
+ }
+
+ return EINA_FALSE;
+}
+
void msg_ui_composer_body_focus_set(MSG_COMPOSER_VIEW_DATA_S *cd, int nPage)
{
D_ENTER;
if (!cd)
return;
+
if (nPage < 0)
return;
diff --git a/composer/src/ui-composer/msg-ui-composer-common.c b/composer/src/ui-composer/msg-ui-composer-common.c
index 4603077..d0eb248 100755
--- a/composer/src/ui-composer/msg-ui-composer-common.c
+++ b/composer/src/ui-composer/msg-ui-composer-common.c
@@ -14,29 +14,169 @@
* limitations under the License.
*/
+
#include <Elementary.h>
#include <utilX.h>
#include <Ecore_X.h>
-
+#include <aul.h>
+#include <mmf/mm_error.h>
+#include <mm_file.h>
+#include <mm_util_jpeg.h>
#include <devman_haptic.h>
+
#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-subject.h"
#include "msg-ui-composer-body.h"
+#include "msg-ui-composer-attachment.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"
+/* MIME type table*/
+
+const composer_mime_type_t composer_mime_table[] = {
+/*audio*/
+ {"aac", "audio/aac", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"amr", "audio/amr", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"amr", "audio/x-amr", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"amr", "audio/amr-wb", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "audio/imelody", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "audio/imy", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "audio/iMelody", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "audio/melody", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "audio/x-iMelody", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "text/iMelody", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "text/x-iMelody", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"imy", "text/x-imelody", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mid", "audio/mid", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mid", "audio/midi", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mid", "audio/x-mid", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mid", "audio/x-midi", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"midi", "audio/mid", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mmf", "application/vnd.smaf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mmf", "application/x-smaf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mmf", "audio/mmf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mmf", "audio/smaf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mmf", "audio/x-mmf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mmf", "audio/x-smaf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/mpeg", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/mp3", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/mpg3", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/mpeg3", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/mpg", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/x-mp3", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/x-mpeg", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/x-mpeg3", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/x-mpegaudio", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mp3", "audio/x-mpg", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"mpg", "audio/x-mpeg", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"m4a", "audio/m4a", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"ra", "audio/x-pn-realaudio", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"rm", "audio/vnd.rn-realaudio", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"rm", "audio/x-pn-multirate-realaudio", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"rm", "audio/x-pn-multirate-realaudio-live", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"spm", "audio/sp-midi", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"wav", "audio/wav", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"wav", "audio/wave", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"wav", "audio/x-wav", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"wav", "audio/x-wave", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"wma", "audio/wma", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"wma", "audio/x-ms-wma", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"xmf", "audio/mobile-xmf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"xmf", "audio/xmf", COMPOSER_MEDIA_TYPE_AUDIO},
+ {"xmf", "audio/x-xmf", COMPOSER_MEDIA_TYPE_AUDIO},
+/*image*/
+ {"bmp", "image/bmp", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"bmp", "image/x-bmp", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"gif", "image/gif", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"GIF", "image/gif", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"gif", "image/vnd.tmo.my5-gif", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"jpg", "image/jpg", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"jpg", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"jpg", "image/vnd.tmo.my5-jpg", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"jpeg", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"JPG", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"jpg", "image/pjpeg", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"jpe", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"png", "image/png", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"wbmp", "image/vnd.wap.wbmp", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"wbmp", "image/wbmp", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"swf", "application/x-shockwave-flash", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"tif", "image/tiff", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"tif", "image/tif", COMPOSER_MEDIA_TYPE_IMAGE},
+ {"pmd", "audio/pmd", COMPOSER_MEDIA_TYPE_IMAGE},
+/*video*/
+ {"3gp", "audio/3gpp", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"3gp", "video/3gpp", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"3gp", "video/3gp", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"3gp", "video/h263", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"3gp", "video/mp4v-es", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"asf", "audio/x-ms-asf", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"asf", "video/x-ms-asf", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"asx", "video/x-ms-asf", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"avi", "video/avi", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp2", "video/mpeg", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp4", "audio/mp4", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp4", "audio/MP4A-LATM", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp4", "audio/mpeg4", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp4", "video/mp4", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp4", "video/mpeg4", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp4", "video/x-mp4", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mp4", "video/x-pv-mp4", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mpg", "video/mpeg", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"mpeg", "video/mpeg", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"rm", "video/x-pn-multirate-realvideo", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"rm", "video/vnd.rn-realmedia", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"rm", "video/vnd.rn-realvideo", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"rv", "video/x-pn-realvideo", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"sdp", "application/sdp", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"sdp", "video/sdp", COMPOSER_MEDIA_TYPE_VIDEO},
+ {"wmv", "video/x-ms-wmv", COMPOSER_MEDIA_TYPE_VIDEO},
+/*text*/
+ {"txt", "text/plain", COMPOSER_MEDIA_TYPE_TEXT},
+ {"text", "text/plain", COMPOSER_MEDIA_TYPE_TEXT},
+ {"html", "text/html", COMPOSER_MEDIA_TYPE_TEXT},
+ {"htm", "text/html", COMPOSER_MEDIA_TYPE_TEXT},
+ {"wml", "text/vnd.wap.wml", COMPOSER_MEDIA_TYPE_TEXT},
+ {"xml", "text/xml", COMPOSER_MEDIA_TYPE_TEXT},
+/*vObject*/
+ {"vbm", "text/x-vbookmark", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"vcf", "text/x-vcard", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"vcs", "text/x-vCalendar", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"vnt", "text/x-vnote", COMPOSER_MEDIA_TYPE_UNKNOWN},
+/*drm*/
+ {"dcf", "application/vnd.oma.drm.content", COMPOSER_MEDIA_TYPE_DRM},
+ {"dm", "application/vnd.oma.drm.message", COMPOSER_MEDIA_TYPE_DRM},
+ {"odf", "application/vnd.oma.drm.dcf", COMPOSER_MEDIA_TYPE_DRM},
+ {"oro", "application/vnd.oma.drm.ro+xml", COMPOSER_MEDIA_TYPE_DRM},
+ {"ro", "application/vnd.oma.drm.rights+xml", COMPOSER_MEDIA_TYPE_DRM},
+ {"ro", "application/vnd.oma.drm.rights+wbxml", COMPOSER_MEDIA_TYPE_DRM},
+/*doc*/
+ {"doc", "application/msword", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"doc", "applcation/vnd.ms-word", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"xls", "application/vnd.ms-excel", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"xls", "application/x-msexcel", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"ppt", "application/vnd.ms-powerpoint", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"ppt", "application/x-mspowerpoint", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"pdf", "application/pdf", COMPOSER_MEDIA_TYPE_UNKNOWN},
+/*etc*/
+ {"rm ", "application/vnd.rn-realmedia", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"smi", "application/smil", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"smil", "application/smil", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"xml", "application/vnd.oma.drm.roap-pdu+xml", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"xml", "application/vnd.oma.drm.roap-trigger+xml", COMPOSER_MEDIA_TYPE_UNKNOWN},
+ {"xxx", "application/octet-stream", COMPOSER_MEDIA_TYPE_UNKNOWN},
+};
+
/* 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*/
+ return MSGC_UI_DEFAULT_EDJ;
}
Evas_Object *msg_ui_composer_load_edj(Evas_Object *parent, const char *edj_file, const char *group)
@@ -103,6 +243,18 @@ Evas_Object *msg_ui_composer_bg_create(Evas_Object *parent)
return bg;
}
+Evas_Object *msg_ui_composer_toolbar_create(Evas_Object *parent)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *toolbar = NULL;
+
+ toolbar = elm_toolbar_add(parent);
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+
+ return toolbar;
+}
+
int64 msg_composer_get_file_size(const char *path)
{
return ecore_file_size(path);
@@ -127,6 +279,123 @@ char *msg_common_get_file_ext(const char *a_pszfile_name)
return NULL;
}
+COMPOSER_MEDIA_TYPE_E msg_composer_get_media_type(const char *a_pszfile_path)
+{
+ char *pext = NULL;
+ unsigned int nmimeidx = 0;
+ unsigned int nmime_max = 0;
+
+ if (a_pszfile_path == NULL)
+ return COMPOSER_MEDIA_TYPE_UNKNOWN;
+
+ pext = msg_common_get_file_ext(a_pszfile_path);
+ nmime_max = (sizeof(composer_mime_table) / sizeof(composer_mime_type_t));
+
+ for (; nmimeidx < nmime_max; nmimeidx++) {
+ int nlen = strlen(composer_mime_table[nmimeidx].m_szextend);
+
+ if (strncasecmp(composer_mime_table[nmimeidx].m_szextend, pext, nlen) == 0) {
+ return composer_mime_table[nmimeidx].m_ncontent_type;
+ }
+ }
+
+ return COMPOSER_MEDIA_TYPE_UNKNOWN;
+}
+
+COMPOSER_RETURN_TYPE_E msg_composer_common_get_media_duration(const char *file_path, int *duration)
+{
+ MMHandleType content_attrs = 0;
+ int ret = 0;
+
+ if (!file_path || !duration) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] file_path or duration is not exist");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ ret = mm_file_create_content_attrs(&content_attrs, file_path);
+ if (ret == MM_ERROR_NONE) {
+ char *error = NULL;
+
+ ret = mm_file_get_attrs(content_attrs, &error, MM_FILE_CONTENT_DURATION, duration, NULL);
+
+ if (ret != MM_ERROR_NONE) {
+ if (error) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]fail to mm_file_get_attrs() - ret(%x), error(%s)", ret, error);
+ free(error);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]fail to mm_file_get_attrs() - ret(%x)", ret);
+ }
+
+ if (content_attrs)
+ mm_file_destroy_content_attrs(content_attrs);
+
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]file : %s, duration : %d", file_path, *duration);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]fail to mm_file_create_content_attrs() - ret(%x)", ret);
+
+ if (content_attrs)
+ mm_file_destroy_content_attrs(content_attrs);
+
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_composer_common_get_thumbnail(MSG_COMPOSER_VIEW_DATA_S *cd, const char *src_file_path, char *thumb_file_path, int size_thumb_file_path)
+{
+ D_ENTER;
+ COMPOSER_MEDIA_TYPE_E media_type;
+ int ret;
+ char temp_img_file[COMPOSER_FILEPATH_LEN_MAX] = {0,};
+ char *filename_without_ext = NULL;
+ const char *filename = NULL;
+
+ if (!src_file_path || !thumb_file_path) {
+ D_EMSG("file path or thumbnail path is NULL");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ if (!ecore_file_exists(src_file_path)) {
+ D_EMSG("file path is not exist");
+ return COMPOSER_RETURN_NULL_POINTER;
+ }
+
+ media_type = msg_composer_get_media_type(src_file_path);
+ if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) {
+
+ filename = ecore_file_file_get(src_file_path);
+ if (filename) {
+ filename_without_ext = ecore_file_strip_ext(filename);
+
+ if (filename_without_ext) {
+ snprintf(temp_img_file, sizeof(temp_img_file)-1, "%s/temp_image_%s.jpg", cd->working_path, filename_without_ext);
+ g_free(filename_without_ext);
+ } else {
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ } else {
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ /* get image of video*/
+ ret = msg_composer_common_get_image_in_video(src_file_path, temp_img_file);
+ if (ret == COMPOSER_RETURN_SUCCESS) {
+ strncpy(thumb_file_path, temp_img_file, size_thumb_file_path);
+ }
+ } else {
+ D_EMSG("media type is not video type media_type = %d !!", media_type);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
{
D_ENTER;
@@ -136,11 +405,145 @@ void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
if (cd->recipient)
msg_ui_composer_recipient_clear(cd->recipient);
+ /*Clear Body*/
+ if (cd->isSubject) {
+ msg_ui_composer_subject_clear(cd);
+ cd->isSubject = false;
+ }
+
+ if (cd->attach_data.attachment_Cnt > 0) {
+ msg_ui_composer_attachment_clear(cd);
+ }
+
msg_ui_composer_body_clear(cd);
D_LEAVE;
}
+static void __msg_ui_composer_change_to_sms(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+
+ /* reset region info */
+ body_data->region_order = COMPOSER_REGION_ORDER_UNDETERMINDED;
+
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(cd->body_data.page_list, 0);
+
+ char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry));
+ if (body_text) {
+ msg_ui_composer_body_info_area_update(cd);
+ free(body_text);
+ }
+
+ D_LEAVE;
+}
+
+static void __msg_ui_composer_change_to_mms(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+ return;
+ }
+
+ msg_ui_composer_body_info_area_update(cd);
+ D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_change_message_type(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_MSG_TYPE_E msg_type)
+{
+ D_ENTER;
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ if (cd->msg_type == msg_type) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] it doesn't need to change message type");
+ return COMPOSER_RETURN_SUCCESS;
+ }
+
+ switch (msg_type) {
+ case COMPOSER_MSG_TYPE_SMS:
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_CHANGED_SMS);
+
+ cd->msg_type = COMPOSER_MSG_TYPE_SMS;
+ __msg_ui_composer_change_to_sms(cd);
+ msg_ui_composer_toolbar_top_item_change(cd, true);
+ break;
+ case COMPOSER_MSG_TYPE_MMS:
+ if (cd->loading_draft == false)
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_CHANGED_MMS);
+ else
+ cd->loading_draft = false;
+
+ cd->msg_type = COMPOSER_MSG_TYPE_MMS;
+ __msg_ui_composer_change_to_mms(cd);
+ msg_ui_composer_toolbar_top_item_change(cd, false);
+ break;
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] invalid message type");
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_MSG_TYPE_E msg_ui_composer_check_message_type(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ if (!cd) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSSERT] composer data in NULL");
+ return COMPOSER_MSG_TYPE_INVALID;
+ }
+
+ if (cd->isSubject)
+ return COMPOSER_MSG_TYPE_MMS;
+
+ if (cd->attach_data.attachment_Cnt > 0)
+ return COMPOSER_MSG_TYPE_MMS;
+
+ if (msg_ui_composer_body_is_mms(cd) == EINA_TRUE)
+ return COMPOSER_MSG_TYPE_MMS;
+
+ if (msg_ui_composer_recipient_is_mms(cd) == EINA_TRUE)
+ return COMPOSER_MSG_TYPE_MMS;
+
+ return COMPOSER_MSG_TYPE_SMS;
+}
+
+void msg_ui_composer_message_type_check_and_change(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ COMPOSER_MSG_TYPE_E checked_type;
+
+ checked_type = msg_ui_composer_check_message_type(cd);
+
+ if (cd->msg_type == COMPOSER_MSG_TYPE_SMS && checked_type == COMPOSER_MSG_TYPE_MMS) {
+ D_MSG("### Message Type Change from [SMS] to [MMS] ###");
+ msg_ui_composer_change_message_type(cd, COMPOSER_MSG_TYPE_MMS);
+ } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS && checked_type == COMPOSER_MSG_TYPE_SMS) {
+ D_MSG("### Message Type Change from [MMS] to [SMS] ###");
+ msg_ui_composer_change_message_type(cd, COMPOSER_MSG_TYPE_SMS);
+ } else {
+ D_MSG("Now msg type is [%d] & checked msg type is [%d](0: INVAILD, 1: SMS, 2: MMS)", cd->msg_type, checked_type);
+ }
+
+ D_LEAVE;
+}
+
Eina_Bool msg_ui_composer_last_focus_load(void *data)
{
D_ENTER;
@@ -200,77 +603,15 @@ void bundle_send_to_result(void *data, char *key, char *val)
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;
- }
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, key, val);
+ ug_send_result(cd->ug, svc_handle);
+ service_destroy(svc_handle);
}
-
- msg_release_thread_view_list(&peerList);
- return ret_recipient;
+ D_LEAVE;
}
bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd)
@@ -285,7 +626,41 @@ bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd)
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) {
+ if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ if (cd->isSubject) {
+ char *subject = elm_entry_markup_to_utf8(elm_entry_entry_get(cd->sub_data.entry));
+ if (subject && strlen(subject) > 0) {
+ g_free(subject);
+ return true;
+ } else {
+ g_free(subject);
+ }
+ }
+
+ if (cd->attach_data.attachment_Cnt > 0) {
+ return true;
+ }
+
+ int i = 0;
+ for (i = 0; i < cd->body_data.page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, i);
+
+ if (page_data->is_image_item)
+ return true;
+
+ if (page_data->is_sound_item)
+ return true;
+
+ 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 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));
@@ -354,7 +729,297 @@ void msg_ui_composer_common_play_vibration()
D_LEAVE;
}
-void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, char **text)
+COMPOSER_RETURN_TYPE_E msg_composer_common_get_image_in_video(const char *video_file_path, char *image_file_path)
+{
+ COMPOSER_MEDIA_TYPE_E media_type;
+ MMHandleType content_attrs = 0;
+ int ret;
+ int video_track_num = 0;
+ int video_w = 0, video_h = 0, thumbsize = 0;
+ void *thumbnail = NULL;
+
+ media_type = msg_composer_get_media_type(video_file_path);
+ if (media_type != COMPOSER_MEDIA_TYPE_VIDEO) {
+ D_EMSG("It is not video file %s", video_file_path);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ ret = mm_file_create_content_attrs(&content_attrs, video_file_path);
+ if (ret != MM_ERROR_NONE){
+ D_EMSG("Fail to get content of %s", video_file_path);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+
+ mm_file_get_attrs(content_attrs, NULL, MM_FILE_CONTENT_VIDEO_TRACK_COUNT, &video_track_num, NULL);
+ if (video_track_num) {
+ mm_file_get_attrs(content_attrs, NULL, MM_FILE_CONTENT_VIDEO_WIDTH, &video_w,
+ MM_FILE_CONTENT_VIDEO_HEIGHT, &video_h,
+ MM_FILE_CONTENT_VIDEO_THUMBNAIL, &thumbnail, &thumbsize, NULL);
+
+ if (thumbnail) {
+ ret = mm_util_jpeg_encode_to_file(image_file_path, thumbnail, video_w, video_h, MM_UTIL_JPEG_FMT_RGB888, 100);
+ if (ret) {
+ D_EMSG("Fail of save image file %s", image_file_path);
+ mm_file_destroy_content_attrs(content_attrs);
+ return COMPOSER_RETURN_FAIL;
+ }
+ }
+ }
+
+ mm_file_destroy_content_attrs(content_attrs);
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_common_get_file(MSG_COMPOSER_VIEW_DATA_S *cd, const char * src_file_path, char *dst_file_path, int size_dst_file_path)
+{
+ D_ENTER;
+ const char *filename = NULL;
+ int i = 0;
+ char temp_file_path[COMPOSER_FILEPATH_LEN_MAX] = {0,};
+
+ if (ecore_file_exists(src_file_path) == EINA_FALSE) {
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ filename = ecore_file_file_get(src_file_path);
+ if (filename) {
+ snprintf(temp_file_path, sizeof(temp_file_path)-1, "%s%s", cd->working_path, filename);
+
+ while(ecore_file_exists(temp_file_path)){
+ bzero(temp_file_path, sizeof(temp_file_path));
+ snprintf(temp_file_path, sizeof(temp_file_path)-1, "%s%d_%s", cd->working_path, i, filename);
+ i++;
+
+ if (i < 0) return COMPOSER_RETURN_FAIL;
+ }
+
+
+ if (ecore_file_cp(src_file_path, temp_file_path) == EINA_FALSE) {
+ D_MSG("temp_file_path = %s", temp_file_path);
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ strncpy(dst_file_path, temp_file_path, size_dst_file_path);
+ D_MSG("copy file from %s to %s", src_file_path, dst_file_path);
+
+ } else {
+ return COMPOSER_RETURN_FAIL;
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+static char *__get_item_tag(char *text)
+{
+ char *fulltext;
+ char *tagStart;
+ char *tagEnd;
+ int tagStrLength = 0;
+
+ if (text == NULL)
+ return NULL;
+
+ fulltext = text;
+ D_MSG("text(%p)[%d] = %s", text, strlen(text),text);
+
+ tagStart = strstr(fulltext, "<item");
+ if (tagStart) {
+ tagEnd = strchr(tagStart, '>');
+ if (tagEnd) {
+ tagStrLength = tagEnd - tagStart + 1;
+ return strndup(tagStart, tagStrLength);
+ }
+ }
+
+ return NULL;
+}
+
+static char *__remove_item_tag(char *text)
+{
+ char *fulltext = NULL;
+ char *tagStart = NULL;
+ char *tagEnd = NULL;
+ char *braceStart = NULL;
+ char *braceEnd = NULL;
+ char *postStr = NULL;
+
+ int strLength = 0;
+ int postStrLength = 0;
+ bool isitemTag = false;
+
+ if (text == NULL)
+ return NULL;
+
+ char *textBuf = strdup(text);
+
+ if (!textBuf) {
+ D_EMSG("strdup is failed");
+ return NULL;
+ }
+
+ fulltext = textBuf;
+ strLength = strlen(textBuf);
+ D_MSG("text length = %d, text = [%s]", strLength, textBuf);
+
+ while ((tagStart = strstr(fulltext, "<item"))) {
+ braceEnd = strchr(tagStart, '>');
+ if (braceEnd) {
+ braceStart = strstr(braceEnd, "</item>");
+ if (braceStart) {
+ tagEnd = (braceStart + strlen("</item>") - 1);
+ } else {
+ D_EMSG("There is no close item tag");
+ tagEnd = braceEnd;
+ }
+ } else {
+ D_EMSG("There is no close tag");
+ g_free(textBuf);
+ return NULL;
+ }
+
+ postStrLength = strLength - (tagEnd - fulltext + 1);
+ postStr = strndup(tagEnd + 1, postStrLength);
+ if (!postStr) {
+ D_EMSG("strndup is failed");
+ g_free(textBuf);
+ return NULL;
+ }
+
+ strncpy(tagStart, postStr, postStrLength);
+ *(tagStart + postStrLength) = '\0';
+ D_MSG("after textBuf = [%s]", textBuf);
+
+ g_free(postStr);
+ postStr = NULL;
+
+ isitemTag = true;
+ }
+
+ if (isitemTag)
+ return textBuf;
+
+ g_free(textBuf);
+
+ return NULL;
+}
+
+static char *__get_tag_value(const char *tag_str, const char *tag_name)
+{
+ char *tag;
+
+ if (!tag_name || !tag_str)
+ return NULL;
+
+ if ((tag = strstr(tag_str, tag_name))) {
+ if (tag[strlen(tag_name)] == '_')
+ return NULL;
+ char *value = strchr(tag, '=');
+ if (value) {
+
+ do {
+ value++;
+ } while (!isalnum(*value) && *value != '#');
+
+ int spCnt = 5;
+ char *spArray[spCnt];
+ spArray[0] = strchr(value, '>');
+ spArray[1] = strchr(value, '\"');
+ spArray[2] = strchr(value, '\'');
+ spArray[3] = strchr(value, '\t');
+ spArray[4] = strchr(value, '\n');
+ char *valueEnd = strchr(value, '\0');
+
+ int i;
+ int start = 0;
+ if (!strcmp(tag_str, "item") && !strcmp(tag_name, "href"))
+ start = 1;
+
+ for (i = start; i < spCnt; i++) {
+ if (spArray[i] && spArray[i] < valueEnd) {
+ valueEnd = spArray[i];
+ }
+ }
+
+ int valueLength = valueEnd - value;
+ return strndup(value, valueLength);
+ }
+ }
+
+ return NULL;
+}
+
+void msg_composer_entry_filter_addimage(void *data, Evas_Object *entry, char **text)
+{
+ D_ENTER;
+
+ char *item_val = NULL;
+ char *item_tag = NULL;
+ char *filepath = NULL;
+ char *realpath = NULL;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = data;
+
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+ D_MSG_RETM_IF(entry == NULL,"Parameter Entry is Invalid");
+ D_MSG_RETM_IF((!text || !(*text)),"Parameter Text is Invalid");
+
+ /*get <item xxx> tag at insert text*/
+ item_tag = __get_item_tag(*text);
+
+ if (item_tag) {
+
+ D_MSG("item_tag = %s", item_tag);
+
+ /*get value of href in the item tag*/
+ item_val = __get_tag_value(item_tag, "href");
+ if (item_val) {
+ D_MSG("item_href_val = %s", item_val);
+ filepath = strstr(item_val, "file:");
+ if (filepath) {
+ realpath = filepath + 5;
+ } else {
+ realpath = filepath;
+ }
+
+ if (realpath) {
+ if (ecore_file_exists(realpath) == EINA_TRUE) {
+ char * list_item_data = g_strdup(realpath);
+ if (list_item_data) {
+ cd->attachlist= eina_list_append(cd->attachlist, list_item_data);
+ msg_ui_composer_body_items_add(data);
+ } else {
+ D_EMSG("Fail to g_strdup");
+ }
+ } else {
+ D_EMSG("File is NOT exist %s", realpath);
+ }
+ } else {
+ D_EMSG("File Path is NULL");
+ }
+
+ g_free(item_val);
+ }
+
+ g_free(item_tag);
+
+ /* remove item tag */
+ char *removed_text = __remove_item_tag(*text);
+ g_free(*text);
+
+ if (removed_text)
+ *text = removed_text;
+ else
+ *text = NULL;
+
+ }
+ 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");
@@ -362,7 +1027,7 @@ void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, cha
char *preedit_str = NULL;
char *utf8_text = NULL;
char *convert_text = NULL;
- D_MSG("text %s", *text);
+ D_MSG("text [%s]", *text);
/* Check preeditting text and return if it exist*/
preedit_str = strstr(*text, "<preedit_sel>");
if (preedit_str) return;
@@ -370,7 +1035,6 @@ void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, cha
/* 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) {
@@ -428,70 +1092,237 @@ int msg_ui_composer_convert_UTF8ToUCS2(unsigned char *pDestText, int maxLength,
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 if (tickertype == COMPOSER_TICKERNOTI_CHANGED_MMS) {
+ snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_CHANGE_MMS);
+ } else if (tickertype == COMPOSER_TICKERNOTI_AUTO_SAVED) {
+ snprintf(popup_msg, sizeof(popup_msg)-1, _MSGSTR("IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"));
+ } else if (tickertype == COMPOSER_TICKERNOTI_NO_RECIPIENT) {
+ snprintf(popup_msg, sizeof(popup_msg)-1, _MSGSTR("IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"));
+ } else if (tickertype == COMPOSER_TICKERNOTI_MAXLENGHT_CHAR) {
+ snprintf(popup_msg, sizeof(popup_msg)-1, _MSGSTR("Maximum number of characters reached"));
} else {
return;
}
- if (cd->noti) {
- evas_object_del(cd->noti);
+ msg_ui_composer_status_noti_show(popup_msg);
+}
+
+int msg_ui_composer_get_keypad_height(Evas_Object *entry)
+{
+ D_MSG_RETVM_IF(entry == NULL, 0, "param is NULL");
+ int keypad_x = 0;
+ int keypad_y = 0;
+ int keypad_w = 0;
+ int keypad_h = 0;
+
+ Ecore_IMF_Context *entry_ctx = elm_entry_imf_context_get(entry);
+ ecore_imf_context_input_panel_geometry_get(entry_ctx, &keypad_x, &keypad_y, &keypad_w, &keypad_h);
+
+ return keypad_h;
+}
+
+void msg_ui_composer_change_body_scroll_size(MSG_COMPOSER_VIEW_DATA_S *cd, int keypad_height)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+
+ int total_height = 0;
+ int scroll_height = 0;
+ int scroll_x = 0;
+ int scroll_y = 0;
+ int scroll_w = 0;
+ int scroll_h = 0;
+
+ elm_scroller_region_get(cd->body_scroll, &scroll_x, &scroll_y, &scroll_w, &scroll_h);
+ D_MSG("scroll region x=%d, y=%d, w=%d, h=%d", scroll_x, scroll_y, scroll_w, scroll_h);
+
+ if (cd->rotate == COMPOSER_ROTATE_PORTRAIT || cd->rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN)
+ total_height = (cd->window_h > cd->window_w) ? cd->window_h : cd->window_w;
+ else
+ total_height = (cd->window_h > cd->window_w) ? cd->window_w : cd->window_h;
+
+ if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+ RECIPIENT_S *rd = cd->recipient;
+ int recipient_h = rd->recipient_h;
+
+ D_MSG("recipient_h = %d", recipient_h);
+ if (cd->rotate == COMPOSER_ROTATE_PORTRAIT || cd->rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN)
+ scroll_height = (total_height - keypad_height - recipient_h - MSGC_NAVIBAR_TITLE_H - MSGC_BODY_PADDING - MSGC_INDICATOR_H);
+ else
+ scroll_height = (total_height - keypad_height - recipient_h - MSGC_NAVIBAR_TITLE_H - MSGC_BODY_PADDING);
+
+ D_MSG("scroll_height = %d", scroll_height);
+
+ if (scroll_height <= COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN)
+ scroll_height = COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN;
+
+ if (scroll_h != scroll_height) {
+ evas_object_size_hint_max_set(cd->body_scroll, 9999, scroll_height);
+ elm_scroller_content_min_limit(cd->body_scroll, EINA_FALSE, EINA_TRUE);
+ D_MSG("scroll size updated w = %d, h = %d", scroll_w, scroll_height);
+ }
+ } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ scroll_height = (total_height - keypad_height - MSGC_NAVIBAR_TITLE_H - MSGC_INDICATOR_H - MSGC_BODY_PADDING);
+ D_MSG("scroll_height = %d", scroll_height);
+
+ if (scroll_height <= COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN)
+ scroll_height = COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN;
+
+ if (scroll_h != scroll_height) {
+ evas_object_size_hint_max_set(cd->body_scroll, 9999, scroll_height);
+ elm_scroller_content_min_limit(cd->body_scroll, EINA_FALSE, EINA_TRUE);
+ D_MSG("scroll size updated w = %d, h = %d", scroll_w, scroll_height);
+ }
+ } else {
+ D_EMSG("Unknown Composer Mode");
}
- cd->noti = msg_ui_composer_notify_show(parent_notify, popup_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME, orient, false);
+ D_LEAVE;
}
-void msg_ui_composer_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value)
+void msg_ui_composer_entry_imf_resize_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");
+ int keypad_x = 0;
+ int keypad_y = 0;
+ int keypad_w = 0;
+ int keypad_h = 0;
+ ecore_imf_context_input_panel_geometry_get(ctx, &keypad_x, &keypad_y, &keypad_w, &keypad_h);
+ D_MSG("keypad x = %d, y = %d, w = %d, h = %d", keypad_x, keypad_y, keypad_w, keypad_h);
+ if (keypad_w != 0 && keypad_h != 0)
+ msg_ui_composer_change_body_scroll_size(cd, keypad_h);
+
+ D_LEAVE;
+}
+
+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","*");
+ int keypad_x = 0;
+ int keypad_y = 0;
+ int keypad_w = 0;
+ int keypad_h = 0;
+
+ ecore_imf_context_input_panel_geometry_get(ctx, &keypad_x, &keypad_y, &keypad_w, &keypad_h);
+ D_MSG("keypad x = %d, y = %d, w = %d, h = %d", keypad_x, keypad_y, keypad_w, keypad_h);
+ msg_ui_composer_change_body_scroll_size(cd, keypad_h);
} else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
D_MSG("Imf status HIDE");
+ msg_ui_composer_change_body_scroll_size(cd, 0);
+ } else {
+ D_EMSG("imf status INVALID");
+ }
+
+ D_LEAVE;
+}
+
+int msg_ui_composer_get_font_size(int index, int type)
+{
+ D_ENTER;
+ D_MSG("index = %d, type = %d", index, type);
+
+ int font_size = MSG_APP_FONT_SIZE_NORMAL;
- 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","*");
+ if (type == COMPOSER_MSG_FONT_SIZE) {
+ switch (index) {
+ case MSG_APP_FONT_SIZE_INDEX_HUGE:
+ font_size = MSG_APP_FONT_SIZE_HUGE;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_LARGE:
+ font_size = MSG_APP_FONT_SIZE_LARGE;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_NORMAL:
+ font_size = MSG_APP_FONT_SIZE_NORMAL;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_SMALL:
+ font_size = MSG_APP_FONT_SIZE_SMALL;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_TINY:
+ font_size = MSG_APP_FONT_SIZE_TINY;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT:
+ default:
+ D_MSG("get defulat size index = %d", index);
+ font_size = MSG_APP_FONT_SIZE_NORMAL;
+ break;
+ }
+ } else if (type == COMPOSER_SYSTEM_FONT_SIZE) {
+ switch (index) {
+ case MSG_SYS_FONT_SIZE_INDEX_GIANT:
+ font_size = MSG_APP_FONT_SIZE_HUGE + 4;
+ break;
+ case MSG_SYS_FONT_SIZE_INDEX_HUGE:
+ font_size = MSG_APP_FONT_SIZE_HUGE;
+ break;
+ case MSG_SYS_FONT_SIZE_INDEX_LARGE:
+ font_size = MSG_APP_FONT_SIZE_LARGE;
+ break;
+ case MSG_SYS_FONT_SIZE_INDEX_NORMAL:
+ font_size = MSG_APP_FONT_SIZE_NORMAL;
+ break;
+ case MSG_SYS_FONT_SIZE_INDEX_SMALL:
+ font_size = MSG_APP_FONT_SIZE_SMALL;
+ break;
+ default:
+ D_MSG("get defulat size index = %d", index);
+ font_size = MSG_APP_FONT_SIZE_NORMAL;
+ break;
}
} else {
- D_EMSG("imf status INVALID");
+ D_EMSG("Invalid font type");
}
D_LEAVE;
+
+ return font_size;
}
-void msg_ui_composer_evas_object_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+void msg_ui_composer_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd)
{
D_ENTER;
- if (!data || !obj)
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+
+ int converted_size = 0;
+
+ if (cd->font_size.last_updated_setting == COMPOSER_SYSTEM_FONT_SIZE) {
+ converted_size = cd->font_size.sys_font_size;
+ } else if (cd->font_size.last_updated_setting == COMPOSER_MSG_FONT_SIZE) {
+ converted_size = cd->font_size.msg_font_size;
+ } else {
+ D_EMSG("Invalid type");
return;
+ }
+
+ /* apply font size */
+ char font_style_str[DEF_BUF_LEN_S + 1] = {0,};
+ snprintf(font_style_str, sizeof(font_style_str), "DEFAULT='font_size=%d'", converted_size);
+ D_MSG("font_style_str = (%s)", font_style_str);
+
+ msg_ui_composer_body_apply_font_size(cd, font_style_str);
- 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
index 30ee459..ce535d7 100755
--- a/composer/src/ui-composer/msg-ui-composer-main.c
+++ b/composer/src/ui-composer/msg-ui-composer-main.c
@@ -16,187 +16,502 @@
/* 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-subject.h"
#include "msg-ui-composer-body.h"
-
+#include "msg-ui-composer-pageduration.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"
+#include "msg-ui-common-utility.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)
+static COMPOSER_EDIT_STATE_E __msg_ui_composer_edit_check(MSG_COMPOSER_VIEW_DATA_S *cd)
{
D_ENTER;
- D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "Composer Data == NULL");
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_EDIT_NONE, "Composer Data == NULL");
+
+ bool isvalid_address = false;
+ bool iscontent_edited = false;
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;
+ isvalid_address = 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_recipient_vaild_check(entry_str) == EINA_TRUE)
+ isvalid_address = true;
}
+ } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ isvalid_address = true;
}
- if (msg_ui_composer_common_is_send_possible(cd) == true) {
- return EINA_TRUE;
+ /* valid address & there is body content */
+ if (msg_ui_composer_common_is_send_possible(cd) == true)
+ iscontent_edited = true;
+
+ if (isvalid_address && iscontent_edited)
+ return COMPOSER_EDIT_RECIPIENT_AND_BODY;
+ else if (isvalid_address)
+ return COMPOSER_EDIT_RECIPIENT;
+ else if (iscontent_edited)
+ return COMPOSER_EDIT_BODY;
+ else
+ return COMPOSER_EDIT_NONE;
+}
+
+static void __msgc_vconf_changed_cb(keynode_t *key, void *data)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ D_MSG_RETM_IF(key == NULL, "key is NULL");
+
+ int index = 0;
+ int font_size = 0;
+ int converted_size = 0;
+ char *key_name = NULL;
+
+ key_name = vconf_keynode_get_name(key);
+
+ if (!key_name) {
+ D_EMSG("key_name is NULL");
+ return;
}
- return EINA_FALSE;
+ if (!strcmp(key_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
+/*
+ * 0 : giant : 106
+ * 1 : huge : 81
+ * 2 : large : 64
+ * 3 : normal (default) : 44
+ * 4 : small : 36
+*/
+ index = vconf_keynode_get_int(key);
+ font_size = msg_ui_composer_get_font_size(index, (int)COMPOSER_SYSTEM_FONT_SIZE);
+ converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL;
+
+ cd->font_size.last_updated_setting = COMPOSER_SYSTEM_FONT_SIZE;
+ cd->font_size.sys_font_size = converted_size;
+ } else if (!strcmp(key_name, VCONFKEY_MSG_APP_FONT_SIZE)) {
+ index = vconf_keynode_get_int(key);
+ font_size = msg_ui_composer_get_font_size(index, (int)COMPOSER_MSG_FONT_SIZE);
+ converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL;
+
+ cd->font_size.last_updated_setting = COMPOSER_MSG_FONT_SIZE;
+ cd->font_size.msg_font_size = converted_size;
+ } else {
+ D_EMSG("key did not match.");
+ }
+
+ D_MSG("font size = %d", font_size);
+ D_MSG("converted font size = %d", converted_size);
+
+ D_LEAVE;
}
-/* function definitions*/
-static void __msg_ui_composer_bundle_data_process(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b_data)
+static void __msgc_init_font_size(MSG_COMPOSER_VIEW_DATA_S *cd)
{
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;
+ int index = 0;
+ int font_size = 0;
+ int converted_size = 0;
- 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();
+ if (msg_common_get_font_size(&index, &font_size) != TRUE) {
+ D_EMSG("msg_common_get_font_size() is failed !!");
} 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;
- }
+ D_MSG("selected index = %d", index);
+ }
- if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
- bDup = true;
- g_free(recipient);
- continue;
- }
+ if (index == MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT) {
+ if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &index) < 0) {
+ D_EMSG("vconf_get_int(system font_size) is failed !!");
+ index = MSG_SYS_FONT_SIZE_INDEX_NORMAL;
+ }
- if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) {
- bInvalidNum = true;
- }
+ font_size = msg_ui_composer_get_font_size(index, (int)COMPOSER_SYSTEM_FONT_SIZE);
+ converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL;
- msg_ui_composer_recipient_append(cd->recipient, recipient, 0);
- g_free(recipient);
- }
+ cd->font_size.last_updated_setting = COMPOSER_SYSTEM_FONT_SIZE;
+ cd->font_size.sys_font_size = converted_size;
+
+ } else {
+ converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL;
+
+ cd->font_size.last_updated_setting = COMPOSER_MSG_FONT_SIZE;
+ cd->font_size.msg_font_size = converted_size;
+ }
+ D_MSG("font size = %d", converted_size);
+
+ D_LEAVE;
+}
+
+static void __msgc_parse_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, const char *address)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ D_MSG_RETM_IF(address == NULL, "address is NULL");
+
+ bool bMaxCount = false;
+ bool bInvalidNum = false;
+ bool bDup = false;
+
+ Eina_List *recipient_list = make_tokenize_list(address, ",");
+
+ 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;
}
- 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);
+ if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) {
+ bDup = true;
+ g_free(recipient);
+ continue;
}
- }
- } else if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_NUMBER_INDEX))) {
- char *recipient, *index;
- char *save_p;
- int idx;
+ if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) {
+ bInvalidNum = true;
+ } else {
+ msg_ui_composer_recipient_append(cd->recipient, recipient, 0);
+ }
- char *copy_string = MSG_STRDUP(bundle_txt);
- if (copy_string) {
+ g_free(recipient);
+ }
+ }
- 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;
- }
+ 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_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ } else if (bDup) {
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+ }
+ }
- 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);
- }
- }
- }
+ D_LEAVE;
+}
- g_free(copy_string);
+static void __msgc_ui_parse_mmsto_uri(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, const char *uri)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ D_MSG_RETM_IF(svc_handle == NULL, "svc_handle is NULL");
+
+ char *content = NULL;
+ char *recipient = NULL;
+ char *body_text = NULL;
+ char *subject = NULL;
+ char *attachment = NULL;
+ char *cc = 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);
+ cc = strtok_r(NULL, "&", &content);
+ if (cc)
+ strtok_r(NULL, "=", &cc);
+
+ D_MSG("RECIPIENT = [%s]", recipient);
+ if (recipient)
+ __msgc_parse_recipient_list(cd, (const char *)recipient);
}
}
+ g_free(scheme);
+ } else {
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) {
+ __msgc_parse_recipient_list(cd, (const char *)recipient);
+ }
+ }
- if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_BODY))) {
- msg_ui_composer_body_set_loaded_text(cd, bundle_txt, 0);
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) {
+ msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0);
+ }
+
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_SUBJECT, &subject) == SERVICE_ERROR_NONE) && subject) {
+ msg_ui_composer_subject_set_loaded_data(cd, (const char *)subject);
+ }
+
+ if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, &attachment) == SERVICE_ERROR_NONE) && attachment) {
+ cd->attachlist = make_tokenize_list((const char *)attachment, COMPOSER_BUNDLE_ATTACH_TOKEN);
+ if (cd->attachlist)
+ msg_ui_composer_body_items_add(cd);
+ }
+
+ D_LEAVE;
+}
+
+static void __msgc_ui_parse_file_uri(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, const char *uri)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ char *content = NULL;
+ char attachment[DEF_IMG_PATH_LEN + 1] = {0, };
+ int i = 0;
+ int len = 0;
+ char *scheme = g_strdup(uri);
+
+ if (scheme) {
+ strtok_r(scheme, ":", &content);
+ D_MSG("content = [%s]", content);
+
+ if (content) {
+ len = strlen(content) - 2;
+ if (len <= 0) {
+ D_EMSG("len is less than 0 !!");
+ g_free(scheme);
+ return;
+ }
+
+ /* Remove '//' from content string */
+ for (i = 0; i < len; i++) {
+ attachment[i] = content[i+2];
+ }
+
+ if (attachment[0] != '\0') {
+ D_MSG("APPSVC ATTACHMENT = [%s]", attachment);
+ cd->attachlist = make_tokenize_list((const char *)attachment, COMPOSER_BUNDLE_ATTACH_TOKEN);
+ if (cd->attachlist)
+ msg_ui_composer_body_items_add(cd);
+ }
}
+ g_free(scheme);
+ } else {
+ D_EMSG("scheme is NULL!!");
}
D_LEAVE;
}
-static void __msg_ui_composer_sent_status_cb(MSG_HANDLE_T Handle, MSG_SENT_STATUS_S *pStatus, void *pUserParam)
+static void __msg_ui_parse_sms_uri(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, const char *uri)
{
D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
- return;
+ char *content = NULL;
+ char *recipient = NULL;
+ char *body_text = 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("RECIPIENT = [%s]", recipient);
+
+ if (recipient)
+ __msgc_parse_recipient_list(cd, (const char *)recipient);
+ }
+ }
+ g_free(scheme);
+ } else {
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) {
+ __msgc_parse_recipient_list(cd, (const char *)recipient);
+ }
+ }
+
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) {
+ msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0);
+ }
+
+ D_LEAVE;
}
-static void __reset_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+static void __msgc_get_service_app_svc_op(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, char *operation)
{
D_ENTER;
- MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
- D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ D_MSG_RETM_IF(svc_handle == NULL, "svc_handle is NULL");
+ D_MSG_RETM_IF(operation == NULL, "operation is NULL");
+
+ char *uri = NULL;
+ char *recipient = NULL;
+ char *body_text = NULL;
+ char *attachment = NULL;
+ char *subject = NULL;
+
+ if (g_strcmp0(operation, SERVICE_OPERATION_SEND) == 0) {
+ if (service_get_uri(svc_handle, &uri) == SERVICE_ERROR_NONE)
+ D_MSG("URI = [%s]", uri);
+
+ if (uri) {
+ if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_MMSTO_URI)) { /* MMS URI : mmsto */
+ __msgc_ui_parse_mmsto_uri(cd, svc_handle, (const char *)uri);
+ } else if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_FILE_URI)) { /* URI : file */
+ __msgc_ui_parse_file_uri(cd, svc_handle, (const char *)uri);
+ } else {
+ D_MSG("Not supported mime type");
+ return;
+ }
+ } else {
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) {
+ __msgc_parse_recipient_list(cd, (const char *)recipient);
+ }
- MSGC_EVAS_OBJECT_DEL(cd->popup_end);
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) {
+ msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0);
+ }
- msg_ui_composer_reset(cd, cd->msg_bundle);
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_SUBJECT, &subject) == SERVICE_ERROR_NONE) && subject) {
+ msg_ui_composer_subject_set_loaded_data(cd, (const char *)subject);
+ }
- if (cd->msg_bundle) {
- bundle_free(cd->msg_bundle);
- cd->msg_bundle = NULL;
+ if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, &attachment) == SERVICE_ERROR_NONE) && attachment) {
+ cd->attachlist = make_tokenize_list((const char *)attachment, COMPOSER_BUNDLE_ATTACH_TOKEN);
+ if (cd->attachlist)
+ msg_ui_composer_body_items_add(cd);
+ }
+ }
+ } else if (g_strcmp0(operation, SERVICE_OPERATION_SEND_TEXT) == 0) {
+ if (service_get_uri(svc_handle, &uri) == SERVICE_ERROR_NONE)
+ D_MSG("URI = [%s]", uri);
+
+ if (uri) {
+ if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_SMS_URI)) { /* SMS URI : sms */
+ __msg_ui_parse_sms_uri(cd, svc_handle, (const char *)uri);
+ } else {
+ D_MSG("Not supported mime type");
+ return;
+ }
+ } else {
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) {
+ __msgc_parse_recipient_list(cd, (const char *)recipient);
+ }
+
+ if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) {
+ msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0);
+ }
+ }
+ } else {
+ D_EMSG("Invalid operation type !!");
}
+
+ D_LEAVE;
}
-static void __reset_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+/* function definitions*/
+static void __msg_ui_composer_bundle_data_process(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle)
{
D_ENTER;
- MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
- D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ D_MSG_RETM_IF(svc_handle == NULL, "Bundle Data is NULL");
- MSGC_EVAS_OBJECT_DEL(cd->popup_end);
+ char *bundle_txt = NULL;
+
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_FORWARD, &bundle_txt);
+
+ if (bundle_txt) {
+ 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 {
+ char *operation = NULL;
+ if (service_get_operation(svc_handle, &operation) == SERVICE_ERROR_NONE && operation) { /* composer launching via service */
+ cd->isAppControl = true;
+
+ __msgc_get_service_app_svc_op(cd, svc_handle, operation);
+
+ } else { /* internal ug mode */
+ cd->isAppControl = false;
+
+ if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, &bundle_txt) == SERVICE_ERROR_NONE) && bundle_txt) {
+ __msgc_parse_recipient_list(cd, bundle_txt);
+ } else {
+ if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_NUMBER_INDEX, &bundle_txt)== SERVICE_ERROR_NONE) && bundle_txt) {
+ char *recipient;
+ char *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_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ } else {
+ msg_ui_composer_recipient_append(cd->recipient, recipient, idx);
+ }
+ }
+ }
+ }
- if (cd->msg_bundle) {
- bundle_free(cd->msg_bundle);
- cd->msg_bundle = NULL;
+ g_free(copy_string);
+ }
+ }
+ }
+
+ if (SERVICE_ERROR_NONE == service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_SUBJECT, &bundle_txt))
+ msg_ui_composer_subject_set_loaded_data(cd, bundle_txt);
+
+ if (SERVICE_ERROR_NONE == service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, &bundle_txt))
+ msg_ui_composer_body_set_loaded_text(cd, bundle_txt, 0);
+
+ if (SERVICE_ERROR_NONE == service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, &bundle_txt)) {
+ cd->attachlist = make_tokenize_list(bundle_txt, COMPOSER_BUNDLE_ATTACH_TOKEN);
+ if (cd->attachlist)
+ msg_ui_composer_body_items_add(cd);
+ }
+ }
}
+
+ D_LEAVE;
+}
+
+static void __msg_ui_composer_sent_status_cb(msg_handle_t Handle, msg_struct_t pStatus, void *pUserParam)
+{
+ D_ENTER;
+ D_LEAVE;
+
+ return;
}
static void __end_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
@@ -207,11 +522,6 @@ static void __end_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *ev
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);
}
@@ -223,10 +533,7 @@ static void __end_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void
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;
- }
+ cd->isclosed = false;
msg_ui_composer_last_focus_load(cd);
D_LEAVE;
@@ -236,15 +543,21 @@ static void __msg_ui_composer_end_popup(MSG_COMPOSER_VIEW_DATA_S *cd)
{
D_ENTER;
+ MSGC_EVAS_OBJECT_DEL(cd->popup_end);
+
Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_DISCARD_Q, 0);
- Evas_Object * btn1 = elm_button_add(popup);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
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);
+ Evas_Object *btn2 = elm_button_add(popup);
+ elm_object_style_set(btn2, "popup_button/default");
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);
+ elm_object_focus_set(popup, EINA_TRUE);
+ evas_object_show(popup);
cd->popup_end = popup;
@@ -258,11 +571,94 @@ static void __naviframe_back_btn_clicked_cb(void *data, Evas_Object *obj, void *
D_MSG_RETM_IF(data == NULL, "Data == NULL");
MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ COMPOSER_EDIT_STATE_E edit_state = __msg_ui_composer_edit_check(cd);
+ D_MSG("edit_state = %d", edit_state);
+
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) {
+ if (cd->isclosed) {
+ D_EMSG("back btn is already called");
+ return;
+ }
+
+ /* isclosed is set to prevent showing invalid popup*/
+ cd->isclosed = true;
+
+ if (edit_state == COMPOSER_EDIT_RECIPIENT || edit_state == COMPOSER_EDIT_BODY) {
__msg_ui_composer_end_popup(cd);
return;
+ } else if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) {
+ /* auto saving */
+ msg_ui_composer_message_init();
+
+ if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) {
+ msg_ui_composer_save_message(cd->msg_handle);
+
+ /* show saved ticker popup */
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_AUTO_SAVED);
+ }
+
+ msg_ui_composer_message_destroy();
}
+ } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ if (edit_state == COMPOSER_EDIT_RECIPIENT) {
+
+ PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+
+ if (bubble_data->bubble_count == 0) {
+ int err = MSG_SUCCESS;
+
+ if (bubble_data->isDraft == true)
+ err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId);
+
+ if (err == MSG_SUCCESS) {
+ service_h svc_handle;
+ char buf[DEF_BUF_LEN_S] = {0,};
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL);
+ snprintf(buf, sizeof(buf), "%d", bubble_data->threadId);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf);
+ ug_send_result(cd->ug, svc_handle);
+
+ service_destroy(svc_handle);
+ }
+ } else {
+ D_MSG("msg_delete_thread_message_list failed");
+ }
+ } else {
+ /* delete draft message */
+ msg_struct_list_s msg_list;
+
+ if (msg_get_message_list(cd->msg_handle, MSG_DRAFT_ID, bubble_data->threadId, 0, 0, &msg_list) == MSG_SUCCESS) {
+ int i = 0;
+ int msgid = 0;
+
+ for (i= 0; i < msg_list.nCount; i++) {
+ msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msgid);
+ D_MSG("draft msg_id is %d", msgid);
+ if (msg_delete_message(cd->msg_handle, msgid) != COMPOSER_RETURN_SUCCESS)
+ D_EMSG("msg_ui_comp_core_delete_message is failed = %d", msgid);
+ }
+ }
+ msg_release_list_struct(&msg_list);
+ }
+ } else if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) {
+ /* auto saving */
+ msg_ui_composer_message_init();
+
+ if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) {
+ msg_ui_composer_save_message(cd->msg_handle);
+ /* show saved ticker popup */
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_AUTO_SAVED);
+ }
+
+ msg_ui_composer_message_destroy();
+ }
+ /* clear recipient_list of bubble composer */
+ msg_ui_composer_recipient_clear_recipient_list(cd);
+
}
ug_destroy_me(cd->ug);
@@ -270,6 +666,211 @@ static void __naviframe_back_btn_clicked_cb(void *data, Evas_Object *obj, void *
D_LEAVE;
}
+static void __preview_btn_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");
+ D_MSG_RETM_IF(cd->navi_it == NULL, "Naviitem is NULL");
+
+ msg_struct_t msgInfo = NULL;
+ msg_ui_composer_message_init();
+ msg_ui_composer_read_preview_message(cd);
+
+ /* make preview message data */
+ msgInfo = msg_ui_composer_message_make_preview(cd->msg_handle);
+
+ if (msgInfo)
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_MSGVIEWER, msgInfo);
+
+ msg_release_struct(&msgInfo);
+ msg_ui_composer_message_destroy();
+
+ elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", "");
+ cd->navi_optionheader_opened = EINA_FALSE;
+ D_LEAVE;
+}
+
+static void __pageduration_btn_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");
+ D_MSG_RETM_IF(cd->navi_it == NULL, "Naviitem is NULL");
+
+ msg_ui_composer_pageduration_popup_create(cd);
+
+ D_LEAVE;
+}
+
+static Evas_Object *__toolbar_btn_create(Evas_Object *parent, char *text, char *style)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL");
+
+ Evas_Object *button = elm_button_add(parent);
+
+ if (style)
+ elm_object_style_set(button, style);
+ else
+ elm_object_style_set(button, "naviframe_control/default");
+
+ evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ if (text) {
+ char *popup_msg = elm_entry_utf8_to_markup(text);
+ if (popup_msg) {
+ elm_object_text_set(button, popup_msg);
+ g_free(popup_msg);
+ } else {
+ elm_object_text_set(button, text);
+ }
+ }
+
+ evas_object_show(button);
+
+ D_LEAVE;
+ return button;
+}
+
+static Evas_Object *__toolbar_top_create(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ Evas_Object *toolbar = NULL;
+ int isBubble = 0;
+ toolbar = elm_toolbar_add(cd->navi_bar);
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+
+ if (!toolbar) {
+ D_EMSG("toolbar is NULL");
+ return NULL;
+ }
+
+ elm_object_style_set(toolbar, "naviframe");
+
+ if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ /* create delete button */
+ Evas_Object *delete_button = __toolbar_btn_create(toolbar, dgettext("sys_string", "IDS_COM_SK_DELETE"), NULL);
+ evas_object_smart_callback_add(delete_button, "clicked", msg_ui_bubble_option_header_delete_clicked_cb, cd);
+
+ cd->toolbar_btn[CONTROLBAR_ITEM_1] = delete_button;
+ cd->toolbar_item_top[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, cd);
+ elm_object_item_part_content_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1], "object", delete_button);
+
+ isBubble = 1;
+ }
+
+ /* create preview button */
+ Evas_Object *preview_button = __toolbar_btn_create(toolbar, MSGC_STR_PREVIEW, NULL);
+ evas_object_smart_callback_add(preview_button, "clicked", __preview_btn_clicked_cb, cd);
+ cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble] = preview_button;
+ cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, cd);
+ elm_object_item_part_content_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble], "object", preview_button);
+
+ /* create page duration button */
+ char buf[DEF_BUF_LEN_S + 1] = {0,};
+ int pageduration = msg_ui_composer_pageduration_value_get(cd);
+ snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"), pageduration);
+
+ Evas_Object *duration_button = __toolbar_btn_create(toolbar, buf, "naviframe_control/multiline");
+ evas_object_smart_callback_add(duration_button, "clicked", __pageduration_btn_clicked_cb, cd);
+ cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble] = duration_button;
+ cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, cd);
+ elm_object_item_part_content_set(cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble], "object", duration_button);
+
+ COMPOSER_MSG_TYPE_E checked_type = msg_ui_composer_check_message_type(cd);
+ if (checked_type == COMPOSER_MSG_TYPE_MMS) {
+ msg_ui_composer_toolbar_top_item_change(cd, false);
+ } else {
+ msg_ui_composer_toolbar_top_item_change(cd, true);
+ }
+
+ D_LEAVE;
+
+ return toolbar;
+}
+
+void msg_ui_composer_toolbar_top_update(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ /* update pageduration */
+ char buf[DEF_BUF_LEN_S + 1] = {0,};
+ int pageduration = 0;
+ int isBubble = 0;
+ char *markup_str = NULL;
+
+ if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER)
+ isBubble = 1;
+
+ pageduration = msg_ui_composer_pageduration_value_get(cd);
+ snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"), pageduration);
+
+ markup_str = elm_entry_utf8_to_markup(buf);
+ if (markup_str) {
+ elm_object_text_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], markup_str);
+ g_free(markup_str);
+ } else {
+ elm_object_text_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], buf);
+ }
+}
+
+static void __naviframe_more_btn_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");
+ D_MSG_RETM_IF(cd->navi_it == NULL, "Navi item is NULL");
+
+ if (cd->navi_optionheader_opened) {
+ elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", "");
+ } else {
+ Evas_Object *content = NULL;
+
+ if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+
+ if (bubble_data && bubble_data->title_optionheader_opened) {
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,hide", "");
+ if (bubble_data->title_genlist)
+ msg_ui_bubble_close_title_menu_genlist(bubble_data);
+ bubble_data->title_optionheader_opened = false;
+ }
+ }
+
+ content = elm_object_item_part_content_unset(cd->navi_it, "optionheader");
+
+ if (content) {
+ if (content != cd->toolbar_top) {
+ PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+ int i = 0;
+ 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[i] = NULL;
+ }
+ }
+ }
+ evas_object_del(content);
+ }
+
+ cd->toolbar_top = __toolbar_top_create(cd);
+ elm_object_item_part_content_set(cd->navi_it, "optionheader", cd->toolbar_top);
+
+ elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,open", "");
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,show", "");
+ }
+
+ cd->navi_optionheader_opened = !cd->navi_optionheader_opened;
+
+ D_LEAVE;
+}
+
static Evas_Object *__naviframe_back_btn_create(Evas_Object *parent, void *data, bool title)
{
D_ENTER;
@@ -294,6 +895,25 @@ static Evas_Object *__naviframe_back_btn_create(Evas_Object *parent, void *data,
return btn;
}
+static Evas_Object *__naviframe_more_btn_create(Evas_Object *parent, void *data)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL");
+ D_MSG_RETVM_IF(data == NULL, NULL, "data == NULL");
+
+ Evas_Object *btn = elm_button_add(parent);
+ if (!btn)
+ return NULL;
+
+ elm_object_style_set(btn, "naviframe/more/default");
+ elm_object_focus_allow_set(btn, EINA_FALSE);
+
+ evas_object_smart_callback_add(btn, "clicked", __naviframe_more_btn_clicked_cb, data);
+ evas_object_show(btn);
+ D_LEAVE;
+ return btn;
+}
+
static char *__working_dir_create(void)
{
D_ENTER;
@@ -328,47 +948,98 @@ static char *__working_dir_create(void)
return NULL;
}
-static void __msg_ui_composer_reset_select_popup(MSG_COMPOSER_VIEW_DATA_S *cd)
+void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle)
{
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;
+ if (!cd)
+ return;
- D_LEAVE;
- return;
-}
+ COMPOSER_EDIT_STATE_E edit_state = __msg_ui_composer_edit_check(cd);
+ D_MSG("edit_state = %d", edit_state);
-void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd)
-{
- D_ENTER;
+ if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+ if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) {
+ /* auto saving */
+ msg_ui_composer_message_init();
- if (!cd) return;
+ if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) {
+ msg_ui_composer_save_message(cd->msg_handle);
+ }
- 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;
+ msg_ui_composer_message_destroy();
}
+ } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ if (edit_state == COMPOSER_EDIT_RECIPIENT) {
+ PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+
+ if (bubble_data->bubble_count == 0) {
+ int err = MSG_SUCCESS;
+
+ if (bubble_data->isDraft == true)
+ err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId);
+
+ if (err == MSG_SUCCESS) {
+ service_h svc_handle;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ char buf[DEF_BUF_LEN_S] = {0,};
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL);
+ snprintf(buf, sizeof(buf), "%d", bubble_data->threadId);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf);
+
+ ug_send_result(cd->ug, svc_handle);
+
+ service_destroy(svc_handle);
+ }
+ } else {
+ D_MSG("msg_delete_thread_message_list failed");
+ }
+ } else {
+ /* delete draft message */
+ msg_struct_list_s msg_list;
+
+ if (msg_get_message_list(cd->msg_handle, MSG_DRAFT_ID, bubble_data->threadId, 0, 0, &msg_list) == COMPOSER_RETURN_SUCCESS) {
+ int i = 0;
+ int msgid = 0;
+
+ for (i= 0; i < msg_list.nCount; i++) {
+ msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msgid);
+ D_MSG("draft msg_id is %d", msgid);
+ if (msg_delete_message(cd->msg_handle, msgid) != COMPOSER_RETURN_SUCCESS)
+ D_EMSG("msg_ui_comp_core_delete_message is failed = %d", msgid);
+ }
+ }
+
+ msg_release_list_struct(&msg_list);
+ }
+ } else if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) {
+ /* auto saving */
+ msg_ui_composer_message_init();
+
+ if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) {
+ msg_ui_composer_save_message(cd->msg_handle);
+ }
+
+ msg_ui_composer_message_destroy();
+ }
+
+ /* clear recipient_list of bubble composer */
+ msg_ui_composer_recipient_clear_recipient_list(cd);
}
+ /*process reset*/
+ msg_ui_composer_reset(cd, svc_handle);
+
D_LEAVE;
}
-COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle)
+/*
+ * 1. clear all composer editing obj
+ * 2. make composer using bundle val
+*/
+COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle)
{
D_ENTER;
if (!cd)
@@ -378,32 +1049,40 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundl
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) {
+ if (svc_handle) {
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)) {
+ char *thread_id = NULL;
+ char *msg_id = NULL;
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, &thread_id);
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msg_id);
+ if (thread_id || 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_parse_bubble_data(cd->bubble_data, svc_handle);
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);
+ msg_ui_composer_navi_title_set((void *)cd);
+
+ /* set recipient list for bubble composer */
+ msg_ui_composer_recipient_set_recipient_list(cd, cd->bubble_data->threadId);
} 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_parse_bubble_data(cd->bubble_data, svc_handle);
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);
+ msg_ui_composer_navi_title_set((void *)cd);
+
+ /* set recipient list for bubble composer */
+ msg_ui_composer_recipient_set_recipient_list(cd, cd->bubble_data->threadId);
}
} else {
if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
@@ -415,14 +1094,14 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundl
}
msg_ui_composer_change_composer_view(cd);
}
- __msg_ui_composer_bundle_data_process(cd, bundle);
+ __msg_ui_composer_bundle_data_process(cd, svc_handle);
}
}
D_LEAVE;
return COMPOSER_RETURN_SUCCESS;
}
-COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle)
{
D_ENTER;
D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is NULL");
@@ -431,21 +1110,23 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, bundl
cd->state = COMPOSER_STATE_TYPE_RUNNING;
/*bundle data parsing */
- if (bundle) {
+ if (svc_handle) {
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);
+ __msg_ui_composer_bundle_data_process(cd, svc_handle);
+
+ if (cd->attachlist == NULL)
+ cd->isLoad = false;
- 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_parse_bubble_data(bubble_data, svc_handle);
msg_ui_bubble_start_view(bubble_data);
+ msg_ui_composer_navi_title_set((void *)cd);
- 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);
+ /* set recipient list for bubble composer */
+ msg_ui_composer_recipient_set_recipient_list(cd, cd->bubble_data->threadId);
}
}
@@ -471,20 +1152,36 @@ 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;
+ 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;
+ D_PRINT("----- Unregister vconf callback -----");
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msgc_vconf_changed_cb) < 0) {
+ D_EMSG("Fail to unregister vconf CB with [%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
+ }
+ if (vconf_ignore_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msgc_vconf_changed_cb) < 0) {
+ D_EMSG("Fail to unregister vconf CB with [%s]", VCONFKEY_MSG_APP_FONT_SIZE);
+ }
+
+ if(cd->job_thread_end) {
+ D_PRINT("----- Job Delete -----");
+ ecore_job_del(cd->job_thread_end);
+ cd->job_thread_end = NULL;
+ }
+
+ if(cd->attach_thread) {
+ D_PRINT("----- Thread Delete -----");
+ ecore_thread_cancel(cd->attach_thread);
+ cd->attach_thread = NULL;
}
- if (cd->noti) {
- D_PRINT("----- Notify Delete -----");
- evas_object_del(cd->noti);
- cd->noti = NULL;
+ if (cd->last_focus_idler) {
+ D_PRINT("----- idler Delete -----");
+ ecore_idler_del(cd->last_focus_idler);
+ cd->last_focus_idler = NULL;
}
if (cd->popup_conform) {
@@ -498,11 +1195,17 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd)
cd->recipient = NULL;
}
+ D_PRINT("----- Recipient list Clear -----");
+ msg_ui_composer_recipient_clear_recipient_list(cd);
+
D_PRINT("----- Predict Search Delete -----");
msg_ui_composer_predictsearch_list_delete(cd);
+ D_PRINT("----- Body Delete -----");
+ msg_ui_composer_body_delete(cd);
+
D_PRINT("----- Close Msg Handle -----");
- msg_ui_comp_core_close_msg_handle(&cd->msg_handle);
+ msg_close_msg_handle(&cd->msg_handle);
D_PRINT("----- Delete Popup -----");
msg_ui_composer_popup_delete_all(cd);
@@ -513,26 +1216,68 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd)
cd->working_path = NULL;
}
+ if (cd->th) {
+ elm_theme_extension_del(cd->th, MSG_CUSTOM_WINSET_EDJ);
+ elm_theme_free(cd->th);
+ cd->th = NULL;
+ }
+ msg_common_reset_font_size("entry");
+
D_PRINT("===== Composer UG Destroy End =====");
D_LEAVE;
return ret;
}
-void msg_ui_composer_destroy_request(MSG_COMPOSER_VIEW_DATA_S *cd)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_rotate(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_ROTATE_TYPE_E rotate)
{
D_ENTER;
- D_MSG_RETM_IF(cd == NULL, "Composer Data == NULL");
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data == NULL");
+
+ cd->rotate = rotate;
+ D_MSG("rotate val [%d]", rotate);
+
+ 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) return COMPOSER_RETURN_FAIL;
+
+ if (rotate == COMPOSER_ROTATE_PORTRAIT || rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN) {
+ elm_layout_theme_set(cd->base, "layout", "application", "default");
+
+ elm_box_horizontal_set(r->bx_main, EINA_FALSE);
+ elm_scroller_content_min_limit(r->sc, EINA_FALSE, EINA_TRUE);
+ evas_object_size_hint_max_set(r->sc, 9999, COMPOSER_RECIPIENT_PORTRAIT_HEIGHT_MAX);
+ } else {
+ elm_layout_theme_set(cd->base, "layout", "application", "noindicator");/*hide indicator in Landscape*/
+
+ elm_box_horizontal_set(r->bx_main, EINA_TRUE);
+ elm_scroller_content_min_limit(r->sc, EINA_FALSE, EINA_FALSE);
+ evas_object_size_hint_max_set(r->sc, 9999, -1);
+ }
+
+ /* change body scroller size */
+ msg_ui_composer_change_body_scroll_size(cd, 0);
+
+ } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ if (rotate == COMPOSER_ROTATE_PORTRAIT || rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN) {
+ if (cd->bubble_data)
+ cd->bubble_data->isRotate = false;
+ } else {
+ if (cd->bubble_data)
+ cd->bubble_data->isRotate = true;
+ }
+
+ /* change body scroller size */
+ msg_ui_composer_change_body_scroll_size(cd, 0);
- 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_EMSG("Unknown Composer Mode");
+ return COMPOSER_RETURN_FAIL;
}
D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
}
COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd)
@@ -545,13 +1290,13 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd)
}
/* create message handle */
- if (msg_ui_comp_core_open_msg_handle(&cd->msg_handle) != COMPOSER_RETURN_SUCCESS) {
+ if (msg_open_msg_handle(&cd->msg_handle) != MSG_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) {
+ if (msg_reg_sent_status_callback(cd->msg_handle, &__msg_ui_composer_sent_status_cb, cd) != MSG_SUCCESS) {
D_EMSG("[ASSERT] sent status callback register error!!!");
return COMPOSER_RETURN_FAIL;
}
@@ -568,21 +1313,39 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd)
return COMPOSER_RETURN_FAIL;
}
-
/* set default message type is SMS */
cd->msg_type = COMPOSER_MSG_TYPE_SMS;
- /*set currnet_theme */
+ if(cd->mms_max_size == 0) {
+ msg_struct_t setting = msg_create_struct(MSG_STRUCT_SETTING_MSGSIZE_OPT);
- 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 (msg_get_msgsize_opt(cd->msg_handle, setting) != MSG_SUCCESS) {
+ D_EMSG("Getting MMS MAX SIZE ERROR");
+ } else {
+ if (setting)
+ msg_get_int_value(setting, MSG_MESSAGE_SIZE_INT, &cd->mms_max_size);
+
+ D_MSG("[DEBUG] msg max size = [%d KB] !!!", cd->mms_max_size);
- if (current_theme)
- free(current_theme);
+ cd->mms_max_size = cd->mms_max_size * 1024;
+ }
+ msg_release_struct(&setting);
+ }
+ /* set default font size*/
+ __msgc_init_font_size(cd);
+
+ /* register vconf callback function */
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msgc_vconf_changed_cb, cd) < 0) {
+ D_EMSG("Fail to register vconf CB with [%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
+ }
+ if (vconf_notify_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msgc_vconf_changed_cb, cd) < 0) {
+ D_EMSG("Fail to register vconf CB with [%s]", VCONFKEY_MSG_APP_FONT_SIZE);
+ }
+
+ cd->th = elm_theme_new();
+ elm_theme_ref_set(cd->th, NULL);
+ elm_theme_extension_add(cd->th, MSG_CUSTOM_WINSET_EDJ);
return COMPOSER_RETURN_SUCCESS;
}
@@ -598,15 +1361,14 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd)
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 *more_button = NULL;
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;
+
+ /* State Set */
+ cd->state = COMPOSER_STATE_TYPE_CREATE;
/* Create naviframe */
navi_frame = elm_naviframe_add(cd->base);
@@ -688,26 +1450,35 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd)
/*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);
+ if (cd->isMsgInternal)
+ back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, false);
+ else
+ back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, true);
} 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);
}
+ navi_it = elm_naviframe_item_push(navi_frame, NULL, NULL, NULL, conform, "empty");
+
cd->navi_it = navi_it;
cd->back_btn = back_btn;
+ /* create navi title layout */
+ cd->navi_title_layout = msg_ui_composer_create_navi_title_bar(cd);
+ msg_ui_composer_navi_title_set(cd);
+ elm_object_item_part_content_set(cd->navi_it, "title", cd->navi_title_layout);
+
+ /*Create more button*/
+ more_button = __naviframe_more_btn_create(navi_frame, cd);
+
+ elm_object_part_content_set(cd->navi_title_layout, "more_btn", more_button);
+ elm_object_part_content_set(cd->navi_title_layout, "prev_btn", back_btn);
+
+ cd->more_btn = more_button;
+
/* 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;
@@ -715,34 +1486,61 @@ 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)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, 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;
+ msg_struct_t threadInfo = NULL;
+ int err;
/*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);
+ msg_struct_list_s addrList;
+ int i = 0;
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+
+ err = msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList);
- 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 (err == MSG_SUCCESS) {
+ bubble_data->addr_list.addr_cnt = addrList.nCount;
+
+ for (i = 0; i<addrList.nCount; i++) {
+ int contact_id = 0;
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
+ /** addresss */
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN);
+
+ /** contact ID & display name */
+ if (contact_id > 0) {
+ bubble_data->addr_list.addr_info[i].contact_id = contact_id;
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN);
+ } else {
+ bubble_data->addr_list.addr_info[i].contact_id = 0;
+ }
+ }
- if (contact_id > 0) {
- bubble_data->contactId = contact_id;
+ msg_release_list_struct(&addrList);
} else {
- bubble_data->contactId = 0;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ERROR] msg_get_address_list returns error [%d]", err);
}
+
+ threadInfo = msg_create_struct(MSG_STRUCT_THREAD_INFO);
+ err = msg_get_thread(bubble_data->msgHandle, bubble_data->threadId, threadInfo);
+
+ if (err == MSG_SUCCESS)
+ msg_get_str_value(threadInfo, MSG_THREAD_NAME_STR, bubble_data->threadName, DEF_THREAD_NAME_LEN);
+ else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ERROR] msg_get_trhead returns error [%d", err);
+
+ msg_release_struct(&threadInfo);
+
return COMPOSER_RETURN_SUCCESS;
}
@@ -801,14 +1599,8 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_change_bubble_view(MSG_COMPOSER_VIEW_DATA
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);
+ elm_object_part_content_set(cd->navi_title_layout, "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'.
@@ -824,53 +1616,166 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_change_bubble_view(MSG_COMPOSER_VIEW_DATA
return COMPOSER_RETURN_SUCCESS;
}
+/*
+ * msg_ui_composer_editable_set
+ * editable == FALSE : hide body content & disable more button & close option header
+ * editable == TRUE : show body content layout
+ * */
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) {
+ if (editable == EINA_FALSE){
Evas_Object *body_layout = elm_object_part_content_unset(cd->content_layout, "swl.composer.body");
evas_object_hide(body_layout);
+
+ if (cd->more_btn)
+ elm_object_disabled_set(cd->more_btn, EINA_TRUE);
+
+ if (cd->navi_it) {
+ elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", "");
+ elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,hide", "");
+ cd->navi_optionheader_opened = EINA_FALSE;
+ }
+
} else {
elm_object_part_content_set(cd->content_layout, "swl.composer.body", cd->ly_body);
evas_object_show(cd->ly_body);
+
+ if (cd->more_btn)
+ elm_object_disabled_set(cd->more_btn, EINA_FALSE);
+
}
D_LEAVE;
}
-void msg_ui_composer_bubble_del_all(void *data, bundle *b)
+void msg_ui_composer_bubble_del_all(void *data, service_h svc_handle)
{
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);
+ ug_send_result(cd->ug, svc_handle);
}
-void msg_ui_bubble_composer_navi_title_set(void *data)
+void msg_ui_composer_toolbar_top_item_change(MSG_COMPOSER_VIEW_DATA_S *cd, bool smstype)
{
D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer data is NULL");
+
+ int isBubble = 0;
+
+ if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ isBubble = 1;
+
+ PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
+ if (bubble_data->bubble_count <= 0) {
+ elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1], EINA_TRUE);
+ elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_1], EINA_FALSE);
+ elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_1], EINA_TRUE);
+ }
+ }
+
+ if (smstype == true) {
+ if (cd->toolbar_item_top[CONTROLBAR_ITEM_1]) {
+ elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble], EINA_TRUE);
+ elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_FALSE);
+ elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_TRUE);
+
+ elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble], EINA_TRUE);
+ elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_FALSE);
+ elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_TRUE);
+ }
+ } else {
+ if (cd->toolbar_item_top[CONTROLBAR_ITEM_1]) {
+ elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble], EINA_FALSE);
+ elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_TRUE);
+ elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_FALSE);
+
+ elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble], EINA_FALSE);
+ elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_TRUE);
+ elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_FALSE);
+ }
+ }
+ D_LEAVE;
+}
+
+Evas_Object *msg_ui_composer_create_navi_title_bar(void *data)
+{
+ D_ENTER;
+
+ if (!data) {
+ D_EMSG("[ERROR] data is NULL");
+ return NULL;
+ }
- if (!data)
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ Evas_Object *title_layout = elm_layout_add(cd->navi_bar);
+ elm_layout_file_set(title_layout, MSG_COMMON_EDJ, "title");
+ evas_object_size_hint_weight_set(title_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(title_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(title_layout);
+
+ return title_layout;
+}
+
+void msg_ui_composer_navi_title_set(void *data)
+{
+ D_ENTER;
+
+ if (!data) {
+ D_EMSG("data is NULL");
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"));
+ if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+ elm_object_part_text_set(cd->navi_title_layout, "title_text", MSGC_STR_NEW_MESSAGE);
+ } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER){
+ Evas_Object *title_button = NULL;
+
+ elm_object_part_text_set(cd->navi_title_layout, "title_text", ""); // text part clear first
+
+ title_button = elm_button_add(cd->navi_bar);
+
+ elm_object_theme_set(title_button, cd->th);
+ elm_object_style_set(title_button, "title_button");
+
+ evas_object_size_hint_weight_set(title_button, 0.0, 0.0);
+ evas_object_size_hint_align_set(title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ if (bubble_data->addr_list.addr_cnt == 1) {
+ if (bubble_data->addr_list.addr_info[0].contact_id > 0 && bubble_data->addr_list.addr_info[0].name[0] != '\0')
+ elm_object_text_set(title_button, bubble_data->addr_list.addr_info[0].name);
+ else
+ elm_object_text_set(title_button, bubble_data->addr_list.addr_info[0].address);
+ } else if (bubble_data->addr_list.addr_cnt > 1) {
+ char title_text[DEF_BUF_LEN+1] = {0,};
+
+ if (bubble_data->addr_list.addr_info[0].contact_id > 0 && bubble_data->addr_list.addr_info[0].name[0] != '\0')
+ snprintf(title_text, sizeof(title_text), "%s +%d", bubble_data->addr_list.addr_info[0].name, bubble_data->addr_list.addr_cnt-1);
+ else
+ snprintf(title_text, sizeof(title_text), "%s +%d", bubble_data->addr_list.addr_info[0].address, bubble_data->addr_list.addr_cnt-1);
+
+ elm_object_text_set(title_button, title_text);
+ } else {
+ elm_object_text_set(title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ }
+
+ evas_object_show(title_button);
+ elm_object_part_content_set(cd->navi_title_layout, "title_btn", title_button);
+ evas_object_smart_callback_add(title_button, "clicked", msg_ui_bubble_title_button_clicked_cb, cd);
+
+ bubble_data->title_button = title_button;
} 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_EMSG("Invalid msg_ui_mode [%d]", cd->msg_ug_mode);
+ return;
}
-
- D_LEAVE;
}
diff --git a/composer/src/ui-composer/msg-ui-composer-pageduration.c b/composer/src/ui-composer/msg-ui-composer-pageduration.c
new file mode 100755
index 0000000..5b56bb2
--- /dev/null
+++ b/composer/src/ui-composer/msg-ui-composer-pageduration.c
@@ -0,0 +1,180 @@
+/*
+ * 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-common.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-pageduration.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-main.h"
+
+#define MSGC_PAGE_DURATION_MAX 99
+#define MSGC_PAGE_DURATION_MIN 5
+#define CUSTOM_TIME_CHAR_MAX 2
+
+static void __msgc_pageduration_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(data == NULL, "data param is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ int page_duration = 0;
+ const char *duration = NULL;
+
+ duration = elm_entry_entry_get(cd->page_duration_entry);
+ if (!duration) {
+ D_EMSG("duration is NULL");
+ return;
+ }
+
+ page_duration = atoi(duration);
+ D_MSG("page_duration is %d", page_duration);
+
+ if (page_duration < MSGC_PAGE_DURATION_MIN || page_duration > MSGC_PAGE_DURATION_MAX) {
+ elm_entry_entry_set(cd->page_duration_entry, "5");
+ elm_entry_cursor_end_set(cd->page_duration_entry);
+ return;
+ }
+
+ /*save pageduration */
+ cd->page_duration = page_duration;
+
+ msg_ui_composer_toolbar_top_update(cd);
+
+ MSGC_EVAS_OBJECT_DEL(cd->popup_conform);
+ MSGC_EVAS_OBJECT_DEL(cd->custom_popup);
+ cd->page_duration_entry = NULL;
+}
+
+static void __msgc_pageduration_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(data == NULL, "data param is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ MSGC_EVAS_OBJECT_DEL(cd->popup_conform);
+ MSGC_EVAS_OBJECT_DEL(cd->custom_popup);
+ cd->page_duration_entry = NULL;
+}
+
+int msg_ui_composer_pageduration_value_get(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, MSGC_PAGE_DURATION_MIN, "Composer Data is NULL");
+ int page_duration = MSGC_PAGE_DURATION_MIN;
+
+ if (cd->page_duration != 0)
+ page_duration = cd->page_duration;
+ else
+ page_duration = COMPOSER_PAGE_DEFAULT_DURATION;
+
+ return page_duration;
+}
+
+void msg_ui_composer_pageduration_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ Evas_Object *btn1 = NULL;
+ Evas_Object *btn2 = NULL;
+ Evas_Object *layout = NULL;
+ Evas_Object *content = NULL;
+ Evas_Object *entry = NULL;
+ Evas_Object *conform = NULL;
+ Evas_Object *popup = NULL;
+ Elm_Entry_Filter_Limit_Size limit_filter;
+ Elm_Entry_Filter_Accept_Set accept_filter;
+ int page_duration = MSGC_PAGE_DURATION_MIN;
+ char duration_str[DEF_BUF_LEN] = {0,};
+ char popup_msg[DEF_BUF_LEN] = {0,};
+
+ content = elm_layout_add(cd->main_window);
+ conform = msg_ui_composer_conformant_create(cd->main_window, content);
+ if (!conform) {
+ D_EMSG("conform is NULL");
+ return;
+ }
+
+ cd->popup_conform = conform;
+
+ page_duration = msg_ui_composer_pageduration_value_get(cd);
+ D_MSG("Loaded duration is %d", page_duration);
+ snprintf(duration_str, sizeof(duration_str), "%d", page_duration);
+
+ /* create custom popup inner layout */
+ layout = elm_layout_add(content);
+ elm_layout_file_set(layout, MSGC_UI_DEFAULT_EDJ, "composer/popup/entryview");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ snprintf(popup_msg, sizeof(popup_msg), _MSGSTR("IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"), MSGC_PAGE_DURATION_MIN);
+ elm_object_part_text_set(layout, "elm.text", popup_msg);
+
+ entry = elm_entry_add(content);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ limit_filter.max_char_count = CUSTOM_TIME_CHAR_MAX;
+ elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter);
+ elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NUMBERONLY);
+ accept_filter.accepted = "0123456789";
+ accept_filter.rejected = NULL;
+ elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, &accept_filter);
+ /* fix font size */
+ elm_entry_text_style_user_push(entry, "DEFAULT='font_size=32'");
+ elm_object_text_set(entry, duration_str);
+ elm_entry_cursor_end_set(entry);
+ elm_object_part_content_set(layout, "swl.entry", entry);
+ evas_object_show(entry);
+ evas_object_show(layout);
+
+ cd->page_duration_entry = entry;
+
+ /* create popup */
+ popup = msg_ui_composer_custom_popup_create(cd, NULL, content, layout);
+ if (!popup) {
+ D_EMSG("popup is NULL");
+ goto error_return;
+ }
+
+ /* create button */
+ btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, _SYSSTR("IDS_COM_SK_OK"));
+ elm_object_focus_allow_set(btn1, EINA_FALSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __msgc_pageduration_ok_clicked_cb, cd);
+ btn2 = elm_button_add(popup);
+ elm_object_style_set(btn2, "popup_button/default");
+ elm_object_text_set(btn2, _SYSSTR("IDS_COM_SK_CANCEL"));
+ elm_object_focus_allow_set(btn2, EINA_FALSE);
+ elm_object_part_content_set(popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", __msgc_pageduration_cancel_clicked_cb, cd);
+ evas_object_show(popup);
+
+ cd->custom_popup = popup;
+
+ elm_object_focus_set(entry, EINA_TRUE);
+
+ D_LEAVE;
+ return;
+
+error_return:
+
+ MSGC_EVAS_OBJECT_DEL(cd->page_duration_entry);
+ MSGC_EVAS_OBJECT_DEL(content);
+ MSGC_EVAS_OBJECT_DEL(cd->popup_conform);
+
+ D_LEAVE;
+}
diff --git a/composer/src/ui-composer/msg-ui-composer-popup.c b/composer/src/ui-composer/msg-ui-composer-popup.c
index 6fa49f7..9daf196 100755
--- a/composer/src/ui-composer/msg-ui-composer-popup.c
+++ b/composer/src/ui-composer/msg-ui-composer-popup.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#include "msg-ui-composer-common.h"
#include "msg-ui-composer-util.h"
#include "msg-ui-composer-popup.h"
@@ -29,7 +30,7 @@ void msg_ui_composer_popup_delete_all(void *data)
D_ENTER;
MSG_COMPOSER_VIEW_DATA_S *cd = data;
- Evas_Object * popup;
+ Evas_Object *popup;
EINA_LIST_FREE(cd->popup_list, popup) {
if (popup)
evas_object_del(popup);
@@ -49,7 +50,7 @@ void msg_ui_composer_status_popup_response_cb(void *data, Evas_Object *obj, void
D_LEAVE;
}
-static void __popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+static void __popup_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
D_ENTER;
MSG_COMPOSER_VIEW_DATA_S *cd;
@@ -62,8 +63,7 @@ static void __popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *even
cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
- D_PRINT("delete = %s[%p]", (char *)data, obj);
-
+ D_PRINT("delete = [%p]", obj);
if (cd->popup_list) {
D_MSG("popup list count = %d", eina_list_count(cd->popup_list));
@@ -72,41 +72,20 @@ static void __popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *even
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)
+void msg_ui_composer_status_noti_show(const char *msg)
{
D_ENTER;
+ D_MSG_RETM_IF(msg == NULL, "msg is NULL");
- 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);
+ status_message_post(msg);
D_LEAVE;
- return notify;
}
/*
@@ -145,6 +124,39 @@ Evas_Object *msg_ui_composer_status_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, con
return popup;
}
+/*
+ TEXT && BUTTON
+*/
+Evas_Object *msg_ui_composer_status_btn_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg, int time, const char *btn_text)
+{
+ 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 = NULL;
+
+ popup = msg_ui_composer_status_popup_show(cd, msg, time);
+ D_MSG_RETVM_IF(popup == NULL, NULL, "popup is NULL");
+
+ if (btn_text) {
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, btn_text);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
+ }
+
+ /* give a focus to popup.
+ * EFL Internally, focus will be set to button of popup.
+ * Because popup which is a container widget can't have focus according to elementary policy
+ */
+ 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;
@@ -156,7 +168,8 @@ Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, c
Evas_Object *lb;
popup = elm_popup_add(cd->main_window);
- if (!popup) return NULL;
+ if (!popup)
+ return NULL;
Evas_Object *box;
box = elm_box_add(popup);
@@ -170,12 +183,11 @@ Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, c
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);
+ elm_object_text_set(lb, msg);
evas_object_show(lb);
elm_box_pack_end(box, lb);
@@ -196,7 +208,7 @@ Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, c
/*
list type popup
*/
-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_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *list, const char *style)
{
D_ENTER;
D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
@@ -207,10 +219,14 @@ Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, con
if (popup == NULL)
return NULL;
- elm_object_style_set(popup, "menustyle");
+ if (style)
+ elm_object_style_set(popup, style);
+ else
+ elm_object_style_set(popup, "menustyle");
+
if (title)
- elm_object_part_text_set(popup,"title,text", title);
+ elm_object_part_text_set(popup, "title,text", title);
if (list)
elm_object_content_set(popup, list);
@@ -225,29 +241,70 @@ Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, con
return popup;
}
-Eina_Bool msg_ui_composer_popup_exist(void * data)
+/*
+ custom type popup
+*/
+Evas_Object *msg_ui_composer_custom_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *parent, Evas_Object *layout)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL");
+ D_MSG_RETVM_IF(parent == NULL, NULL, "parent param is NULL");
+
+ Evas_Object *popup;
+ popup = elm_popup_add(parent);
+ if (popup == NULL)
+ return NULL;
+
+ elm_object_style_set(popup, "customstyle");
+
+ if (title)
+ elm_object_part_text_set(popup, "title,text", title);
+
+ if (layout)
+ elm_object_content_set(popup, layout);
+
+ 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;
+ 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;
+
+ if (eina_list_count(cd->popup_list) > 0)
+ return EINA_TRUE;
+ else
+ return EINA_FALSE;
}
-void msg_ui_composer_popup_focus(void * data)
+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;
+ if (!cd || !cd->popup_list)
+ return;
p = eina_list_nth(cd->popup_list,0);
- if (!p) return;
+ 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
index 743c2c8..999b830 100755
--- a/composer/src/ui-composer/msg-ui-composer-predictsearch.c
+++ b/composer/src/ui-composer/msg-ui-composer-predictsearch.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#include "msg-ui-composer-data.h"
#include "msg-ui-composer-util.h"
#include "msg-ui-composer-common.h"
@@ -270,13 +271,9 @@ static int __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, const int
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;
@@ -284,22 +281,16 @@ static int __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, const int
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");
@@ -335,21 +326,6 @@ static int __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, const int
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);
diff --git a/composer/src/ui-composer/msg-ui-composer-recipient-callback.c b/composer/src/ui-composer/msg-ui-composer-recipient-callback.c
index 998a914..18e0d27 100755
--- a/composer/src/ui-composer/msg-ui-composer-recipient-callback.c
+++ b/composer/src/ui-composer/msg-ui-composer-recipient-callback.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#include "msg-ui-composer-common.h"
#include "msg-ui-composer-util.h"
#include "msg-ui-composer-popup.h"
@@ -21,11 +22,11 @@
#include "msg-ui-composer-predictsearch.h"
#include "msg-ui-composer-recipient.h"
#include "msg-ui-composer-recipient-callback.h"
+#include "msg-ui-composer-attachment.h"
/*==================================================================================================
* FUNCTION IMPLEMENTATIONS
*==================================================================================================*/
-
void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
@@ -36,6 +37,9 @@ void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_in
const char *bt_label = elm_object_text_get(obj);
D_MSG("clicked bt label [%s]", bt_label);
+ /* temporarily, set focus to back_btn to resolve invalid focus tree issue of ly_bt show/hide*/
+ elm_object_focus_set(cd->back_btn, EINA_TRUE);
+
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)) {
@@ -50,9 +54,9 @@ void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_in
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;
+ MSG_COMPOSER_VIEW_DATA_S *cd = NULL;
+ RECIPIENT_S *rd = NULL;
+ PREDICTSEARCH_S *ps = NULL;
cd = data;
D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
@@ -64,6 +68,9 @@ void msg_ui_recipient_multibuttonentry_focused_cb(void *data, Evas_Object *obj,
D_MSG_RETM_IF(rd == NULL, "Predict Data is NULL");
msg_ui_composer_last_focused_entry_set(cd, obj);
+ /* it is added to prevent unfocused_cb of entry on mbe */
+ Elm_Object_Item *item = elm_multibuttonentry_selected_item_get(obj);
+ elm_multibuttonentry_item_selected_set(item, EINA_FALSE);
if (ps->IsShow == EINA_FALSE)
msg_ui_composer_bt_show(rd);
@@ -95,6 +102,11 @@ void msg_ui_recipient_multibuttonentry_clicked_cb(void *data, Evas_Object *obj,
MSG_COMPOSER_VIEW_DATA_S *cd = data;
D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ int attach_count = msg_ui_composer_get_attach_count(cd);
+
+ if (attach_count > 1)
+ msg_ui_composer_contract_attach_list(cd);
+
if(msg_ui_composer_popup_exist(cd) == EINA_TRUE) {
msg_ui_composer_popup_focus(cd);
return;
@@ -119,6 +131,17 @@ void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event
if (recipient_str == NULL)
return;
+ COMPOSER_RECP_ADDR_E addr_type = COMPOSER_RECP_ADDR_NONE;
+ if (recipient_str && strlen(recipient_str)) {
+ addr_type = msg_ui_composer_recipient_type_get(recipient_str);
+ }
+
+ msg_ui_composer_recipient_addr_type_set(rd, addr_type);
+ D_MSG("recipient is invalid recipient addr_type = %d", addr_type);
+
+ D_MSG("saved_str = %s", saved_str);
+ D_MSG("recipient_str = %s", recipient_str);
+
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);
@@ -140,7 +163,7 @@ void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event
D_LEAVE;
}
-void msg_ui_recipient_multibuttonentry_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+void msg_ui_recipient_multibuttonentry_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
MSG_COMPOSER_VIEW_DATA_S *cd = data;
@@ -160,27 +183,35 @@ void msg_ui_recipient_multibuttonentry_item_selected_cb(void *data, Evas_Object
return;
}
- elm_multibuttonentry_item_selected_set(item, EINA_FALSE);
-
+ rd->sel_r_item = r_item;
+ rd->sel_mbe_item = item;
msg_ui_composer_last_focused_entry_set(cd, rd->mbe);
+ msg_ui_composer_recipient_select_popup_create(cd);
- 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);
+ D_LEAVE;
+}
- g_free(entry_txt);
- }
+static Eina_Bool __show_invalid_address_popup(void *data)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "Composer Data is NULL");
- 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);
+ RECIPIENT_S *rd = cd->recipient;
+ D_MSG_RETVM_IF(rd == NULL, EINA_FALSE, "recipient data is NULL");
+
+ rd->notify_popup_idler = NULL;
+
+ if (!msg_ui_composer_popup_exist(cd) && !cd->loaded_ug && !cd->loaded_aul) {
+ /* show popup when message window has a top focus.(active state of app) */
+ if (elm_win_focus_get(cd->main_window) == EINA_TRUE) {
+ if (cd->isclosed == false)
+ msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ }
}
D_LEAVE;
+ return EINA_FALSE;
}
Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, const char *item_label, void *item_data, void *data)
@@ -196,6 +227,8 @@ Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, con
RECIPIENT_ITEM_S *r_item = NULL;
+ msg_ui_composer_recipient_addr_type_set(rd, COMPOSER_RECP_ADDR_NONE);
+
/*Check recipient count*/
int r_count = msg_ui_composer_recipient_count_get(rd);
if (r_count >= COMPOSER_RECIPIENT_COUNT_MAX) {
@@ -223,10 +256,20 @@ Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, con
if (r_item->type == COMPOSER_RECP_ADDR_INVALID) {
D_EMSG("recipient is invalid recipient");
- msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP);
+ msg_ui_composer_recipient_addr_type_set(rd, COMPOSER_RECP_ADDR_INVALID);
+
+ if (rd->notify_popup_idler) {
+ ecore_idler_del(rd->notify_popup_idler);
+ rd->notify_popup_idler = NULL;
+ }
+ rd->notify_popup_idler = ecore_idler_add(__show_invalid_address_popup, cd);
+
+ g_free(r_item);
+ return EINA_FALSE;
}
g_free(r_item);
+ D_LEAVE;
return EINA_TRUE;
}
@@ -256,12 +299,20 @@ void msg_ui_recipient_multibuttonentry_item_added_cb(void *data, Evas_Object *ob
} 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);
}
+ if (recipient_item) {
+ if (recipient_item->type == COMPOSER_RECP_ADDR_VALID_NUMBER || recipient_item->type == COMPOSER_RECP_ADDR_VALID_EMAIL) {
+ msg_ui_composer_message_type_check_and_change(cd);
+ } else {
+ D_EMSG("Invalid recipient added!!");
+ }
+ } else {
+ D_EMSG("No recipient item");
+ }
}
void msg_ui_recipient_multibuttonentry_item_deleted_cb(void *data, Evas_Object *obj, void *event_info)
@@ -280,5 +331,35 @@ void msg_ui_recipient_multibuttonentry_item_deleted_cb(void *data, Evas_Object *
D_MSG("===== END of recipient_item free =====");
g_free(recipient_item);
+ msg_ui_composer_message_type_check_and_change(cd);
+ D_LEAVE;
+}
+
+void msg_ui_recipient_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ RECIPIENT_S *rd = (RECIPIENT_S *)data;
+ D_MSG_RETM_IF(rd == NULL, "rd is NULL");
+ D_MSG_RETM_IF(obj == NULL, "obj is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)rd->cd;
+ Evas_Coord x = 0;
+ Evas_Coord y = 0;
+ Evas_Coord w = 0;
+ Evas_Coord h = 0;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ D_MSG("recipient box x = %d, y = %d, w = %d, h = %d", x, y, w, h);
+ if (rd->recipient_h != h) {
+ rd->recipient_h = h;
+
+ if (cd->isclosed == false) { /* evas_object_resize makes bs during closing composer*/
+ Evas_Object *entry = elm_multibuttonentry_entry_get(rd->mbe);
+ int keypad_h = msg_ui_composer_get_keypad_height(entry);
+
+ msg_ui_composer_change_body_scroll_size(cd, keypad_h);
+ }
+ }
+
D_LEAVE;
}
+
diff --git a/composer/src/ui-composer/msg-ui-composer-recipient.c b/composer/src/ui-composer/msg-ui-composer-recipient.c
index 0b5f845..c908bc1 100755
--- a/composer/src/ui-composer/msg-ui-composer-recipient.c
+++ b/composer/src/ui-composer/msg-ui-composer-recipient.c
@@ -14,33 +14,471 @@
* 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"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-external.h"
/*==================================================================================================
* FUNCTION IMPLEMENTATIONS
*==================================================================================================*/
-static void __mbe_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+static void __change_number_popup_btn_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");
+
+ RECIPIENT_S *rd = cd->recipient;
+ D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL");
+
+ MSGC_EVAS_OBJECT_DEL(rd->popup_change_number);
+ D_LEAVE;
+}
+
+static void __change_number_popup_list_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");
+
+ RECIPIENT_S *rd = cd->recipient;
+ D_MSG_RETM_IF(rd == NULL, "recipient data Data is NULL");
+
+ RECIPIENT_ITEM_S *r_item = evas_object_data_get(obj, "selected_item");;
+ D_MSG_RETM_IF(r_item == NULL, "Recipient Data is NULL");
+
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ CONTACT_ITEM_S *ct_item = (CONTACT_ITEM_S *)elm_object_item_data_get(item);
+ D_MSG_RETM_IF(ct_item == NULL, "ct_item is NULL");
+
+ if (g_strcmp0(r_item->recipient, ct_item->recipient) == 0) {
+ D_MSG("same recipient %s", ct_item->recipient);
+ MSGC_EVAS_OBJECT_DEL(rd->popup_change_number);
+ return;
+ }
+
+ if (COMPOSER_RETURN_RECIPIENT_DUPLICATE == msg_ui_composer_recipient_duplicate_check(cd->recipient, ct_item->recipient)) {
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP);
+ } else {
+ memset(r_item->recipient, 0x00, sizeof(r_item->recipient));
+ strncpy(r_item->recipient, ct_item->recipient, sizeof(r_item->recipient) - 1);
+ r_item->type = msg_ui_composer_recipient_type_get(r_item->recipient);
+ msg_ui_composer_message_type_check_and_change(cd);
+ }
+
+ MSGC_EVAS_OBJECT_DEL(rd->popup_change_number);
+
+ return;
+}
+
+static char *__contact_type_string_get(int type, int contact_type)
+{
+ static char return_string[DEF_BUF_LEN + 1] = { 0, };
+ memset(return_string, 0, DEF_BUF_LEN + 1);
+
+ if (type == COMPOSER_ADDR_TYPE_NUMBER) {
+ switch (contact_type) {
+ case CTS_NUM_TYPE_HOME:
+ strncpy(return_string, _SYSSTR("IDS_COM_BODY_HOME"), sizeof(return_string) - 1);
+ break;
+ case CTS_NUM_TYPE_WORK:
+ strncpy(return_string, _SYSSTR("IDS_COM_BODY_WORK"), sizeof(return_string) - 1);
+ break;
+ case CTS_NUM_TYPE_CELL:
+ strncpy(return_string, _SYSSTR("IDS_COM_BODY_MOBILE"), sizeof(return_string) - 1);
+ break;
+ default:
+ strncpy(return_string, _MSGSTR("IDS_MSGF_BODY_OTHER"), sizeof(return_string) - 1);
+ break;
+ }
+ } else if (type == COMPOSER_ADDR_TYPE_EMAIL) {
+ switch (contact_type) {
+ case CTS_EMAIL_TYPE_HOME:
+ strncpy(return_string, _SYSSTR("IDS_COM_BODY_HOME"), sizeof(return_string) - 1);
+ break;
+ case CTS_EMAIL_TYPE_WORK:
+ strncpy(return_string, _SYSSTR("IDS_COM_BODY_WORK"), sizeof(return_string) - 1);
+ break;
+ default:
+ strncpy(return_string, _MSGSTR("IDS_MSGF_BODY_OTHER"), sizeof(return_string) - 1);
+ break;
+ }
+ } else {
+ D_EMSG("Invalid number type !!!");
+ strncpy(return_string, _MSGSTR("IDS_MSGF_BODY_OTHER"), sizeof(return_string) - 1);
+ }
+
+ return return_string;
+}
+
+static char *__change_number_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ D_MSG_RETVM_IF(data == NULL, NULL, "data param is NULL");
+ CONTACT_ITEM_S *ct_item = (CONTACT_ITEM_S *)data;
+
+ if (!strcmp(part, "elm.text.1")) {
+ return strdup(ct_item->recipient);
+ } else {
+ return strdup(__contact_type_string_get(ct_item->type, ct_item->contact_type));
+ }
+}
+
+static void __change_number_del_cb(void *data, Evas_Object *obj)
+{
+ D_MSG_RETM_IF(data == NULL, "RECIPIENT_ITEM_S data is NULL");
+ CONTACT_ITEM_S *ct_item = (CONTACT_ITEM_S *)data;
+
+ if (ct_item)
+ free(ct_item);
+}
+
+static void __change_number_popup_create(void *data)
+{
+ 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_S *rd = cd->recipient;
+ D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL");
+
+ Evas_Object *popup = NULL;
+ Evas_Object *genlist = NULL;
+ int error_code = CTS_SUCCESS;
+ int count = 0;
+ CTSstruct *contact = NULL;
+ GSList *get_list = NULL;
+ GSList *iter = NULL;
+ RECIPIENT_ITEM_S *r_item = NULL;
+ CONTACT_ITEM_S *ct_item = NULL;
+
+ r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
+ D_MSG_RETM_IF(r_item == NULL, "Selected Data is NULL");
+ D_MSG_RETM_IF(r_item->index <= 0, "Selected index <= 0");
+
+ error_code = contacts_svc_get_contact(r_item->index, &contact);
+ if (error_code) {
+ D_MSG("error_code %d", error_code);
+ return;
+ }
+
+ rd->change_number_itc.item_style = "2text.3";
+ rd->change_number_itc.func.text_get = __change_number_text_get;
+ rd->change_number_itc.func.content_get = NULL;
+ rd->change_number_itc.func.state_get = NULL;
+ rd->change_number_itc.func.del = __change_number_del_cb;
+
+ genlist = elm_genlist_add(cd->main_window);
+ 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);
+ evas_object_data_set(genlist, "selected_item", r_item);
+
+ 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", r_item->index, phone_type, content);
+
+ ct_item = (CONTACT_ITEM_S *)calloc(1, sizeof(CONTACT_ITEM_S));
+ if (ct_item) {
+ ct_item->type = COMPOSER_ADDR_TYPE_NUMBER;
+ ct_item->contact_type = phone_type;
+ strncpy(ct_item->recipient, (char *)content, sizeof(ct_item->recipient) - 1);
+
+ elm_genlist_item_append(genlist, &rd->change_number_itc, ct_item, NULL, ELM_GENLIST_ITEM_NONE, __change_number_popup_list_clicked_cb, cd);
+
+ count++;
+ } else {
+ D_EMSG("calloc is failed");
+ }
+
+ }
+
+ 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", r_item->index, email_type, content);
+
+ ct_item = (CONTACT_ITEM_S *)calloc(1, sizeof(CONTACT_ITEM_S));
+ if (ct_item) {
+ ct_item->type = COMPOSER_ADDR_TYPE_EMAIL;
+ ct_item->contact_type = email_type;
+ strncpy(ct_item->recipient, (char *)content, sizeof(ct_item->recipient) - 1);
+
+ elm_genlist_item_append(genlist, &rd->change_number_itc, ct_item, NULL, ELM_GENLIST_ITEM_NONE, __change_number_popup_list_clicked_cb, cd);
+
+ count++;
+ } else {
+ D_EMSG("calloc is failed");
+ }
+
+ iter = g_slist_next(iter);
+ }
+
+ if (count >= 5) {
+ popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_SK_SELECT"), genlist, NULL);
+ } else {
+ Evas_Object *box = NULL;
+
+ box = elm_box_add(cd->main_window);
+ evas_object_size_hint_min_set(box, MSGC_RECIPIENT_POPUP_W * elm_scale_get(),
+ MSGC_RECIPIENT_POPUP_LIST_H * count * elm_scale_get());
+ evas_object_show(genlist);
+ elm_box_pack_end(box, genlist);
+ popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_SK_SELECT"), box, "min_menustyle");
+ }
+
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, _SYSSTR("IDS_COM_SK_CANCEL"));
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __change_number_popup_btn_clicked_cb, cd);
+
+ rd->popup_change_number = popup;
+
+ D_LEAVE;
+}
+
+RECIPIENT_ITEM_S *msg_ui_composer_recipient_selected_item_data_get(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer Data is NULL");
+
+ RECIPIENT_S *rd = cd->recipient;
+ D_MSG_RETVM_IF(rd == NULL, NULL, "Recipient Data is NULL");
+
+ RECIPIENT_ITEM_S *r_item = NULL;
+
+ r_item = rd->sel_r_item;
+ if (!r_item) {
+ D_EMSG("No data in Selected MBE item");
+ return NULL;
+ }
+
+ D_LEAVE;
+
+ return r_item;
+}
+
+void msg_ui_composer_recipient_selected_delete(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ 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 *mbe_item = NULL;
+ mbe_item = rd->sel_mbe_item;
+ if (!mbe_item) {
+ D_EMSG("There is no Selected MBE item");
+ return;
+ }
+
+ elm_object_item_del(mbe_item);
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_recipient_selected_edit(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ 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 *mbe_item = NULL;
+ Evas_Object *sc_entry = NULL;
+ const char *label_selected_bt = NULL;
+
+ mbe_item = rd->sel_mbe_item;
+ if (!mbe_item) {
+ D_EMSG("There is no Selected MBE item");
+ return;
+ }
+
+ label_selected_bt = elm_object_item_text_get(mbe_item);
+
+ sc_entry = elm_multibuttonentry_entry_get(rd->mbe);
+ elm_entry_entry_set(sc_entry, label_selected_bt);
+ elm_entry_cursor_line_end_set(sc_entry);
+
+ elm_object_item_del(mbe_item);
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ D_LEAVE;
+}
+
+static void __selected_popup_list_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ RECIPIENT_S *rd = cd->recipient;
+ D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL");
+
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ elm_list_item_selected_set(item, EINA_FALSE);
+
+ elm_multibuttonentry_item_selected_set(rd->sel_mbe_item, EINA_FALSE);
+
+ char *label = (char *)elm_object_item_text_get(item);
+
+ if (cd->isAppControl) {
+ if (!strcmp(label, _SYSSTR("IDS_COM_OPT_DELETE"))) {
+ msg_ui_composer_recipient_selected_delete(cd);
+ } else if (!strcmp(label,_SYSSTR("IDS_COM_BODY_EDIT"))) {
+ msg_ui_composer_recipient_selected_edit(cd);
+ } else {
+ D_EMSG("Invalid list type!!");
+ }
+ } else {
+ if (!strcmp(label, _SYSSTR("IDS_COM_OPT_DELETE"))) {
+ msg_ui_composer_recipient_selected_delete(cd);
+ } else if (!strcmp(label,_SYSSTR("IDS_COM_BODY_EDIT"))) {
+ msg_ui_composer_recipient_selected_edit(cd);
+ } else if (!strcmp(label, _MSGSTR("IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"))) {
+ __change_number_popup_create(cd);
+ } else if (!strcmp(label, _MSGSTR("IDS_MSGC_OPT_VIEW_CONTACT"))) {
+ RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
+ msg_ui_composer_launch_contact_detail_ug(cd, r_item->index);
+ /* temporarily, set focus to back_btn to resolve invalid focus tree issue */
+ elm_object_focus_set(cd->back_btn, EINA_TRUE);
+ } else if (!strcmp(label, _SYSSTR("IDS_COM_OPT_ADD_TO_CONTACTS"))) {
+ RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
+ msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, r_item->recipient);
+ /* temporarily, set focus to back_btn to resolve invalid focus tree issue */
+ elm_object_focus_set(cd->back_btn, EINA_TRUE);
+ } else {
+ D_EMSG("Invalid list type!!");
+ }
+ }
+
+ rd->sel_r_item = NULL;
+ rd->sel_mbe_item = NULL;
+ MSGC_EVAS_OBJECT_DEL(rd->popup_selected);
+
+ D_LEAVE;
+}
+
+static void __selected_popup_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;
+ RECIPIENT_S *rd = cd->recipient;
+
+ elm_multibuttonentry_item_selected_set(rd->sel_mbe_item, EINA_FALSE);
+ rd->sel_r_item = NULL;
+ rd->sel_mbe_item = NULL;
+ MSGC_EVAS_OBJECT_DEL(rd->popup_selected);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_recipient_select_popup_create(void *data)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(data == NULL, "data param is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ RECIPIENT_S *rd = cd->recipient;
+ D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+
+ Evas_Object *popup = NULL;
+ Evas_Object *list = NULL;
+ Evas_Object *btn1 = NULL;
+ RECIPIENT_ITEM_S *r_item = NULL;
+ char title_str[DEF_BUF_LEN + 1] = {0,};
+ char *markup_title_str = NULL;
+
+ r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
+ if (!r_item) {
+ D_EMSG("r_item is NULL");
+ return;
+ }
+
+ /*list */
+ list = elm_list_add(cd->main_window);
+ elm_list_mode_set(list, ELM_LIST_EXPAND);
+
+ elm_list_item_append(list, _SYSSTR("IDS_COM_OPT_DELETE"), NULL, NULL, __selected_popup_list_clicked_cb, cd);
+ elm_list_item_append(list, _SYSSTR("IDS_COM_BODY_EDIT"), NULL, NULL, __selected_popup_list_clicked_cb, cd);
+
+ if (cd->isAppControl) {
+ snprintf(title_str, sizeof(title_str), "%s", r_item->recipient);
+ } else {
+ if (r_item->index > 0) {
+ if (IsMultipleNumber(r_item->index)) {
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"), NULL, NULL, __selected_popup_list_clicked_cb, cd);
+ } else {
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __selected_popup_list_clicked_cb, cd);
+ }
+
+ if (r_item->display_name[0] != '\0')
+ snprintf(title_str, sizeof(title_str), "%s <%s>", r_item->display_name, r_item->recipient);
+ else
+ snprintf(title_str, sizeof(title_str), "%s", r_item->recipient);
+ } else {
+ elm_list_item_append(list, _SYSSTR("IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __selected_popup_list_clicked_cb, cd);
+ snprintf(title_str, sizeof(title_str), "%s", r_item->recipient);
+ }
+ }
+
+ elm_list_go(list);
+
+ markup_title_str = elm_entry_utf8_to_markup(title_str);
+ popup = msg_ui_composer_list_popup_create(data, markup_title_str, list, "min_menustyle");
+
+ if (markup_title_str)
+ g_free(markup_title_str);
+
+ btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, _SYSSTR("IDS_COM_BODY_CLOSE"));
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __selected_popup_btn_clicked_cb, cd);
+
+ rd->popup_selected = popup;
+
+ D_LEAVE;
+}
+
+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;
+ RECIPIENT_ITEM_S *r_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);
+ r_item = elm_object_item_data_get(mbe_item);
+ if (r_item) {
+ D_MSG("===== START of r_item free =====");
+ D_MSG("r_item index [%d]", r_item->index);
+ D_MSG("r_item recipient [%s]", r_item->recipient);
+ D_MSG("r_item display_name [%s]", r_item->display_name);
+ D_MSG("===== END of r_item free =====");
+ g_free(r_item);
}
mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
@@ -58,7 +496,9 @@ static Eina_Bool __move_to_scroll_end(void *data)
rd->scroll_down_idler = NULL;
- Evas_Coord scr_w, scr_h, box_h;
+ Evas_Coord scr_w;
+ Evas_Coord scr_h;
+ Evas_Coord box_h;
evas_render(evas_object_evas_get(rd->bx_main));
elm_scroller_region_get(rd->sc, NULL, NULL, &scr_w, &scr_h);
@@ -106,7 +546,8 @@ static void __mbe_contracted_cb(void *data, Evas_Object *obj, void *event_info)
static Evas_Object *__mbe_create(RECIPIENT_S *rd)
{
D_ENTER;
- Evas_Object *mbe, *entry;
+ Evas_Object *mbe;
+ Evas_Object *entry;
Ecore_IMF_Context *context;
char label_txt[TO_FIELD_LABEL_SIZE_MAX] = { 0, };
@@ -135,7 +576,7 @@ static Evas_Object *__mbe_create(RECIPIENT_S *rd)
/*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, "item,clicked", msg_ui_recipient_multibuttonentry_item_clicked_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);
@@ -153,6 +594,7 @@ static Evas_Object *__mbe_create(RECIPIENT_S *rd)
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);
+ ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)context, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, msg_ui_composer_entry_imf_resize_cb, rd->cd);
D_LEAVE;
return mbe;
@@ -178,13 +620,13 @@ 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) {
+ 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);
@@ -225,7 +667,8 @@ static Evas_Object *__msg_ui_composer_recipient_ly_bt_create(RECIPIENT_S *rd)
{
D_ENTER;
- Evas_Object *layout, *bt;
+ Evas_Object *layout;
+ Evas_Object *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);
@@ -259,8 +702,8 @@ static Evas_Object *__msg_ui_composer_recipient_ly_bt_create(RECIPIENT_S *rd)
static void __msg_ui_composer_recipient_layout_create(RECIPIENT_S *r)
{
D_ENTER;
- if(r->parent == NULL)
- return;
+ D_MSG_RETM_IF(r->parent == NULL, "r->parent is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)r->cd;
/*Create layout*/
Evas_Object *bx;
@@ -274,8 +717,12 @@ static void __msg_ui_composer_recipient_layout_create(RECIPIENT_S *r)
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);
+ if (!cd->isAppControl) {
+ r->ly_bt = __msg_ui_composer_recipient_ly_bt_create(r);
+ evas_object_hide(r->ly_bt);
+ }
+
+ evas_object_event_callback_add(r->bx_main, EVAS_CALLBACK_RESIZE, msg_ui_recipient_resize_cb, r);
D_LEAVE;
}
@@ -392,7 +839,8 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_duplicate_check(RECIPIENT_S *rd
RECIPIENT_ITEM_S *recipient_item;
Elm_Object_Item *mbe_item;
- COMPOSER_UTIL_ADDRTYPE_E inp_type, tmp_type;
+ COMPOSER_UTIL_ADDRTYPE_E inp_type;
+ COMPOSER_UTIL_ADDRTYPE_E tmp_type;
char inp_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX + 1] = { 0, };
char tmp_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX + 1] = { 0, };
@@ -438,7 +886,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_duplicate_check(RECIPIENT_S *rd
break;
}
} else {
- D_EMSG("Unknown type recipient");
+ D_EMSG("Unknown type recipient TODO check recipient");
}
}
@@ -475,6 +923,23 @@ int msg_ui_composer_recipient_count_get(RECIPIENT_S *rd)
return r_count;
}
+void msg_ui_composer_recipient_addr_type_set(RECIPIENT_S *rd, COMPOSER_RECP_ADDR_E type)
+{
+ D_ENTER;
+ D_MSG_RETM_IF(rd == NULL, "recipient data is NULL");
+
+ rd->type = type;
+}
+
+COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_addr_type_get(RECIPIENT_S *rd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(rd == NULL, COMPOSER_RECP_ADDR_NONE, "recipient data is NULL");
+ D_MSG("rd->type = [%d]", rd->type);
+
+ return rd->type;
+}
+
COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_type_get(const char *recipient)
{
int len = 0;
@@ -501,6 +966,11 @@ COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_type_get(const char *recipient)
ret = COMPOSER_RECP_ADDR_VALID_NUMBER;
}
+ } else if (type == COMPOSER_UTIL_ADDRTYPE_EMAIL) {
+ if (len <= COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX ) {
+
+ ret = COMPOSER_RECP_ADDR_VALID_EMAIL;
+ }
}
return ret;
@@ -536,6 +1006,16 @@ Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient)
D_PRINT("NUMBER type recipient Too Short [%d]", len);
return EINA_FALSE;
}
+ } else if (type == COMPOSER_UTIL_ADDRTYPE_EMAIL) {
+ if (len > COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX) {
+ D_PRINT("Email type recipient Too Long [%d]", len);
+ return EINA_FALSE;
+ }
+
+ if (len < COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MIN) {
+ D_PRINT("Email type recipient Too Short [%d]", len);
+ return EINA_FALSE;
+ }
} else {
D_PRINT("Unknown type recipient[%d]", type);
return EINA_FALSE;
@@ -545,10 +1025,68 @@ Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient)
return EINA_TRUE;
}
+Eina_Bool msg_ui_composer_recipient_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "composer data is NULL");
+
+ RECIPIENT_ITEM_S *recipient_item = NULL;
+ Elm_Object_Item *mbe_item = NULL;
+ Eina_Bool is_mms = EINA_FALSE;
+ COMPOSER_UTIL_ADDRTYPE_E addrtype;
+ RECIPIENT_S *rd = cd->recipient;
+
+ if (!cd) {
+ D_EMSG("cd is NULL");
+ return is_mms;
+ }
+
+ if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) {
+ if (rd->mode == 1) {
+ mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
+
+ while (mbe_item) {
+ recipient_item = elm_object_item_data_get(mbe_item);
+
+ if (recipient_item) {
+ addrtype = get_address_type(recipient_item->recipient);
+
+ if (addrtype == COMPOSER_UTIL_ADDRTYPE_EMAIL) {
+ is_mms = EINA_TRUE;
+ break;
+ }
+ }
+
+ mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
+ }
+ }
+ } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
+ Eina_List *list = NULL;
+ RECIPIENT_ITEM_S *r_item = NULL;
+
+ EINA_LIST_FOREACH(cd->recipient_list, list, r_item) {
+ if (r_item) {
+ addrtype = get_address_type(r_item->recipient);
+
+ if (addrtype == COMPOSER_UTIL_ADDRTYPE_EMAIL) {
+ is_mms = EINA_TRUE;
+ break;
+ }
+ }
+ }
+ } else {
+ D_EMSG("Invalid composer ug mode = %d", cd->msg_ug_mode);
+ }
+
+ D_LEAVE;
+ return is_mms;
+}
+
void msg_ui_composer_recipient_focus_set(RECIPIENT_S *rd)
{
D_ENTER;
- if (rd->mbe == NULL) return;
+ if (rd->mbe == NULL)
+ return;
elm_object_focus_set(rd->mbe, EINA_TRUE);
D_LEAVE;
@@ -558,7 +1096,7 @@ 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;
+ Elm_Object_Item *mbe_item;
Eina_List *invalid_list = NULL;
if (rd->mode == 1) {
@@ -580,7 +1118,13 @@ Eina_List *msg_ui_composer_recipient_invalid_recipient_list_get(RECIPIENT_S *rd)
mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
}
- } else {
+ } /*else if (rd->mode == 0) {
+ r_item = &cd->recipient_frame;
+ if (msg_ui_composer_recipient_vaild_check(r_item->recipient) == EINA_FALSE) {
+ invalid_list = eina_list_append(invalid_list,r_item);
+ }
+
+ } */else {
return NULL;
}
return invalid_list;
@@ -623,8 +1167,10 @@ RECIPIENT_S *msg_ui_composer_recipient_create(Evas_Object *p, int mode, void *da
RECIPIENT_S *rd;
rd = calloc(1, sizeof(RECIPIENT_S));
- if (rd == NULL)
+ if (rd == NULL) {
+ D_EMSG("calloc is failed");
return NULL;
+ }
rd->parent = p;
rd->cd = data;
@@ -649,6 +1195,11 @@ void msg_ui_composer_recipient_delete(RECIPIENT_S *rd)
rd->scroll_down_idler = NULL;
}
+ if (rd->notify_popup_idler) {
+ ecore_idler_del(rd->notify_popup_idler);
+ rd->notify_popup_idler = NULL;
+ }
+
MSGC_EVAS_OBJECT_DEL(rd->mbe);
MSGC_EVAS_OBJECT_DEL(rd->ly_to);
MSGC_EVAS_OBJECT_DEL(rd->ly_bt);
@@ -666,7 +1217,7 @@ void msg_ui_composer_recipient_clear(RECIPIENT_S *rd)
D_MSG_RETM_IF(rd->mbe == NULL, "Multibuttonentry is NULL");
RECIPIENT_ITEM_S *r_item;
- Elm_Object_Item * mbe_item;
+ Elm_Object_Item *mbe_item;
mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
while (mbe_item) {
@@ -692,7 +1243,7 @@ void msg_ui_composer_recipient_update(RECIPIENT_S *rd)
D_MSG_RETM_IF(rd->mbe == NULL, "Multibuttonentry is NULL");
RECIPIENT_ITEM_S *r_item;
- Elm_Object_Item * mbe_item;
+ Elm_Object_Item *mbe_item;
mbe_item = elm_multibuttonentry_first_item_get(rd->mbe);
while (mbe_item) {
@@ -748,6 +1299,7 @@ void msg_ui_composer_recipient_update(RECIPIENT_S *rd)
mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
}
+
D_LEAVE;
}
@@ -810,8 +1362,12 @@ 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");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)rd->cd;
- if(evas_object_visible_get(rd->ly_bt) == false) {
+ if (cd->isAppControl)
+ return;
+
+ 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 {
@@ -826,8 +1382,12 @@ 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");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)rd->cd;
+
+ if (cd->isAppControl)
+ return;
- if(evas_object_visible_get(rd->ly_bt) == true) {
+ 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 {
@@ -840,15 +1400,34 @@ void msg_ui_composer_bt_hide(RECIPIENT_S *rd)
COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_read_data(MSG_COMPOSER_VIEW_DATA_S *cd)
{
D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "cd is NULL");
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++;
+ Eina_List *recipient_list = cd->recipient_list;
+
+ if (recipient_list) {
+ int recipient_cnt = eina_list_count(recipient_list);
+ int i = 0;
+ RECIPIENT_ITEM_S *r_item = NULL;
+ D_MSG("recipient_cnt = %d", recipient_cnt);
+
+ for (i = 0; i < recipient_cnt; i++) {
+ r_item = (RECIPIENT_ITEM_S *)eina_list_nth(recipient_list, i);
+ if (r_item) {
+ D_MSG("r_item->recipient = %s", r_item->recipient);
+ if (msg_ui_composer_message_add_address(r_item->recipient) == COMPOSER_RETURN_SUCCESS)
+ r_count++;
+ } else {
+ D_EMSG("r_item is null");
+ }
+ }
+ } else {
+ D_EMSG("There is no recipient address");
+ }
} else {
r = cd->recipient;
if (!r)
@@ -859,37 +1438,93 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_read_data(MSG_COMPOSER_VIEW_DAT
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)
+ if (msg_ui_composer_message_add_address(r_item->recipient) == COMPOSER_RETURN_SUCCESS)
r_count++;
}
mbe_item = elm_multibuttonentry_item_next_get(mbe_item);
}
}
- if (r_count == 0 )
+ 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)
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, msg_thread_id_t thread_id)
{
D_ENTER;
- RECIPIENT_ITEM_S *recipient_item;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "param is NULL");
- if (!cd) return COMPOSER_RETURN_FAIL;
+ /* set recipient list for bubble composer */
+ msg_struct_list_s addrList;
+ int i = 0;
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
- recipient_item = &cd->recipient_frame;
+ if (msg_get_address_list(cd->msg_handle, thread_id, &addrList) != COMPOSER_RETURN_SUCCESS)
+ return COMPOSER_RETURN_FAIL;
- bzero(recipient_item->recipient, sizeof(recipient_item->recipient));
- snprintf(recipient_item->recipient, sizeof(recipient_item->recipient)-1, "%s", recipient);
+ char address[MAX_ADDRESS_VAL_LEN + 1] = {0,};
+ int address_len = sizeof(address);
- D_MSG("recipient_item->recipient = %s", recipient_item->recipient);
+ for (i = 0; i < addrList.nCount; i++) {
+ memset(&address, 0, address_len);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, address, address_len);
+ if (msg_ui_composer_recipient_add_recipient_list(cd, address) != COMPOSER_RETURN_SUCCESS) {
+ msg_release_list_struct(&addrList);
+ return COMPOSER_RETURN_FAIL;
+ }
+ }
+ msg_release_list_struct(&addrList);
D_LEAVE;
return COMPOSER_RETURN_SUCCESS;
}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_add_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, const char *recipient)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "param is NULL");
+ D_MSG_RETVM_IF(recipient == NULL, COMPOSER_RETURN_FAIL, "param is NULL");
+ D_MSG_RETVM_IF(!strlen(recipient), COMPOSER_RETURN_FAIL, "strlen(recipient) is 0");
+
+ RECIPIENT_ITEM_S *r_item = NULL;
+
+ r_item = (RECIPIENT_ITEM_S *)calloc(1, sizeof(RECIPIENT_ITEM_S));
+ if (!r_item) {
+ D_EMSG("calloc is failed");
+ return COMPOSER_RETURN_FAIL;
+ }
+ strncpy(r_item->recipient, recipient, sizeof(r_item->recipient)-1);
+
+ cd->recipient_list = eina_list_append(cd->recipient_list, r_item);
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_clear_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "param is NULL");
+ D_MSG_RETVM_IF(cd->recipient_list == NULL, COMPOSER_RETURN_FAIL, "cd->recipient_list is NULL");
+
+ RECIPIENT_ITEM_S *r_item = NULL;
+ D_MSG("recipient_cnt = %d", eina_list_count(cd->recipient_list));
+
+ EINA_LIST_FREE(cd->recipient_list, r_item) {
+ if (r_item)
+ g_free(r_item);
+ else
+ D_EMSG("r_item is null");
+ }
+
+ cd->recipient_list = NULL;
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
diff --git a/composer/src/ui-composer/msg-ui-composer-subject.c b/composer/src/ui-composer/msg-ui-composer-subject.c
new file mode 100755
index 0000000..c926c31
--- /dev/null
+++ b/composer/src/ui-composer/msg-ui-composer-subject.c
@@ -0,0 +1,433 @@
+/*
+ * 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 <Elementary.h>
+#include "msg-ui-composer-subject.h"
+#include "msg-ui-composer-recipient.h"
+#include "msg-ui-composer-util.h"
+#include "msg-ui-composer-common.h"
+#include "msg-ui-composer-message.h"
+#include "msg-ui-composer-body.h"
+#include "msg-ui-composer-popup.h"
+#include "msg-ui-composer-attachment.h"
+
+/* defines*/
+#define MSGC_SUBJECT_CHAR_MAX 40
+#define MSGC_SUBJECT_BYTE_MAX 0
+
+/* function definitions*/
+static void __msg_composer_subject_guidetext_show(SUBJECT_S *sd)
+{
+ D_MSG_RETM_IF(sd == NULL, "Subject Data is Invalid");
+ D_MSG_RETM_IF(sd->layout== NULL, "Subject Layout is Invalid");
+ D_MSG("Subject Guide Text Show");
+
+ edje_object_part_text_set(_EDJ(sd->layout), "subject.guidetxt", MSGC_STR_SUBJECT);
+}
+
+static void __msg_composer_subject_guidetext_hide(SUBJECT_S *sd)
+{
+ D_MSG_RETM_IF(sd == NULL, "Subject Data is Invalid");
+ D_MSG_RETM_IF(sd->layout== NULL, "Subject Layout is Invalid");
+ D_MSG("Subject Guide Text Hide");
+
+ edje_object_part_text_set(_EDJ(sd->layout), "subject.guidetxt", "");
+}
+
+static void __msg_composer_subject_entry_press_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 Invalid");
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ elm_entry_context_menu_disabled_set(obj, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(obj, EINA_TRUE);
+ } else {
+ elm_entry_context_menu_disabled_set(obj, EINA_FALSE);
+ elm_entry_magnifier_disabled_set(obj, EINA_FALSE);
+ }
+
+ D_LEAVE;
+}
+
+static void __msg_composer_subject_entry_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 Invalid");
+
+ int attach_count = msg_ui_composer_get_attach_count(cd);
+
+ if (attach_count > 1)
+ msg_ui_composer_contract_attach_list(cd);
+
+ D_LEAVE;
+}
+
+static void __msg_composer_subject_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ char *subject = NULL;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+
+ if (cd->sub_data.entry) {
+ subject = elm_entry_markup_to_utf8(elm_entry_entry_get(cd->sub_data.entry));
+
+ if (subject) {
+ if ((elm_object_focus_get(cd->sub_data.entry) == EINA_FALSE) && (strlen(subject) == 0)) {
+ __msg_composer_subject_guidetext_show(&cd->sub_data);
+ } else {
+ __msg_composer_subject_guidetext_hide(&cd->sub_data);
+ }
+
+ g_free(subject);
+ }
+ }
+
+ if (msg_ui_composer_common_is_send_possible(cd)) {
+ elm_object_disabled_set(cd->send_button, EINA_FALSE);
+ msg_ui_composer_body_info_area_update(cd);
+ } else {
+ elm_object_disabled_set(cd->send_button, EINA_TRUE);
+ edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");// remove character count
+ }
+
+ D_LEAVE;
+}
+
+static void __msg_composer_subject_entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ D_MSG("FOCUS GET = %d", elm_object_focus_get(obj));
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ /* if focused_cb is called twice becuase of double click, move focus to popup */
+ if (msg_ui_composer_popup_exist(cd))
+ msg_ui_composer_popup_focus(cd);
+
+ return;
+ }
+
+ /* change body scroller size */
+ int keypad_h = msg_ui_composer_get_keypad_height(obj);
+ msg_ui_composer_change_body_scroll_size(cd, keypad_h);
+
+ __msg_composer_subject_guidetext_hide(&cd->sub_data);
+ msg_ui_composer_last_focused_entry_set(data, cd->sub_data.entry);
+
+ /* show delete button */
+ edje_object_signal_emit(_EDJ(cd->sub_data.layout), "show.delete", "*");
+
+ D_LEAVE;
+}
+
+static void __msg_composer_subject_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ char *subject = NULL;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG("FOCUS GET = %d", elm_object_focus_get(obj));
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid");
+
+ if (cd->sub_data.entry) {
+ subject = elm_entry_markup_to_utf8(elm_entry_entry_get(cd->sub_data.entry));
+
+ if (subject) {
+ if ((elm_object_focus_get(cd->sub_data.entry) == EINA_FALSE) && (strlen(subject) == 0)) {
+ __msg_composer_subject_guidetext_show(&cd->sub_data);
+ } else {
+ __msg_composer_subject_guidetext_hide(&cd->sub_data);
+ }
+
+ g_free(subject);
+ }
+ }
+ /* hide delete button */
+ edje_object_signal_emit(_EDJ(cd->sub_data.layout), "hide.delete", "*");
+
+ D_LEAVE;
+}
+
+static void __msg_ui_composer_subject_delete_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 Invalid");
+
+ msg_ui_composer_remove_subject_layout(cd);
+
+ if (!msg_ui_composer_common_is_send_possible(cd)) {
+ elm_object_disabled_set(cd->send_button, EINA_TRUE);
+ edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");/* remove character count*/
+ 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) {
+ if (entry == cd->recipient->mbe) {/* if last focused widget is recipient multibutton entry*/
+ entry = elm_multibuttonentry_entry_get(cd->recipient->mbe);
+ }
+ }
+ }
+ }
+ } else {
+ elm_object_disabled_set(cd->send_button, EINA_FALSE);
+ msg_ui_composer_body_info_area_update(cd);
+ }
+
+ cd->isSubject = false;
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ msg_ui_composer_message_type_check_and_change(cd);
+ } else {
+ /* focus change to the first page of message body*/
+ MSG_COMPOSER_BODY_PAGE_S *first_page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(cd->body_data.page_list, 0);
+
+ if (first_page_data) {
+ if (!elm_object_focus_get(first_page_data->entry)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] ENTRY FOCUS CHANGE");
+ msg_ui_composer_last_focused_entry_set(cd, first_page_data->entry);
+ cd->current_edit_entry = 0;
+ msg_ui_composer_last_focus_load(cd);
+ }
+ }
+
+ msg_ui_composer_message_type_check_and_change(cd);
+ }
+
+ D_LEAVE;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_read_subject(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ const char *entry_text = NULL;
+ char *body_text = NULL;
+ int body_length = 0;
+
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is Invalid");
+ D_MSG_RETVM_IF(cd->isSubject == false, COMPOSER_RETURN_FAIL, "Subject is NOT Exist");
+ D_MSG_RETVM_IF(cd->sub_data.entry == NULL, COMPOSER_RETURN_FAIL, "Subject Entry is NOT Exist");
+
+ entry_text = elm_entry_entry_get(cd->sub_data.entry);
+ if (entry_text) {
+ body_text = elm_entry_markup_to_utf8(entry_text);
+
+ if (body_text) {
+
+ body_length = strlen(body_text);
+ if (body_length > 0) {
+ msg_ui_composer_message_set_subject(body_text, body_length);
+ } else {
+ D_MSG("Subject Text is Empty");
+ }
+
+ g_free(body_text);
+ }
+
+ } else {
+ D_MSG("Subject Text is Empty");
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_remove_subject_layout(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "Composer Data is Invalid");
+
+ if (cd->isSubject) {
+ if (cd->sub_data.entry) {
+ Evas_Object *last_entry = msg_ui_composer_last_focused_entry_get(cd);
+ if (last_entry && (last_entry == cd->sub_data.entry)) {
+ msg_ui_composer_last_focused_entry_set(cd, NULL);
+ }
+
+ evas_object_smart_callback_del(cd->sub_data.entry, "changed", __msg_composer_subject_entry_changed_cb);
+ evas_object_smart_callback_del(cd->sub_data.entry, "preedit,changed", __msg_composer_subject_entry_changed_cb);
+ evas_object_smart_callback_del(cd->sub_data.entry, "focused", __msg_composer_subject_entry_focused_cb);
+ evas_object_smart_callback_del(cd->sub_data.entry, "unfocused", __msg_composer_subject_entry_unfocused_cb);
+
+ evas_object_del(cd->sub_data.entry);
+ cd->sub_data.entry = NULL;
+ }
+
+ if (cd->sub_data.layout) {
+ evas_object_del(cd->sub_data.layout);
+ cd->sub_data.layout = NULL;
+ }
+ }
+
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_clear(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ return msg_ui_composer_remove_subject_layout(cd);
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_set_loaded_data(void *data, const char *subject)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "Composer Data is Invalid");
+
+ if (!cd->isSubject && subject && strlen(subject) > 0) {
+ cd->isSubject = true;
+ if (msg_ui_composer_add_subject(cd) != COMPOSER_RETURN_SUCCESS) {
+ return COMPOSER_RETURN_FAIL;
+ }
+ }
+
+ if (cd->sub_data.entry) {
+ elm_entry_entry_set(cd->sub_data.entry, subject);
+ }
+ D_LEAVE;
+ return COMPOSER_RETURN_SUCCESS;
+}
+
+Evas_Object *msg_ui_composer_create_subject_entry(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ Evas_Object *entry = NULL;
+ Ecore_IMF_Context *entry_ctx = NULL;
+ static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer Data is Invalid");
+ D_MSG_RETVM_IF(parent == NULL, NULL, "Parent Layout is Invalid");
+
+ entry = elm_entry_add(parent);
+ D_MSG_RETVM_IF(entry == NULL, NULL, "Fail to Create Entry");
+
+ elm_entry_scrollable_set(entry, EINA_TRUE);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+ evas_object_size_hint_weight_set(entry, 0.0, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(entry, 0.0, EVAS_HINT_FILL);
+ /* fix font size */
+ elm_entry_text_style_user_push(entry, "DEFAULT='font_size=32'");
+
+ evas_object_show(entry);
+
+ /* add entry filter for changing text to UTF8 if it is markups */
+ limit_filter_data.max_char_count = MSGC_SUBJECT_CHAR_MAX;
+ limit_filter_data.max_byte_count = MSGC_SUBJECT_BYTE_MAX;
+ elm_entry_markup_filter_append(entry, msg_composer_entry_filter_remove_markup, cd);
+ elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
+
+ evas_object_smart_callback_add(entry, "changed", __msg_composer_subject_entry_changed_cb, cd);
+ evas_object_smart_callback_add(entry, "preedit,changed", __msg_composer_subject_entry_changed_cb, cd);
+ evas_object_smart_callback_add(entry, "focused", __msg_composer_subject_entry_focused_cb, cd);
+ evas_object_smart_callback_add(entry, "unfocused", __msg_composer_subject_entry_unfocused_cb, cd);
+ evas_object_smart_callback_add(entry, "press", __msg_composer_subject_entry_press_cb, cd);
+ evas_object_smart_callback_add(entry, "clicked", __msg_composer_subject_entry_clicked_cb, cd);
+
+ 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);
+ ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)entry_ctx, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, msg_ui_composer_entry_imf_resize_cb, cd);
+
+ cd->sub_data.entry = entry;
+
+ D_LEAVE;
+ return entry;
+}
+
+Evas_Object *msg_ui_composer_create_subject_layout(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+
+ Evas_Object *layout = NULL;
+ Evas_Object *entry = NULL;
+ Evas_Object *del_icon = NULL;
+
+ D_MSG_RETVM_IF(cd == NULL, NULL, "Composer Data is Invalid");
+ D_MSG_RETVM_IF(parent == NULL, NULL, "Parent Layout is Invalid");
+
+ layout = elm_layout_add(parent);
+ elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_SUBJECT_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);
+
+ /* add entry */
+ entry = msg_ui_composer_create_subject_entry(layout, cd);
+ D_MSG_RETVM_IF(entry == NULL, NULL, "Fail to Create Subject Entry");
+
+ elm_object_part_content_set(layout, "subject.swl.entry", entry);
+
+ /* add guide text */
+ edje_object_part_text_set(_EDJ(layout), "subject.guidetxt", MSGC_STR_SUBJECT);
+
+ /* create del_button */
+ del_icon = elm_icon_add(parent);
+ elm_icon_file_set(del_icon, MSGC_IMG_SUBJECT_DEL_ICON, NULL);
+ evas_object_size_hint_weight_set(del_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(del_icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_focus_allow_set(del_icon, EINA_TRUE);
+
+ evas_object_data_set(del_icon, "layout", layout);
+ elm_object_part_content_set(layout, "subject.swl.del_button", del_icon);
+
+ evas_object_smart_callback_add(del_icon, "clicked", __msg_ui_composer_subject_delete_clicked_cb, cd);
+
+ cd->sub_data.layout = layout;
+ cd->sub_data.del_icon = del_icon;
+
+ evas_object_show(layout);
+
+ D_LEAVE;
+ return layout;
+}
+
+COMPOSER_RETURN_TYPE_E msg_ui_composer_add_subject(MSG_COMPOSER_VIEW_DATA_S *cd)
+{
+ D_ENTER;
+ Evas_Object *sub_layout = NULL;
+ D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is Invalid");
+
+ sub_layout = msg_ui_composer_create_subject_layout(cd->ly_body, cd);
+ D_MSG_RETVM_IF(sub_layout == NULL, COMPOSER_RETURN_FAIL, "Fail to Create Subject Layout");
+
+ /* subject layout is packed on the body main box */
+ if (cd->body_box)
+ elm_box_pack_start(cd->body_box, sub_layout);
+
+ cd->isSubject = true;
+
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ if (!cd->isLoad) {
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK);
+ } else {
+ /* if added recipient is not invalid number, change entry focus to the subject */
+ msg_ui_composer_last_focused_entry_set(cd, cd->sub_data.entry);
+ msg_ui_composer_last_focus_load(cd);
+ }
+ }
+
+ 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
index 38e9142..b4f1d85 100755
--- a/composer/src/util/msg-ui-composer-util.c
+++ b/composer/src/util/msg-ui-composer-util.c
@@ -14,9 +14,10 @@
* limitations under the License.
*/
-#include <contacts-svc.h>
-#include <MsgSettingTypes.h>
+#include <contacts-svc.h>
+#include <mm_util_imgp.h>
+#include <mm_util_jpeg.h>
#include "msg-ui-composer-data.h"
#include "msg-ui-composer-util.h"
#include "msg-ui-composer-message.h"
@@ -32,7 +33,6 @@
COMPOSER_UTIL_ADDRTYPE_E get_address_type(const char *address)
{
-
COMPOSER_UTIL_ADDRTYPE_E addrtype = COMPOSER_UTIL_ADDRTYPE_INVALID;
if (!address) {
@@ -53,7 +53,6 @@ COMPOSER_UTIL_ADDRTYPE_E get_address_type(const char *address)
return addrtype;
}
-
int get_contact_index_by_recipient(const char *phone_number)
{
int index;
@@ -82,16 +81,13 @@ int get_contact_display_name_by_index(int index, char *dest, int dest_size)
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));
+
+ 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("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;
- }
+ D_EMSG("display name is NULL");
+ return COMPOSER_RETURN_FAIL;
}
if (display) {
@@ -174,6 +170,7 @@ int get_contact_default_recipient_by_index(int index, char *dest, int dest_size)
}
return ret;
}
+
char *make_display_name(const char *first, const char *last)
{
char *ret_val = NULL;
@@ -301,6 +298,7 @@ Eina_Bool IsMultipleNumber(int index)
return EINA_FALSE;
}
+
Eina_Bool IsValidNumber(const char *address)
{
D_ENTER;
@@ -468,6 +466,227 @@ int remove_space(const char *src, char *dest, int dest_size)
return d_pos;
}
+int jpeg_image_get_resolution(const char *src_file_path, unsigned int *dst_w, unsigned int *dst_h)
+{
+ D_ENTER;
+
+ int ret = 0;
+ char temp_src_file_path[DEF_BUF_LEN_L] = {0,};
+ mm_util_jpeg_yuv_format jy_fmt = MM_UTIL_JPEG_FMT_RGB888;
+
+ mm_util_jpeg_yuv_data decoded = {0,};
+
+ D_MSG_RETVM_IF(ecore_file_exists(src_file_path) == EINA_FALSE, COMPOSER_UTIL_ERR, "There is not exist src file path = %s", src_file_path);
+ D_MSG_RETVM_IF((dst_w == NULL || dst_h == NULL), COMPOSER_UTIL_ERR, "Parameter is Invalid dst_w = %p, dst_h = %p", dst_w, dst_h);
+
+ strncpy(temp_src_file_path, src_file_path, sizeof(temp_src_file_path)-1);
+
+ /*decode jpeg file*/
+ ret = mm_util_decode_from_jpeg_file(&decoded, temp_src_file_path, jy_fmt);
+ if (ret) {
+ D_EMSG("mm_util_decode_from_jpeg_file ret = %d", ret);
+ return COMPOSER_UTIL_ERR;
+ }
+
+ D_MSG("Image Resolution is (%d x %d)", decoded.width, decoded.height);
+
+ *dst_w = decoded.width;
+ *dst_h = decoded.height;
+
+ if (decoded.data != NULL)
+ free(decoded.data);
+
+ D_LEAVE;
+ return COMPOSER_UTIL_ERR_NONE;
+}
+
+int jpeg_image_resize(const char *src_file_path, unsigned int dst_w, unsigned int dst_h, const char *dst_file_path)
+{
+ D_ENTER;
+ int ret = 0;
+ unsigned int dst_size;
+ unsigned char *dst = NULL;
+ char temp_src_file_path[DEF_BUF_LEN_L] = {0,};
+ char temp_dst_file_path[DEF_BUF_LEN_L] = {0,};
+
+ mm_util_jpeg_yuv_format jy_fmt = MM_UTIL_JPEG_FMT_RGB888;
+ mm_util_img_format i_fmt = MM_UTIL_IMG_FMT_RGB888;
+ mm_util_jpeg_yuv_data decoded = {0,};
+
+ if (ecore_file_exists(src_file_path) == EINA_FALSE) {
+ D_EMSG("There is not exist src file path = %s", src_file_path);
+ return COMPOSER_UTIL_ERR;
+ }
+ strncpy(temp_src_file_path, src_file_path, sizeof(temp_src_file_path)-1);
+
+ if (!dst_file_path) {
+ D_EMSG("There is not exist dst file path = %s", dst_file_path);
+ return COMPOSER_UTIL_ERR;
+ }
+ strncpy(temp_dst_file_path, dst_file_path, sizeof(temp_dst_file_path)-1);
+
+ if (dst_w <= 0 || dst_h <= 0) {
+ D_EMSG("There is not valid dst width = %d, height = %d", dst_w, dst_h);
+ return COMPOSER_UTIL_ERR;
+ }
+
+ /*decode jpeg file*/
+ ret = mm_util_decode_from_jpeg_file(&decoded, temp_src_file_path, jy_fmt);
+ if (ret) {
+ D_EMSG("mm_util_decode_from_jpeg_file ret = %d", ret);
+ return COMPOSER_UTIL_ERR;
+ }
+
+ /*get size about resize img*/
+ ret = mm_util_get_image_size(i_fmt, dst_w, dst_h, &dst_size);
+ if (ret) {
+ D_EMSG("mm_util_get_image_size ret = %d", ret);
+ goto err_return;
+ }
+
+ if (dst_size > 0) {
+ D_MSG("dst_size = %d", dst_size);
+ dst = calloc(1, dst_size);
+ if (dst == NULL) {
+ D_EMSG("fail of memory allocation size = %d", dst_size);
+ goto err_return;
+ }
+
+ } else {
+ D_EMSG("no data size = %d", dst_size);
+ goto err_return;
+ }
+
+ /* resize image */
+ D_MSG("[resize image] src = %s(%d x %d)->(%d x %d)", temp_src_file_path, decoded.width, decoded.height, dst_w, dst_h);
+ ret = mm_util_resize_image(decoded.data, (unsigned int)decoded.width, (unsigned int)decoded.height,
+ i_fmt, dst, &dst_w,&dst_h);
+ if (ret) {
+ D_EMSG("mm_util_resize_image ret = %d", ret);
+ goto err_return;
+ }
+
+
+ /*save image to dst file path*/
+ ret = mm_util_jpeg_encode_to_file(temp_dst_file_path, dst, dst_w, dst_h, jy_fmt, 100);
+ if (ret) {
+ D_EMSG("Fail mm_util_jpeg_encode_to_file ret = %d", ret);
+ goto err_return;
+ }
+
+ if (dst)
+ g_free(dst);
+
+ if (decoded.data != NULL)
+ free(decoded.data);
+
+ D_LEAVE;
+ return COMPOSER_UTIL_ERR_NONE;
+
+err_return:
+ if (dst)
+ g_free(dst);
+
+ if (decoded.data != NULL)
+ free(decoded.data);
+
+ return COMPOSER_UTIL_ERR;
+}
+
+int jpeg_image_quality_set(const char *src_file_path, int quality, const char *dst_file_path)
+{
+ D_ENTER;
+ int ret = 0;
+ char temp_src_file_path[DEF_BUF_LEN_L] = {0,};
+ char temp_dst_file_path[DEF_BUF_LEN_L] = {0,};
+
+ mm_util_jpeg_yuv_format jy_fmt = MM_UTIL_JPEG_FMT_RGB888;
+ mm_util_jpeg_yuv_data decoded = {0,};
+
+ if (ecore_file_exists(src_file_path) == EINA_FALSE) {
+ D_EMSG("There is not exist src file path = %s", src_file_path);
+ return COMPOSER_UTIL_ERR;
+ }
+ strncpy(temp_src_file_path, src_file_path, sizeof(temp_src_file_path)-1);
+
+ if (!dst_file_path) {
+ D_EMSG("There is not exist dst file path = %s", dst_file_path);
+ return COMPOSER_UTIL_ERR;
+ }
+ strncpy(temp_dst_file_path, dst_file_path, sizeof(temp_dst_file_path)-1);
+
+ if (quality > 100 || quality < 1) {
+ D_EMSG("Invalid quality ! it should 0 < quality <= 100", dst_file_path);
+ return COMPOSER_UTIL_ERR;
+ }
+
+ /*decode jpeg file*/
+ ret = mm_util_decode_from_jpeg_file(&decoded, temp_src_file_path, jy_fmt);
+ if (ret) {
+ D_EMSG("mm_util_decode_from_jpeg_file ret = %d", ret);
+ return COMPOSER_UTIL_ERR;
+ }
+
+ /*set quality save image to dst file path*/
+ ret = mm_util_jpeg_encode_to_file(temp_dst_file_path, decoded.data, decoded.width, decoded.height, jy_fmt, quality);
+ if (ret) {
+ D_EMSG("Fail mm_util_jpeg_encode_to_file ret = %d", ret);
+ goto err_return;
+ }
+
+ if (decoded.data != NULL)
+ free(decoded.data);
+
+ D_LEAVE;
+ return COMPOSER_UTIL_ERR_NONE;
+
+err_return:
+
+ if (decoded.data != NULL)
+ free(decoded.data);
+
+ return COMPOSER_UTIL_ERR;
+
+}
+
+bool msg_composer_util_is_allow_creation_mode(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type)
+{
+ D_ENTER;
+ D_MSG_RETVM_IF(file_path == NULL , false, "Input parameter file_path is Invalid");
+
+ char *ext = msg_common_get_file_ext(file_path);
+ unsigned int dst_w = 0 , dst_h = 0;
+
+ if (media_type == COMPOSER_MEDIA_TYPE_IMAGE) {
+ if ((strcasecmp(ext, "jpg") != 0) && (strcasecmp(ext, "jpeg") != 0)
+ && (strcasecmp(ext, "gif") != 0) && (strcasecmp(ext, "wbmp") != 0)
+ && (strcasecmp(ext, "png") != 0)) {
+ return false;
+ } else {
+ /* Check High resoluton*/
+ jpeg_image_get_resolution(file_path, &dst_w, &dst_h);
+ if(dst_w > MSG_CREATION_MODE_LARGE_IMG_WIDTH || dst_h > MSG_CREATION_MODE_LARGE_IMG_HEIGHT) {
+ return false;
+ }
+ }
+
+ } else if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) {
+ if ((strcasecmp(ext, "3gp") != 0) && (strcasecmp(ext, "3g2") != 0) &&
+ (strcasecmp(ext, "mp4") != 0) &&(strcasecmp(ext, "mpeg4") != 0) ){
+ return false;
+ }
+ } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) {
+ if ((strcasecmp(ext, "amr") != 0) && (strcasecmp(ext, "mid") != 0) && (strcasecmp(ext, "midi") != 0))
+ return false;
+
+ } else {
+ D_MSG("It check only Image, Video, Audio type, media_type[%d] is not need to check", media_type);
+ }
+
+ D_LEAVE;
+ return true;
+}
+
const char *search_markup_keyword(const char *string, char *searchword,
bool *result)
{
@@ -528,7 +747,7 @@ const char *search_markup_keyword(const char *string, char *searchword,
return return_string;
}
-bool is_web_uri(const char* uri)
+bool is_web_uri(const char *uri)
{
D_MSG_RETVM_IF(uri == NULL, false, "uri is NULL");
@@ -553,7 +772,8 @@ bool is_web_uri(const char* uri)
D_MSG("Not web uri. %s", uri);
return false;
}
-void print_sc_geo(Evas_Object * obj, char * name)
+
+void print_sc_geo(Evas_Object *obj, char *name)
{
Evas_Coord x,y,w,h;
@@ -563,12 +783,21 @@ void print_sc_geo(Evas_Object * obj, char * name)
}
-void print_geo(Evas_Object * obj, char * name)
+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);
+}
+
+void print_edje_geo(Evas_Object *obj, char *name)
+{
+ Evas_Coord x,y,w,h;
+ if (!obj) return;
+ edje_object_part_geometry_get(_EDJ(obj), name, &x, &y, &w,&h);
+ D_PRINT("[EDJ_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
index a4d04fb..fe29b8f 100755
--- a/composer/src/util/msg-ui-composer-util.h
+++ b/composer/src/util/msg-ui-composer-util.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __MSG_COMPOSER_UTIL_H__
#define __MSG_COMPOSER_UTIL_H__
#include "msg-ui-composer-data.h"
@@ -68,11 +69,16 @@ 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);
+int jpeg_image_resize(const char *src_file_path, unsigned int dst_w, unsigned int dst_h, const char *dst_file_path);
+int jpeg_image_quality_set(const char *src_file_path, int quality, const char *dst_file_path);
+int jpeg_image_get_resolution(const char *src_file_path, unsigned int *dst_w, unsigned int *dst_h);
const char *search_markup_keyword(const char *string, char *searchword, bool *result);
-bool is_web_uri(const char* uri);
+bool is_web_uri(const char *uri);
-void print_geo(Evas_Object * obj, char * name);
-void print_sc_geo(Evas_Object * obj, char * name);
+void print_geo(Evas_Object *obj, char *name);
+void print_sc_geo(Evas_Object *obj, char *name);
+void print_edje_geo(Evas_Object *obj, char *name);
+bool msg_composer_util_is_allow_creation_mode(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type);
#endif /*__MSG_COMPOSER_UTIL_H__*/
diff --git a/debian/changelog b/debian/changelog
index 34115a9..9367a96 100644..100755
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,7 @@
-message (0.8.2-20) unstable; urgency=low
+message (0.8.2-37) unstable; urgency=low
* Git: slp/pkgs/m/message-app
- * Tag: message_0.8.2-20
+ * Tag: message_0.8.2-37
- -- Jaeyun Jeong <jyjeong@samsung.com> Mon, 16 Apr 2012 19:26:38 +0900
+ -- Jaeyun Jeong <jyjeong@samsung.com> Mon, 04 Jun 2012 19:00:27 +0900
diff --git a/debian/control b/debian/control
index 87d24d0..0fae198 100755
--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@ 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
+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, libaul-1-dev, libug-contacts-dev, drm-client-dev, drm-trusted-dev, libicu-dev, libmm-common-dev, libmm-player-dev, libmm-utility-dev, libmm-session-dev, libmm-fileinfo-dev, libmm-player-internal-dev, libappsvc-dev, libdevman-haptic-dev, libheynoti-dev, capi-appfw-application-dev, syspopup-caller-dev
Standards-Version: 3.7.2
Homepage:
diff --git a/debian/org.tizen.message.install.in b/debian/org.tizen.message.install.in
index d939590..67b6d4c 100755
--- a/debian/org.tizen.message.install.in
+++ b/debian/org.tizen.message.install.in
@@ -6,4 +6,5 @@
@PREFIX@/data
@PREFIX@/lib/*
/opt/share/applications/*
+/opt/share/icons/*
/opt/ug/lib/*
diff --git a/debian/org.tizen.message.postinst.in b/debian/org.tizen.message.postinst.in
index 2b96d78..38fa0a8 100755
--- a/debian/org.tizen.message.postinst.in
+++ b/debian/org.tizen.message.postinst.in
@@ -5,4 +5,5 @@ if [ "`id -u`" = "0" ]
then
#5000 is inhouse user id
chown -R 5000:5000 @DATADIR@
+ /usr/bin/vconftool set -t int db/private/org.tizen.message/font_size 0 -u 5000
fi
diff --git a/debian/rules b/debian/rules
index 686d100..9fead62 100755
--- a/debian/rules
+++ b/debian/rules
@@ -56,19 +56,20 @@ clean:
# 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 -rf CMakeFiles main/CMakeFiles composer/CMakeFiles setting/CMakeFiles viewer/CMakeFiles class0/CMakeFiles dialog/CMakeFiles common/CMakeFiles
+ rm -f cmake_install.cmake main/cmake_install.cmake composer/cmake_install.cmake setting/cmake_install.cmake viewer/cmake_install.cmake class0/cmake_install.cmake dialog/cmake_install.cmake common/cmake_install.cmake
+ rm -f Makefile main/Makefile composer/Makefile setting/Makefile viewer/Makefile class0/Makefile dialog/Makefile common/Makefile
+ rm -f install_manifest.txt main/install_manifest.txt composer/install_manifest.txt setting/install_manifest.txt class0/install_manifest.txt dialog/install_manifest.txt viewer/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 *.so composer/*.so setting/*.so viewer/*.so common/*.so
+ rm -f *.edj thread/theme/*.edj composer/data/composer_edc/*.edj bubble/theme/*.edj setting/theme/*.edj viewer/theme/*.edj common/data/*.edj
rm -f main/*.desktop
+ rm -f class0/*.desktop
for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
rm -f $${f%.in}; \
@@ -110,7 +111,7 @@ binary-arch: build install
# dh_installinfo
dh_installman
dh_link
- dh_strip --dbg-package=org.tizen.message-dbg
+ dh_strip --dbg-package=org.tizen.message-dbg
dh_compress
dh_fixperms
# dh_perl
diff --git a/dialog/CMakeLists.txt b/dialog/CMakeLists.txt
index 729e326..5cf4fe1 100755
--- a/dialog/CMakeLists.txt
+++ b/dialog/CMakeLists.txt
@@ -15,6 +15,9 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_COMMON_DIR}
/usr/include/msg-service/
)
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED elementary aul dlog capi-appfw-application)
+
FOREACH(flag ${pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
ENDFOREACH(flag)
diff --git a/dialog/message-dialog.c b/dialog/message-dialog.c
index b126417..94f7759 100755
--- a/dialog/message-dialog.c
+++ b/dialog/message-dialog.c
@@ -14,13 +14,14 @@
* limitations under the License.
*/
-#include "message-dialog.h"
-#include "app_service.h"
+#include "message-dialog.h"
+#include "aul.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_rotate(app_device_orientation_e orientation, 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);
@@ -62,41 +63,13 @@ static void __msg_ui_dialog_always_ask_left_btn_cb(void *data, Evas_Object *obj,
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;
- }
+ int ret = -1;
- 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;
+ ret = aul_open_content(ad->url);
+ if (ret < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret);
}
- 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);
}
@@ -148,6 +121,40 @@ static int __msg_ui_dialog_create_always_ask_popup(void *data)
return MSG_UI_RET_SUCCESS;
}
+static void __msg_ui_dialog_rotate(app_device_orientation_e orientation, void *data)
+{
+ struct appdata *ad = data;
+ int r;
+
+ if (ad == NULL || ad->main_window == NULL)
+ return;
+
+ switch (orientation) {
+ case APP_DEVICE_ORIENTATION_0:
+ r = 0;
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ r = 180;
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ r = 270;
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ r = 90;
+ break;
+ default:
+ r = -1;
+ break;
+ }
+
+ if (r >= 0) {
+ if (ad->main_window) {
+ elm_win_rotation_with_resize_set(ad->main_window, r);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid case !!");
+ }
+ }
+}
static void __msg_ui_dialog_win_del(void *data, Evas_Object *obj, void *event)
{
@@ -165,7 +172,6 @@ static Evas_Object *__msg_ui_dialog_create_win(const char *name)
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);
@@ -176,7 +182,7 @@ static Evas_Object *__msg_ui_dialog_create_win(const char *name)
return eo;
}
-static int app_create(void *data)
+static bool app_create(void *data)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -184,50 +190,42 @@ static int app_create(void *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;
+ return FALSE;
}
/* 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;
+ return FALSE;
}
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 FALSE;
}
- return MSG_UI_RET_SUCCESS;
+ return TRUE;
}
-static int app_terminate(void *data)
+static void app_terminate(void *data)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-
- return MSG_UI_RET_SUCCESS;
}
-static int app_pause(void *data)
+static void app_pause(void *data)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-
- return MSG_UI_RET_SUCCESS;
}
-static int app_resume(void *data)
+static void app_resume(void *data)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-
- return MSG_UI_RET_SUCCESS;
}
-static int app_reset(bundle *b, void *data)
+static void app_service(service_h service, 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)
@@ -276,22 +274,26 @@ 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;
+
+ app_event_callback_s event_callback;
+
+ event_callback.create = app_create;
+ event_callback.terminate = app_terminate;
+ event_callback.pause = app_pause;
+ event_callback.resume = app_resume;
+ event_callback.service = app_service;
+ event_callback.low_memory = NULL;
+ event_callback.low_battery = NULL;
+ event_callback.device_orientation = __msg_ui_dialog_rotate;
+ event_callback.language_changed = NULL;
+ event_callback.region_format_changed = NULL;
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);
+ return app_efl_main(&argc, &argv, &event_callback, &ad);
}
diff --git a/dialog/message-dialog.h b/dialog/message-dialog.h
index af56570..89291dc 100755
--- a/dialog/message-dialog.h
+++ b/dialog/message-dialog.h
@@ -14,13 +14,14 @@
* 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 <app.h>
#include <utilX.h>
#include <Ecore_X.h>
#include "msg-ui-util.h"
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index 5ff9d37..542925f 100755
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -1,7 +1,7 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(message C)
-SET(SRCS
+SET(SRCS
message.c
${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-main.c
${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-list.c
@@ -50,12 +50,12 @@ TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${CMAKE_LDFLAGS} msg-commo
#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_DIR}/${PKGNAME}.xml DESTINATION /opt/share/packages)
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(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.png DESTINATION /opt/share/icons/default/small)
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})
diff --git a/main/message.c b/main/message.c
index 862ea55..496e0e7 100755
--- a/main/message.c
+++ b/main/message.c
@@ -18,19 +18,21 @@
#include <Ecore_X.h>
#include <ui-gadget.h>
#include <ui-gadget-module.h>
+#include <mm_session.h>
#include "msg-ui-thread-main.h"
-
+#include "msg-ui-common-utility.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);
-
+static service_h __msg_ui_parse_sms_uri(service_h service, const char *uri);
+static service_h __msg_ui_parse_mmsto_uri(service_h service, const char *uri);
+static service_h __msg_ui_parse_file_uri(service_h service, const char *uri);
+static service_h __get_service_with_new_msg(struct appdata *ad);
+static service_h __get_service_with_msg_id(struct appdata *ad, service_h service);
-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);
+void layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
+void result_cb(ui_gadget_h ug, service_h result, void *priv);
+void destroy_cb(ui_gadget_h ug, void *priv);
struct appdata *gAppData = NULL;
@@ -65,9 +67,50 @@ static int region_changed_cb(void *data)
return ug_send_event(UG_EVENT_REGION_CHANGE);
}
+static void rotate(app_device_orientation_e orientation, void *data)
+{
+ D_ENTER;
+
+ struct appdata *ad = data;
+ int ret = 0;
+ int rot = THREAD_ROTATE_ANGLE_UNKNOWN;
+
+ if (ad == NULL || ad->win_main == NULL)
+ return;
+
+ switch (orientation) {
+ case APP_DEVICE_ORIENTATION_0:
+ rot = THREAD_ROTATE_ANGLE_PORTRAIT;
+ ret = ug_send_event(UG_EVENT_ROTATE_PORTRAIT);
+ break;
+ case APP_DEVICE_ORIENTATION_180:
+ rot = THREAD_ROTATE_ANGLE_PORTRAIT_UPSIDEDOWN;
+ ret = ug_send_event(UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN);
+ break;
+ case APP_DEVICE_ORIENTATION_270:
+ rot = THREAD_ROTATE_ANGLE_LANDSCAPE;
+ ret = ug_send_event(UG_EVENT_ROTATE_LANDSCAPE);
+ break;
+ case APP_DEVICE_ORIENTATION_90:
+ rot = THREAD_ROTATE_ANGLE_LANDSCAPE_UPSIDEDOWN;
+ ret = ug_send_event(UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN);
+ break;
+ default:
+ rot = THREAD_ROTATE_ANGLE_UNKNOWN;
+ break;
+ }
+
+ if (rot >= 0)
+ {
+ elm_win_rotation_with_resize_set(ad->win_main, rot);
+ msg_ui_thread_rotation_set(ad->thread_data, rot);
+ }
+}
+
static void _block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
evas_object_del(obj);
+ elm_exit();
}
static void __msg_ui_popup_warning(Evas_Object *parent, const char *msg)
@@ -99,19 +142,20 @@ static void __msg_ui_popup_warning(Evas_Object *parent, const char *msg)
D_LEAVE;
}
-static bundle *__msg_ui_parse_sms_uri(bundle *b, const char *uri)
+static service_h __msg_ui_parse_sms_uri(service_h service, const char *uri)
{
D_ENTER;
- bundle *cb = NULL;
-
char *content = NULL;
- const char *recipient = NULL;
- const char *body_text = NULL;
+ char *recipient = NULL;
+ char *body_text = NULL;
+
+ service_h svc_handle = NULL;
- cb = bundle_create();
- if (!cb)
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
return NULL;
+ }
char *scheme = g_strdup(uri);
@@ -124,186 +168,412 @@ static bundle *__msg_ui_parse_sms_uri(bundle *b, const char *uri)
D_MSG("APPSVC RECIPIENT = [%s]", recipient);
if (recipient)
- bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient);
}
}
g_free(scheme);
} else {
- recipient = appsvc_get_data(b, APPSVC_DATA_TO);
+ service_get_extra_data(service, SERVICE_DATA_TO, &recipient);
D_MSG("APPSVC RECIPIENT = [%s]", recipient);
- bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient);
}
/* Add body text */
- body_text = appsvc_get_data(b, APPSVC_DATA_TEXT);
+ service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text);
if (body_text) {
D_MSG("APPSVC BODY_TEXT = [%s]", body_text);
- bundle_add(cb, MSG_BUNDLE_KEY_BODY, body_text);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text);
}
D_LEAVE;
- return cb;
+ return svc_handle;
}
-static bundle *__get_bundle_app_svc_op(const char *operation, bundle *b)
+static service_h __msg_ui_parse_mmsto_uri(service_h service, const char *uri)
{
D_ENTER;
- if (b == NULL || operation == NULL)
+ char *content = NULL;
+ char *recipient = NULL;
+ char *body_text = NULL;
+ char *subject = NULL;
+ char *attachment = NULL;
+ char *cc = NULL;
+
+ service_h svc_handle = NULL;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
return NULL;
+ }
- const char *uri = NULL;
- const char *recipient = NULL;
- const char *body_text = NULL;
+ char *scheme = g_strdup(uri);
- bundle *cb = NULL;
+ if (scheme) {
+ strtok_r(scheme, ":", &content);
- if (g_strcmp0(operation, APPSVC_OPERATION_SEND_TEXT) == 0) {
- uri = appsvc_get_uri(b);
+ if (content) {
+ if (g_ascii_isdigit(content[0]) || (content[0] == '+' && g_ascii_isdigit(content[1]))) {
+ recipient = strtok_r(NULL, "?", &content);
+ cc = strtok_r(NULL, "&", &content);
+ if (cc)
+ strtok_r(NULL, "=", &cc);
+
+ D_MSG("APPSVC RECIPIENT = [%s]", recipient);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient);
+ }
+ }
+ g_free(scheme);
+ } else {
+ service_get_extra_data(service, SERVICE_DATA_TO, &recipient);
+ D_MSG("APPSVC RECIPIENT = [%s]", recipient);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient);
+ }
+
+ /* Add body text */
+ service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text);
+ if (body_text) {
+ D_MSG("APPSVC BODY_TEXT = [%s]", body_text);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text);
+ }
+
+ /* Add subject */
+ service_get_extra_data(service, SERVICE_DATA_SUBJECT, &subject);
+ if (subject) {
+ D_MSG("APPSVC SUBJECT = [%s]", subject);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_SUBJECT, subject);
+ }
+
+ /* Add attachment */
+ service_get_extra_data(service, MSG_BUNDLE_KEY_ATTACHFILE, &attachment);
+ if (attachment) {
+ D_MSG("APPSVC ATTACHMENT = [%s]", attachment);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, attachment);
+ }
+
+ D_LEAVE;
+
+ return svc_handle;
+}
+
+static service_h __msg_ui_parse_file_uri(service_h service, const char *uri)
+{
+ D_ENTER;
+
+ char *content = NULL;
+ char attachment[DEF_IMG_PATH_LEN] = {0, };
+ int i = 0;
+ int len = 0;
+
+ service_h svc_handle = NULL;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
+
+ char *scheme = g_strdup(uri);
+
+ if (scheme) {
+ strtok_r(scheme, ":", &content);
+ D_MSG("content = [%s]", content);
+
+ if (content) {
+ len = strlen(content) - 2;
+ if (len <= 0) {
+ D_EMSG("len is less than 0 !!");
+ service_destroy(svc_handle);
+ g_free(scheme);
+ return NULL;
+ }
+
+ /* Remove '//' from content string */
+ for (i = 0; i < len; i++) {
+ attachment[i] = content[i+2];
+ }
+
+ if (attachment[0] != '\0') {
+ D_MSG("APPSVC ATTACHMENT = [%s]", attachment);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, attachment);
+ }
+ }
+ g_free(scheme);
+ } else {
+ D_EMSG("scheme is NULL!!");
+ service_destroy(svc_handle);
+ return NULL;
+ }
+
+ D_LEAVE;
+
+ return svc_handle;
+}
+
+static service_h __get_service_app_svc_op(const char *operation, service_h service)
+{
+ D_ENTER;
+
+ if (service == NULL || operation == NULL)
+ return NULL;
+
+ char *uri = NULL;
+ char *recipient = NULL;
+ char *body_text = NULL;
+ char *attachment = NULL;
+ char *subject = NULL;
+
+ service_h svc_handle = NULL;
+
+ if (g_strcmp0(operation, SERVICE_OPERATION_SEND) == 0) {
+ service_get_uri(service, &uri);
+ D_MSG("APPSVC URI = [%s]", uri);
+
+ if (uri) {
+ if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_MMSTO_URI)) { /* MMS URI */
+ svc_handle = __msg_ui_parse_mmsto_uri(service, uri);
+ } else if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_FILE_URI)) {
+ /* file URI */
+ svc_handle = __msg_ui_parse_file_uri(service, uri);
+ if (svc_handle == NULL) {
+ D_MSG("cb is NULL");
+ return NULL;
+ }
+ } else {
+ D_MSG("Not supported mime type");
+ return NULL;
+ }
+ } else {
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
+
+ /* Add recipient number */
+ service_get_extra_data(service, SERVICE_DATA_TO, &recipient);
+ if (recipient) {
+ D_MSG("APPSVC RECIPIENT = [%s]", recipient);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient);
+ }
+
+ /* Add body text */
+ service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text);
+ if (body_text) {
+ D_MSG("APPSVC BODY_TEXT = [%s]", body_text);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text);
+ }
+
+ /* Add subject */
+ service_get_extra_data(service, SERVICE_DATA_SUBJECT, &subject);
+ if (subject) {
+ D_MSG("APPSVC SUBJECT = [%s]", subject);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_SUBJECT, subject);
+ }
+
+ /* Add attachment */
+ service_get_extra_data(service, MSG_BUNDLE_KEY_ATTACHFILE, &attachment);
+ if (attachment) {
+ D_MSG("APPSVC ATTACHMENT = [%s]", attachment);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, attachment);
+ }
+ }
+
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_COMPOSE);
+
+ } else if (g_strcmp0(operation, SERVICE_OPERATION_SEND_TEXT) == 0) {
+ service_get_uri(service, &uri);
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);
+ svc_handle = __msg_ui_parse_sms_uri(service, uri);
} else {
D_MSG("Not supported mime type");
return NULL;
}
} else {
- cb = bundle_create();
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return NULL;
+ }
/* Add body text */
- body_text = appsvc_get_data(b, APPSVC_DATA_TEXT);
+ service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text);
if (body_text) {
D_MSG("APPSVC BODY_TEXT = [%s]", body_text);
- bundle_add(cb, MSG_BUNDLE_KEY_BODY, body_text);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text);
}
/* Add recipient number */
- recipient = appsvc_get_data(b, APPSVC_DATA_TO);
+ service_get_extra_data(service, SERVICE_DATA_TO, &recipient);
if (recipient) {
D_MSG("APPSVC RECIPIENT = [%s]", recipient);
- bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient);
}
}
- bundle_add(cb, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_COMPOSE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_COMPOSE);
}
D_LEAVE;
- return cb;
+ return svc_handle;
}
-static bundle *__get_bundle_with_new_msg(struct appdata *ad)
+static service_h __get_service_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;
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_list_s peerList;
+ msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE);
+ service_h svc_handle = NULL;
+ int i = 0;
+ int new_sms_cnt = 0;
+ int new_mms_cnt = 0;
+ int unreadCnt = 0;
char buf[DEF_BUF_LEN_L] = {'0',};
char buf_contact[DEF_BUF_LEN] = {'0',};
- sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
- sortRule.bAscending = false;
+ msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE);
+ msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false);
vconf_get_int(VCONFKEY_MESSAGE_RECV_SMS_STATE, &new_sms_cnt);
+ vconf_get_int(VCONFKEY_MESSAGE_RECV_MMS_STATE, &new_mms_cnt);
- err = msg_get_thread_view_list(ad->msgHandle, &sortRule, &peerList);
- if (err != MSG_SUCCESS)
+ err = msg_get_thread_view_list(ad->msgHandle, sort_rule_t, &peerList);
+ if (err != MSG_SUCCESS) {
+ msg_release_struct(&sort_rule_t);
return NULL;
+ }
- if (peerList.nCount <= 0)
+ if (peerList.nCount <= 0) {
+ msg_release_list_struct(&peerList);
+ msg_release_struct(&sort_rule_t);
return NULL;
+ }
- for(i=0; i<peerList.nCount; i++){
- if(msg_thread_view_get_unread_cnt(peerList.msgThreadInfo[i]))
+ for (i=0; i<peerList.nCount; i++){
+ msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_UNREAD_COUNT_INT, &unreadCnt);
+ if (unreadCnt > 0)
break;
}
- if(i >= peerList.nCount)
+ if(i >= peerList.nCount) {
+ msg_release_list_struct(&peerList);
+ msg_release_struct(&sort_rule_t);
return NULL;
+ }
- if(msg_thread_view_get_unread_cnt(peerList.msgThreadInfo[i]) == new_sms_cnt){
+ msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_UNREAD_COUNT_INT, &unreadCnt);
+ if(unreadCnt == new_sms_cnt+new_mms_cnt){
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ msg_release_list_struct(&peerList);
+ msg_release_struct(&sort_rule_t);
+ return NULL;
+ }
- b = bundle_create();
+ msg_struct_list_s *addrList = NULL;
+ int thread_id = 0;
+ int contact_id = 0;
+ char strName[DEF_THREAD_NAME_LEN+1] = {0,};
+ char strNumber[DEF_THREAD_ADDR_LEN+1] = {0,};
- if (!b)
- return NULL;
+ msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_ID_INT, &thread_id);
+ msg_get_list_handle(peerList.msg_struct_info[i], MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addrList);
- 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]));
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_NEW_MSG);
+ snprintf(buf, DEF_BUF_LEN_L, "%d", thread_id);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf);
+ msg_get_str_value(peerList.msg_struct_info[i], MSG_THREAD_NAME_STR, strName, DEF_THREAD_NAME_LEN);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_NAME, strName);
- 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_get_str_value(addrList->msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN);
+ msg_get_int_value(addrList->msg_struct_info[0], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
- msg_release_thread_view_list(&peerList);
+ snprintf(buf_contact, DEF_BUF_LEN, "%d", contact_id);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ADDRESS, strNumber);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact);
}
+ msg_release_struct(&sort_rule_t);
+ msg_release_list_struct(&peerList);
+
D_LEAVE;
- return b;
+ return svc_handle;
}
-static bundle* __get_bundle_with_msg_id(struct appdata *ad, bundle *b)
+static service_h __get_service_with_msg_id(struct appdata *ad, service_h service)
{
D_ENTER;
- bundle *nb = bundle_create();
+ service_h svc_handle = NULL;
- if (!nb)
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
return NULL;
+ }
int msg_id = 0;
- const char *msg_id_str = bundle_get_val(b, MSG_BUNDLE_KEY_MSG_ID);
+ char *msg_id_str = NULL;
+ service_get_extra_data(service, MSG_BUNDLE_KEY_MSG_ID, &msg_id_str);
- if (!msg_id_str)
+ if (!msg_id_str) {
+ service_destroy(svc_handle);
return NULL;
+ }
msg_id = atoi(msg_id_str);
- if (msg_id <= 0)
+ if (msg_id <= 0) {
+ service_destroy(svc_handle);
return NULL;
+ }
- msg_message_t msg_t = msg_new_message();
- MSG_SENDINGOPT_S sendOpt = {0, };
- MSG_ERROR_T err = MSG_SUCCESS;
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ 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);
+ msg_struct_list_s *addr_list = NULL;
+ char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,};
+ char strName[DEF_THREAD_NAME_LEN + 1] = {0,};
+
+ err = msg_get_message(ad->msgHandle, (msg_message_id_t)msg_id, msgInfo, sendOpt);
if (err != MSG_SUCCESS) {
- if (nb)
- bundle_free(nb);
+ service_destroy(svc_handle);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
return NULL;
}
- thread_id= msg_get_ith_thread_id(msg_t, 0);
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
snprintf(buf_thread, sizeof(buf_thread), "%d", thread_id);
- contact_id = msg_get_ith_contact_id(msg_t, 0);
+ msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
+
+ msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN);
+ msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, DEF_THREAD_NAME_LEN);
+ msg_get_int_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
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);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf_thread);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_NAME, strName);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ADDRESS, strNumber);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact);
- msg_release_message(&msg_t);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
D_LEAVE;
- return nb;
+ return svc_handle;
}
static Evas_Object* create_win(const char *name)
@@ -316,7 +586,6 @@ static Evas_Object* create_win(const char *name)
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);
@@ -326,8 +595,7 @@ static Evas_Object* create_win(const char *name)
return eo;
}
-
-void layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)
+void layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
{
D_ENTER;
@@ -358,10 +626,11 @@ void layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)
default:
break;
}
+
D_LEAVE;
}
-void result_cb(struct ui_gadget *ug, bundle *result, void *priv)
+void result_cb(ui_gadget_h ug, service_h result, void *priv)
{
D_ENTER;
@@ -370,90 +639,68 @@ void result_cb(struct ui_gadget *ug, bundle *result, void *priv)
struct appdata *ad = priv;
PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data;
- const char *buf;
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+ char *buf = NULL;
+ char *str_result = NULL;
- if (!g_strcmp0(bundle_get_val(result, MSG_BUNDLE_KEY_RESULT), MSG_BUNDLE_VALUE_DEL_ALL)) {
+ service_get_extra_data(result, MSG_BUNDLE_KEY_RESULT, &str_result);
+ if (pData == NULL) {
+ if (!g_strcmp0(str_result, MSG_BUNDLE_VALUE_DEL_ALL))
+ ug_destroy(ug);
- ug_destroy(ug);
+ elm_exit();
+ return;
+ }
- 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;
+ pListData = msg_ui_thread_get_current_list();
- del_thread_id = bundle_get_val(result, MSG_BUNDLE_KEY_THREAD_ID);
- if (!del_thread_id)
- return;
+ if (!g_strcmp0(str_result, MSG_BUNDLE_VALUE_DEL_ALL)) {
+ ug_destroy(ug);
- 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 */
+ if (pListData) {
+ int del_id = 0;
- 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;
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) {
+ service_get_extra_data(result, MSG_BUNDLE_KEY_MSG_ID, &buf);
+ if (buf) {
+ del_id = atoi(buf);
+ msg_ui_thread_list_msg_item_delete(pListData, del_id);
+ }
+ } else {
+ service_get_extra_data(result, MSG_BUNDLE_KEY_THREAD_ID, &buf);
+ if (buf) {
+ del_id = atoi(buf);
+ msg_ui_thread_list_item_delete(pListData, del_id);
}
- gen_item = elm_genlist_item_next_get(gen_item);
}
- pData->sel_gen_item = NULL;
- pData->sel_thread_id = 0;
+ pListData->sel_gen_item = NULL;
+ pListData->sel_thread_id = 0;
+ pListData->sel_msg_id = 0;
ad->composer_ug = NULL;
-
- pData->thread_cnt--;
- if (pData->thread_cnt <= 0)
- msg_ui_thread_list_load(pData);
- } else {
- elm_exit();
}
+ } else {
+ int update_id = 0;
- } 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");
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) {
+ service_get_extra_data(result, MSG_BUNDLE_KEY_MSG_ID, &buf);
+ if (buf) {
+ update_id = atoi(buf);
+ msg_ui_thread_list_msg_item_update(pListData, update_id);
}
- 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;
+ } else {
+ service_get_extra_data(result, MSG_BUNDLE_KEY_THREAD_ID, &buf);
+ if (buf) {
+ update_id = atoi(buf);
+ msg_ui_thread_list_item_update(pListData, update_id);
}
- gen_item = elm_genlist_item_next_get(gen_item);
}
}
D_LEAVE;
}
-void destroy_cb(struct ui_gadget *ug, void *priv)
+void destroy_cb(ui_gadget_h ug, void *priv)
{
D_ENTER;
@@ -466,37 +713,47 @@ void destroy_cb(struct ui_gadget *ug, void *priv)
ad->composer_ug = NULL;
}
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data;
+ if (ad->layout_main) {
+ PMSG_THREAD_LIST_DATA pListData = NULL;
- if (pData && ad->layout_main) {
- if (pData->search_mode == THREAD_SEARCH_ON)
- elm_object_focus_set(pData->searchbar, EINA_TRUE);
+ pListData = msg_ui_thread_get_current_list();
- if (pData->sel_thread_id > 0)
- msg_ui_thread_list_item_update(pData, pData->sel_thread_id);
+ if (pListData == NULL) {
+ elm_exit();
+ return;
+ }
+
+ if (pListData->search_mode == THREAD_SEARCH_ON)
+ elm_object_focus_set(pListData->searchbar, EINA_TRUE);
- pData->sel_gen_item = NULL;
- pData->sel_thread_id = 0;
+ if (pListData->sel_thread_id > 0)
+ msg_ui_thread_list_item_update(pListData, pListData->sel_thread_id);
- pData->viewmode = THREAD_NORMAL_VIEW;
+ if (pListData->sel_msg_id > 0)
+ msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id);
+
+ pListData->sel_gen_item = NULL;
+ pListData->sel_thread_id = 0;
+ pListData->sel_msg_id = 0;
+
+ pListData->view_mode = THREAD_NORMAL_VIEW;
} else {
elm_exit();
}
}
-
-int msg_ui_load_composer_ug(bundle *b)
+int msg_ui_load_composer_ug(service_h svc_handle)
{
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) {
+ ug_send_message(gAppData->composer_ug, svc_handle);
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL);
+ gAppData->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &gAppData->cbs);
}
if (!gAppData->composer_ug)
@@ -506,12 +763,11 @@ int msg_ui_load_composer_ug(bundle *b)
return MSG_UI_RET_SUCCESS;
}
-static int app_create(void *data)
+static bool app_create(void *data)
{
-/* return 0 : success, return non-zero : not to run main loop */
+ /* return TRUE : success, return FALSE : 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);
@@ -521,40 +777,37 @@ static int app_create(void *data)
/* create window */
win = create_win(MESSAGE_PKGNAME);
if (win == NULL)
- return MSG_UI_RET_ERR;
+ return FALSE;
ad->win_main = win;
- UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE);
+ mm_session_init(MM_SESSION_TYPE_SHARE);
- /* 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);
+ UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE);
+ elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW);
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; */
+ gAppData = ad; // Set global app data pointer;
D_LEAVE;
- D_MSG("Measure time = [%d]", appcore_measure_time());
-
- return MSG_UI_RET_SUCCESS;
+ return TRUE;
}
-static int app_terminate(void *data)
+static void app_terminate(void *data)
{
D_ENTER;
- MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, MSG_UI_RET_ERR);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !data, "data is null");
struct appdata *ad = data;
- MSG_ERROR_T err;
+ msg_error_t err;
ug_destroy_all();
+ mm_session_finish();
if (ad->thread_data)
msg_ui_thread_deinit_thread_data(ad->thread_data);
@@ -565,10 +818,9 @@ static int app_terminate(void *data)
}
D_LEAVE;
- return MSG_UI_RET_SUCCESS;
}
-static int app_pause(void *data)
+static void app_pause(void *data)
{
D_ENTER;
@@ -576,11 +828,9 @@ static int app_pause(void *data)
ug_pause();
D_LEAVE;
-
- return MSG_UI_RET_SUCCESS;
}
-static int app_resume(void *data)
+static void app_resume(void *data)
{
D_ENTER;
@@ -588,25 +838,20 @@ static int app_resume(void *data)
ug_resume();
D_LEAVE;
-
- return MSG_UI_RET_SUCCESS;
}
-static int app_reset(bundle *b, void *data)
+static void app_service(service_h service, 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);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !data, "data is NULL");
struct appdata *ad = data;
-
- bundle *cb = NULL;
- MSG_ERROR_T err = MSG_SUCCESS;
- MSG_HANDLE_T msgHandle;
+ service_h svc_handle = NULL;
+ msg_error_t err = MSG_SUCCESS;
+ msg_handle_t msgHandle = NULL;
bool isDefaultView = false;
- const char *operation = NULL;
+ char *operation = NULL;
ug_resume();
@@ -615,48 +860,61 @@ static int app_reset(bundle *b, void *data)
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;
+ return;
}
ad->msgHandle = msgHandle;
}
- if (b) {
- operation = appsvc_get_operation(b);
+ if (service) {
+ service_get_operation(service, &operation);
if (operation) {
- cb = __get_bundle_app_svc_op(operation, b);
+ svc_handle = __get_service_app_svc_op(operation, service);
} 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);
+ char *key_type = NULL;
+
+ service_get_extra_data(service, MSG_BUNDLE_KEY_TYPE, &key_type);
+ if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_COMPOSE) == 0) {
+ service_clone(&svc_handle, service);
+ } else if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_NEW_MSG) == 0) {
+ svc_handle = __get_service_with_new_msg(ad);
+ } else if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_MSG_ID) == 0) {
+ svc_handle = __get_service_with_msg_id(ad, service);
} else {
- isDefaultView = true;
+ char *mime_type = NULL;
+
+ service_get_extra_data(service, AUL_K_MIME_TYPE, &mime_type);
+ if (g_strcmp0(mime_type, MSG_BUNDLE_VALUE_SMS_URI) == 0)
+ svc_handle = __msg_ui_parse_sms_uri(service, NULL);
+ else if (g_strcmp0(mime_type, MSG_BUNDLE_VALUE_MMSTO_URI) == 0)
+ svc_handle = __msg_ui_parse_mmsto_uri(service, NULL);
+ else
+ isDefaultView = true;
}
}
- if (!cb)
+ if (!svc_handle)
isDefaultView = true;
-
} else {
isDefaultView = true;
}
if (isDefaultView) {
+ if (ad->composer_ug) {
+ ug_destroy(ad->composer_ug);
+ ad->composer_ug = NULL;
+ }
+
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);
+ ad->layout_main = msg_ui_thread_create_layout_main(ad->thread_data);
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);
+ msg_ui_thread_load_thread_view(ad->thread_data, service);
} else {
- msg_ui_thread_reset_thread_view(ad->thread_data, b);
+ msg_ui_thread_reset_thread_view(ad->thread_data, service);
}
} else {
/* If message app is called by app-service to display composer view,
@@ -664,8 +922,8 @@ static int app_reset(bundle *b, void *data)
* 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 (g_strcmp0(operation, SERVICE_OPERATION_SEND) == 0 ||
+ g_strcmp0(operation, SERVICE_OPERATION_SEND_TEXT) == 0) {
if (ad->layout_main) {
evas_object_del(ad->layout_main);
ad->layout_main = NULL;
@@ -674,24 +932,27 @@ static int app_reset(bundle *b, void *data)
}
if (!ad->composer_ug)
- ad->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, cb, &ad->cbs);
+ ad->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &ad->cbs);
else
- ug_send_message(ad->composer_ug, cb);
-
- const char *thread_id_s = NULL;
+ ug_send_message(ad->composer_ug, svc_handle);
PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data;
- thread_id_s = bundle_get_val(cb, MSG_BUNDLE_KEY_THREAD_ID);
+ char *thread_id_s = NULL;
- if (pData && thread_id_s)
- pData->sel_thread_id = atoi(thread_id_s);
- }
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, &thread_id_s);
- if (cb) {
- bundle_free(cb);
- cb = NULL;
+ if (pData) {
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+ pListData = msg_ui_thread_get_current_list();
+
+ if (pListData && thread_id_s)
+ pListData->sel_thread_id = atoi(thread_id_s);
+ }
}
+ if (svc_handle)
+ service_destroy(svc_handle);
+
if (ad->win_main) {
evas_object_show(ad->win_main);
elm_win_activate(ad->win_main);
@@ -701,28 +962,28 @@ static int app_reset(bundle *b, void *data)
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;
+ app_event_callback_s event_callback;
+
+ event_callback.create = app_create;
+ event_callback.terminate = app_terminate;
+ event_callback.pause = app_pause;
+ event_callback.resume = app_resume;
+ event_callback.service = app_service;
+ event_callback.low_memory = NULL;
+ event_callback.low_battery = low_battery_cb;
+ event_callback.device_orientation = rotate;
+ event_callback.language_changed = lang_changed;
+ event_callback.region_format_changed = region_changed_cb;
- return appcore_efl_main(MESSAGE_PKGNAME, &argc, &argv, &ops);
+ D_LEAVE;
+ return app_efl_main(&argc, &argv, &event_callback, &ad);
}
diff --git a/main/message.h b/main/message.h
index 4e69bb5..24bea78 100755
--- a/main/message.h
+++ b/main/message.h
@@ -19,21 +19,19 @@
#include <stdio.h>
#include <glib.h>
-
-#include <MsgStorageTypes.h>
-#include <MapiStorage.h>
-#include <MapiMessage.h>
-#include <MapiControl.h>
-#include <MapiTransport.h>
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
#include <libintl.h>
#include <bundle.h>
-#include <appcore-efl.h>
+#include <app.h>
#include <Ecore.h>
#include <Elementary.h>
#include <ui-gadget-module.h>
#include <utilX.h>
#include "msg-ui-util.h"
+#include <aul.h>
#include <appsvc.h>
#define POPUP_DELAY (1)
@@ -41,19 +39,17 @@
struct appdata
{
- Evas_Object *win_main;
- Evas_Object *layout_main;
-
- struct ug_cbs cbs;
- struct ui_gadget *composer_ug;
+ Evas_Object *win_main;
+ Evas_Object *layout_main;
- MSG_HANDLE_T msgHandle;
+ struct ug_cbs cbs;
+ ui_gadget_h composer_ug;
+ msg_handle_t msgHandle;
void *thread_data;
};
-int msg_ui_load_composer_ug(bundle *b);
-
+int msg_ui_load_composer_ug(service_h svc_handle);
#endif /* __DEF_message_H__ */
diff --git a/main/org.tizen.message.desktop.in b/main/org.tizen.message.desktop.in
deleted file mode 100755
index 25eded9..0000000
--- a/main/org.tizen.message.desktop.in
+++ /dev/null
@@ -1,27 +0,0 @@
-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
index 4f2d7a8..87608ec 100755
--- a/main/po/CMakeLists.txt
+++ b/main/po/CMakeLists.txt
@@ -1,7 +1,10 @@
# 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(POFILES ar.po bg.po ca.po cs.po da.po de_DE.po el_GR.po en.po en_US.po es_ES.po
+ fi.po fr_FR.po he.po hi.po hr.po hu.po id.po it_IT.po ja_JP.po ko_KR.po
+ lt.po lv.po ms.po nl_NL.po no.po pl.po pt_PT.po ro.po ru_RU.po sk.po
+ sl.po sr.po sv.po th.po tr_TR.po uk.po vi.po zh_CN.po zh_HK.po zh_TW.po)
SET(MSGFMT "/usr/bin/msgfmt")
diff --git a/main/po/ar.po b/main/po/ar.po
new file mode 100644
index 0000000..57a6559
--- /dev/null
+++ b/main/po/ar.po
@@ -0,0 +1,504 @@
+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_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+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_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "أدخل البطاقة لإرسال رسائل. سيتم Ø­Ùظ الرسالة ÙÙŠ الصادرة"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "أدخل رقم القناة"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "تم تحديد رسالة واحدة"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_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_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "إضاÙØ© إلى جهة اتصال"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "تخلص"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "يتعذر إرسال الرسالة"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "التقاط صورة"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "لا يوجد عنوان"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "قائمة العناصر المرÙقة"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "تحميل تلقائي"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "رسائل البث"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "مركز %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "وقت مخصص"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "تقرير التوصيل"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Ùشل الإرسال"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "من"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+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_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+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_REQUEST_DELIVERY_REPORT"
+msgstr "طلب تقرير التوصيل"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "طلب تقرير قراءة الرسالة"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "مقيد"
+
+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_SENDINGOPTION_PRIORITY"
+msgstr "الأولوية"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "إرسال تقرير قراءة الرسالة"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "مدة الصÙحة"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "رسائل الطوارئ"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "رسائل نصية"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "إجمالي الحجم"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "محتوى DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "قائمة العناصر"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 ثوان"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "ثانيتان"
+
+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_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_SK_FORWARD_LITE"
+msgstr "تحويل"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "غير مقروءة"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "نقل إلى الهاتÙ"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "مستلم مكرر"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "تم بلوغ الحد الأقصى لعدد المستلمين (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "إلى"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "تسجيل صوت"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "تسجيل Ùيديو"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "تم التغيير إلى رسالة وسائط"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "تم التغيير إلى SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "يتوÙر %d مرÙقات. قم بتحديد عدد يصل إلى %d مرÙقات"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "يتعذر إرÙاق جميع الملÙات. يبلغ الحد الأقصى لسعة المرÙقات %d كيلوبايت. استمرار؟"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "حجم الخط"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "نمط الإنشاء"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "رسالة وسائط"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "لا يوجد موضوع"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "مركز الخدمة"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "تحديد عنوان"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "نقل إلى البطاقة"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "أنت على وشك تسجيل الدخول (%s). متابعة"
+
+msgid "IDS_MSGF_SK_RESEND"
+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_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "رÙض الرسالة الحالية؟"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "تم التحديد"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+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 "تتم الإضاÙØ©. الرجاء الانتظار..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "عنوان مركز الخدمة"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "رسائل البريد العشوائي‬"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "كبير"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "عادي"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "صغير"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "يتعذر إرسال رسالة مجدولة. حدد موعدا آخر"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "التاريخ و الوقت"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "رسائل الوسائط"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "لم تتم إضاÙØ© مستلمين. أدخل المستلمين"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "خيارات الإرسال"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "نوع تنبيه الاستلام"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "طوارئ"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "عادي"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "إرسال رسالة الطوارئ"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "المستقبلون"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "التكرار"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "رسالة"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "مرة واحدة"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 مرات"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 مرات"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "أنا ÙÙŠ حالة طارئة. رجاء المساعدة"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "لم يتم إدخال بطاقة SIM"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "التقاط صورة"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "التقاط Ùيديو"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "تسجيل الصوت"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "رسائل CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "رسائل بطاقة SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "يجب أن تكون المدة أطول من %d ثوان"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "غير قابل على إضاÙØ© محتوى"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "تحديد مستلم"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "عرض الاسم"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "المدة (%s ثوان)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "الصورة كبيرة للغاية. ضغط..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "تم Ø­Ùظ الرسالة كمسودة"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "آخر"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "مسودة"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "مدة الشريحة"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "إرسال بريد إلكتروني"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "العناصر المدرجة"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "المحتويات الملحقة"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d مرÙقات"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "رسالة\nمجدولة"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "المدة\nâ€(%d ثوان)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "استخدام معلومات جهة اتصال أخرى"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "تحتوي هذه الرسالة على مل٠ملحق غير ظاهر"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "تحتوي هذه الرسالة على ملÙات ملحقة غير ظاهرة"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Ø­Ùظ الكل"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "رسائل المسودة"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "ستتم استعادة الرسالة"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "سيتم إلغاء الرسالة المجدولة"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "نسخ نص الرسالة"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "عرض تÙاصيل الرسالة"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "رسائل مقÙلة"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "صناديق الرسائل"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "حجب"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "نسخ إلى الهاتÙ"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "تم نسخ الرسالة من بطاقة SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "إلغاء الرسالة"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "الملحقات"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "رسالة Ùشل الإرسال"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "تم الوصول إلى أقصى عدد من الحروÙ"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "قيد الاستعادة..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "لا يوجد ملحقات"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "تم النسخ إلى الحاÙظة"
+
diff --git a/main/po/bg.po b/main/po/bg.po
new file mode 100644
index 0000000..4d53e84
--- /dev/null
+++ b/main/po/bg.po
@@ -0,0 +1,504 @@
+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_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+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_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "ПоÑтавете SIM карта, за да изпращате ÑъобщениÑ. Съобщението ще бъде запаметено в ИзходÑщи"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Въведете номер на канал"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Избрано е 1 Ñъобщение"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_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_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Добави към запиÑ"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Ðнулиране"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Ðе може да Ñе изпрати Ñъобщението"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Снимай"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "ÐÑма адреÑ"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "СпиÑък Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸ елементи"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Ðвто изтеглÑне"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Излъчени ÑъобщениÑ"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Център %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "ЧаÑова зона по избор"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Отчет за доÑтавка"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "ÐеуÑпешно изпращане"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "От"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+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_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+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_REQUEST_DELIVERY_REPORT"
+msgstr "Отчет за доÑтавка"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "ИзиÑкване отчет за четене"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Ограничен"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "HиÑък"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Ðормален"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Спешно"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Приоритет"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Изпр. отчет чет."
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+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_HEADER_DRM_CONTENT"
+msgstr "DRM Ñъдържание"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+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_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_SK_FORWARD_LITE"
+msgstr "Препр"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Ðечетени"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "ПремеÑти в телефона"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "ПовтарÑщ Ñе получател"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "ДоÑтигнат е макÑималниÑÑ‚ брой получатели (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "До"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° звук"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° видео"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Променено на MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Сменено на SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "Възможни Ñа %d прикачени файла. Изберете до %d прикачени файла"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Ðе могат да Ñе прикачат вÑички файлове. МакÑималниÑÑ‚ размер за прикачени файлове е %d KB. Продължаване?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Размер на шрифта"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Режим на Ñъздаване"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Мултимедийно Ñъобщение"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "ÐÑма тема"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+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_SK_RESEND"
+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_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Игнориране на текущото Ñъобщение?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Избран"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+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 "ДобавÑне. МолÑ, изчакайте..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "ÐÐ´Ñ€ÐµÑ Ñервизен центъра"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Ð¡ÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑÑŠÑ Ñпам"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Едър"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Ðормален"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Малък"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Мъничък"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Съобщението по разпиÑание не може да Ñе изпрати. Задайте друг чаÑ"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Дата и чаÑ"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Мултимедийни ÑъобщениÑ"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "ÐÑма добавени получатели. Въведете получатели"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Опции за изпращане"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Получаване на вид предупреждение"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Ðормален"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Изпращане на SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Получатели"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Повтори"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Съобщение"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Веднъж"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 пъти"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 пъти"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Има Ñпешен Ñлучай. МолÑ, помогнете ми."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM не е поÑтавена"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Ðаправи Ñнимка"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° видео"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "ЗапиÑване на аудио"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "ЦиркулÑрни ÑъобщениÑ"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Ð¡ÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° SIM картата"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "ПродължителноÑтта Ñ‚Ñ€Ñбва да е повече от %d Ñекунди"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Ðевъзможно добавÑне на Ñъдържание"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Избор получател"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Преглед на тел. указ."
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Времетраене (%s Ñек.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Картината е твърде голÑма. КомпреÑиране..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Съобщението запиÑано като чернова"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Друго"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Чернова"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "ПродължителноÑÑ‚ за Ñлайда"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Изпращане на еmail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Вмъкнати елементи"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Прикачени обекти"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d прикачени файла"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Планирано\nÑъобщение"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Времетраене\n(%d Ñек)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Изп. др. данни за кон."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Това Ñъобщение включва прикачени файлове, които не Ñа показани"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Това Ñъобщение включва прикачени файлове, които не Ñа показани"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° вÑичко"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Чернови ÑъобщениÑ"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Съобщението ще бъде възÑтановено"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Съобщението по график ще бъде отменено"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Копирай текÑÑ‚ Ñъобщ."
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "ПодробноÑти Ñъобщ."
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Заключени ÑъобщениÑ"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Кутии ÑÑŠÑ ÑъобщениÑ"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Блокиране"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Копиране в телефона"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Съобщението е копирано от SIM картата"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "ОтмÑна на Ñъобщение"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Прикачени файлове"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Изпращане на неуÑпешно Ñъобщение"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "ДоÑтигнат макÑимален брой знаци"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "ВъзÑтановÑване..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "ÐÑма прикачени файлове"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Копирано в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€"
+
diff --git a/main/po/ca.po b/main/po/ca.po
new file mode 100644
index 0000000..4d51f57
--- /dev/null
+++ b/main/po/ca.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "No es pot obrir"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Recuperar"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "No es pot moure"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "S'ha assolit el nombre màxim de pàgines"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Mode restringit. No es pot introduir el contingut restringit"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Lliurat"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Caducat"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Llegir"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Recuperant..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Insereixi una targeta SIM per a enviar missatges. El missatge es desarà a la Bústia de sortida"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Introdueixi el número de canal"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 missatge seleccionat"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d missatges seleccionats"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Vista prèvia"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "El nom de fitxer ja existeix"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "No hi ha cap missatge"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Afegir a contacte"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Descartar"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "No es pot enviar el missatge"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Fer una foto"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Sense adreça"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Llista d'elements adjunts"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Descàrrega automàtica"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Missatges de difusió"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centre %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Hora personalitzada"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Informe de lliurament"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Error en enviar"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "De"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Llista d'elements inserits"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Missatge entregat"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Missatge recuperat"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Lliure"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Advertència"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Enviat"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Missatges Push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Informe de lectura"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Rebut"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manual"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Rebutjar"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Opcions de recepció"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Sol·licitar informe lliurament"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Sol·licitar informe lectura"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Restringit"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Baixa"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgent"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritat"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Enviar informe de lectura"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Durada de la pàgina"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Missatges SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Missatges de text"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Mida total"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Contingut DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Llista d'elements"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 segons"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 segons"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 segons"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Xarxa local"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instal·lar"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Xarxa externa"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Veure el detall del contacte"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Missatge multimèdia enviat"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Error en recuperar missatge"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Error en l'enviament del missatge multimèdia"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Reenv"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Sense llegir"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Moure a telèfon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Destinatari duplicat"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "S'ha assolit el nombre màxim de destinataris (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "A"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Gravar so"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Gravar vídeo"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Canviat a MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Canviat a SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d fitxers adjunts disponibles. Seleccioni fins a %d fitxers adjunts"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "No es poden adjuntar tots els fitxers. La capacitat màxima d'adjunció són %d KB. Continuar?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Mida de font"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Mode de creació"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Missatge multimèdia"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Sense assumpte"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centre de serveis"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Seleccioni adreça"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Moure a SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Està a punt de connectar-se (%s). Vol continuar?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Torn a env"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Destinatari no vàlid"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Destinataris no vàlids"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "No es pot reproduir durant la trucada"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "No es pot desar mentre està en mode d'emmagatzematge massiu"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Descartar missatge actual?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Seleccionat"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Esborrar?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Error d'adjunció. La mida màxima de fitxers és %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Restringit"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "No es pot reenviar.\nEl fitxer està bloquejat per a reenviaments"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Missatge programat"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "La política de seguretat restringeix la redacció de missatges de text"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Afegint. Esperi..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adreça del centre de serveis"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Missatges de correu brossa"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Gran"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Petit"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "No es pot enviar el missatge programat. Defineixi una altra hora"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Hora i data"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Missatges multimèdia"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "No s'han afegit destinataris. Introdueixi'n"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Opcions d'enviament"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Rebent tipus d'alerta"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Enviant SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Destinataris"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Repetir"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Missatge"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Una vegada"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 vegades"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 vegades"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Tinc una emergència. Ajuda'm"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "No s'ha inserit SIM"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Fer foto"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Capturar vídeo"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Gravar àudio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Missatges CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Missatges de la targeta SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "La durada ha de ser superior a %d segons"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "No es pot afegir contingut"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Seleccionar destinatari"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Veure contacte"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Durada (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Foto massa gran. S'està comprimint..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Missatge desat com a esborrany"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Altres"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Esborran"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Durada de la diapositiva"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Enviar correu electrònic"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Elements introduïts"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Elements adjunts"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d fitxers adjunts"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Missatge\nprogramat"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Durada\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Util info altres cont"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Aquest missatge inclou un fitxer adjunt que no es mostra"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Aquest missatge inclou fitxers adjunts que no es mostren"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Desar-ho tot"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Esborranys de missatges"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Es restablirà el missatge seleccionat"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "El missatge programat es cancel·larà"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copiar text miss"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Veure det missatge"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Missatges bloquejats"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Quadres de missatge"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Bloquejar"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copiar al telèfon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "S'ha copiat el missatge de la targeta SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Cancel·lar missatge"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Adjunts"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Error en enviar un missatge"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "S'ha assolit el nombre màxim de caràcters"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Restaurant..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Sense adjunts"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "S'ha copiat al porta-retalls"
+
diff --git a/main/po/cs.po b/main/po/cs.po
new file mode 100644
index 0000000..546968f
--- /dev/null
+++ b/main/po/cs.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nelze otevřít"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Stáhnout"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Nelze přesunout"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Bylo dosaženo maximálního poÄtu stránek"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Omezený režim. Omezený obsah nelze vložit"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "DoruÄeno"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Platnost vypršela"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "PÅ™eÄteno"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "NaÄítání..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Chcete-li odesílat zprávy, vložte SIM kartu. Zpráva bude uložena do složky K odeslání"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Zadejte Äíslo kanálu"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Byla vybrána 1 zpráva"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Bylo vybráno %d zpráv"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Náhled"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Název souboru již existuje"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Žádné zprávy"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Přidat do kontaktu"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Vyřadit"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Nelze uložit zprávu"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Fotografovat"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Bez adresy"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Byl připojen seznam položek"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automaticky stáhnout"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Vysílané zprávy"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Středisko %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Vlastní doba"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Potvrzení o doruÄení"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Odeslání se nezdařilo"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Od"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Byl vložen seznam položek"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Zpráva byla doruÄena"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Zpráva naÄtena"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Volné"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Upozornění"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Odesláno"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "kB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Zprávy push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Zpráva o pÅ™eÄtení"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Přijato"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "RuÄnÄ›"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Odmítnout"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Možnosti příjmu"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Požadovat zprávu o doruÄení"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Požadovat zpr. o pÅ™eÄtení"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Zakázáno"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Nízká"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normální"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Naléhavé"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Důležitost"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Odeslat zprávu o pÅ™eÄtení"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Trvání stránky"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Zprávy SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Celková velikost"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Obsah DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Seznam položek"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekund"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekund"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekund"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Domácí síť"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instalovat"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Síť roaming"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Zobrazit detaily kontaktu"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS odeslána"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "NaÄtení zprávy se nezdaÅ™ilo"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Odeslání MMS zprávy se nezdařilo"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Před."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "NepÅ™eÄt."
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Přesunout do telefonu"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Duplicitní příjemce"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Bylo dosaženo maximálního poÄtu příjemců (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Do"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Nahrát zvuk"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Nahrát video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Změněno na MMS zprávu"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Změněno na SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "K dispozici je %d příloh. Vyberte maximálně %d příloh"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "NepodaÅ™ilo se pÅ™ipojit vÅ¡echny soubory. Maximální kapacita přílohy je %d kB. Chcete pokraÄovat?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Velikost písma"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Režim vytváření"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimediální zpráva."
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Bez předmětu"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Středisko služeb"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Zvolte adresu"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Přesunout na SIM kartu"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Chystáte se pÅ™ejít do režimu online (%s). Chcete pokraÄovat?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Odesl. zn."
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Neplatný příjemce"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Neplatní příjemci"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Nelze přehrát během hovoru"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Nelze uložit v režimu velkokapacitního paměťového zařízení"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Zrušit aktuální zprávu?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Vybráno"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Odstranit?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Nelze připojit. Maximální velikost souborů je %d kB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Zakázáno"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Nelze předat dál.\nSoubor je zamknut proti předávání dál"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Plánovaná zpráva"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Zásady zabezpeÄení omezují vytváření textových zpráv"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "PÅ™idávání. PoÄkejte prosím..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresa střediska služeb"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Nevyžádané zprávy"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Velké"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normální"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Malé"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Naplánovanou zprávu nelze odeslat. Nastavte jiný Äas"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datum a Äas"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nebyli přidání žádní příjemci. Zadejte příjemce"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Možnosti odesílání"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Typ upozornění na příjem"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normální"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Odesílání SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Příjemci"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Opakovat"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Zpráva"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Jednou"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3krát"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5krát"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Jsem v nouzové situaci. Prosím, pomozte mi."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM karta není vložena"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Fotografovat"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Nahrávání videoklipů"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Nahrát zvuk"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB zprávy"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Zprávy na SIM kartě"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Doba trvání musí být delší než %d sekund"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Obsah nelze přidat"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Vybrat příjemce"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Zobrazit kontakty"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Doba trvání (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Obrázek je příliš velký. Komprimování..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Zpráva byla uložena jako koncept"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Další"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Koncept"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Interval zobrazení snímku"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Odeslat e-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Vložené položky"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Připojené položky"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "Přílohy (%d)"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Plánovaná\nzpráva"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Doba trvání\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Použít jiné kont. info"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Tato zpráva obsahuje soubor, který není uveden."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Tato zpráva zahrnuje připojené soubory, které nejsou zobrazeny"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Uložit vše"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Koncepty"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Zpráva bude obnovena"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Naplánovaná zpráva bude zrušena"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopírovat text zpr."
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Zobr. detaily zprávy"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Zamknuté zprávy"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Složky zpráv"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokovat"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopírovat do telefonu"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Zpráva byla zkopírována ze SIM karty"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Zrušit zprávu"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Přílohy"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Nepodařilo se odeslat zprávu"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Bylo dosaženo maximálního poÄtu znaků"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Obnovení..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Bez příloh"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Zkopírováno do schránky"
+
diff --git a/main/po/da.po b/main/po/da.po
new file mode 100644
index 0000000..63f6989
--- /dev/null
+++ b/main/po/da.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Der kan ikke åbnes"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Hent"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Kunne ikke flytte"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Det maksimale antal sider er nået"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Begrænset tilstand. Kan ikke indsætte begrænset indhold"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Sendt"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Udløbet"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Læs"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Henter..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Indsæt et SIM-kort for at sende meddelelser. Denne meddelelse vil blive gemt i Udbakken"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Indtast kanalnummer"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 meddelelse valgt"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d meddelelser valgt"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Forhåndsvisning"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Filnavnet findes allerede"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Ingen meddelelser"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Føj til kontakt"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Slet"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Kunne ikke sende meddelelse"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Tag billede"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Ingen adresse"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Vedh. Elementliste"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatisk overførsel"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Gruppemeddelelser"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Center %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Brugerdefineret tid"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Leveringsrapport"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Afsendelse mislykkedes"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Fra"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Indsat elementliste"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Meddelelsen er leveret"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Meddelelsen er modtaget"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Ledig"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Advarsel"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Sendt"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Push-meddelelser"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Læsningsrapport"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Modtaget"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuelt"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Afvis"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Modtagelsesindstillinger"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Anmod om leveringsrapport"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Anmod om læsningsrapport"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Begrænset"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Lav"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Haster"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritet"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Send læsningsrapport"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Sidevarighed"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS-meddelelser"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS-meddelelser"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Størrelse i alt"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM indhold"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Elementliste"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekunder"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekunder"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekunder"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Hjemmenetværk"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Installér"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Roaming"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Vis kontaktdetalje"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multimediemeddelelse er sendt"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Hentning af meddelelse mislykkedes"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Afsendelse af multimediemeddelelse mislykkedes"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Vid.send"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Ulæst"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Flyt til telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Kopierede modtagere"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Det maksimale antal modtagere (%d) er nået"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Til"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Optag lyd"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Optag videoklip"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Ændret til MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Ændret til SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d vedhæftninger tilgængelige. Vælg op til %d vedhæftninger"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Kan ikke vedhæfte alle filer. Maksimal kapacitet for vedhæftning %d KB. Fortsæt?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Skriftstørrelse"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Oprettelsestilstand"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimediemeddelelse"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Intet emne"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Tjenestecentral"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Vælg adresse"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Flyt til SIM-kort"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Du er ved at gå online(%s). Vil du fortsætte?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Send igen"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Ugyldig modtager"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Ugyldige modtagere"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Kunne ikke afspille under opkald"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Kan ikke gemme lagringsmedietilstand"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Annullér aktuel meddelelse?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Valgte"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Slet?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Kan ikke tilknytte. Maks. størrelse for filer er %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Begrænset"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Kan ikke videresende.\nFilen er låst mod videresendelse"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Planlagt meddelelse"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Sikkerhedspolitikken begrænser udfærdigelse af tekstmeddelelser"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Tilføjer. Vent..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresse på tjenestecentral"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spam-meddelelser"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Stor"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Lille"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Planlagt meddelelse blev ikke sendt. Indstil et andet tidspunkt"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Dato og tid"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimediemeddelelser"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Ingen modtagere tilføjet. Indtast modtagere"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Afsendelsesindstillinger"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Modtager advarselstype"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Sender SOS-meddelelse"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Modtagere"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Gentag"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Meddelelse"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Én gang"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 gange"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 gange"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Jeg er i nød. Hjælp mig!"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM-kort er ikke indsat"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Tag billede"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Optag video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Optag lyd"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Gruppemeddelelser"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM-kortmeddelelser"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Varighed skal være længere end %d sekunder"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Kan ikke tilføje indhold"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Vælg modtagere"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Vis kontakter"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Varighed (%s sek.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Billede for stort. Komprimerer..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Meddelelse gemt som udkast"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Anden"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Udkast"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Varighed for dias"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Send e-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Indsatte elementer"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Vedhæftede filer"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d vedhæftninger"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Planlagt\nbesked"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Varighed\n(%d sek.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Brug andre kontaktopl."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Denne meddelelse indeholder en vedhæftet fil, som ikke vises."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Denne meddelelse indeholder vedhæftede filer, der ikke vises"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Gem alle"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Kladdemeddelelser"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Meddelelse bliver gendannet"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Planlagt meddelelse vil blive annulleret"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopier medd.tekst"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Vis medd.detaljer"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "LÃ¥ste meddelelser"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Meddelelsesbokse"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Bloker"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopiér til telefon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Meddelelse kopieret fra SIM-kort"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Annuller meddelelse"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Vedhæftede filer"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Meddelelse om mislykket afsendelse"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Det maksimale antal tegn er nået"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Gendanner..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Ingen vedhæftede filer"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopieret til udklipsholder"
+
diff --git a/main/po/de_DE.po b/main/po/de_DE.po
index 49ec76f..53da88f 100755..100644
--- a/main/po/de_DE.po
+++ b/main/po/de_DE.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
@@ -253,26 +103,14 @@ 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"
+msgstr "WAP-Push"
msgid "IDS_MSGF_BODY_READ_REPORT"
msgstr "Lesebericht"
@@ -284,14 +122,11 @@ msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
msgstr "Manuell"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
-msgstr "Abweisen"
+msgstr "Ablehnen"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "Empfangsoptionen"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "Antwortpfad"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
msgstr "Zustellbericht anfordern"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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."
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "Sicherheitsrichtlinie schränkt das Verfassen von SMS ein"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "Hinzufügen. Bitte warten..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresse der SMS-Zentrale"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spam-Nachrichten"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Groß"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Klein"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Sehr klein"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Geplante Nachricht kann nicht gesendet werden. Andere Zeit festlegen."
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datum und Uhrzeit"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Keine Empfänger hinzugefügt. Empfänger hinzufügen."
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Sendeoptionen"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Benachrichtigungston"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "Notruf"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "SOS senden"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Empfänger"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Wiederholen"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Nachricht"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Einmal"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 Mal"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 Mal"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Ich befinde mich in einer Notsituation! Bitte helfen Sie mir."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM nicht eingelegt"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Foto aufnehmen"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Video aufnehmen"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Ton aufzeichnen"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB-Nachrichten"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM-Karten-Nachrichten"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Länge muss mehr als %d Sekunden betragen."
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Inhalt kann nicht hinzugefügt werden"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Empfänger auswählen"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Kontakte anzeigen"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Dauer (%s Sek.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Bild zu groß. Komprimieren..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Nachricht als Entwurf gespeichert"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Andere"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Entwurf"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Anzeigedauer:"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "E-Mail senden"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Eingefügte Elemente"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Angehängte Elemente"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d Anhänge"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Geplante\nNachricht"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Dauer:\n(%d Sek.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Andere Kontaktinfos verw."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Diese Nachricht enthält angehängte Dateien, die nicht angezeigt werden."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Diese Nachricht umfasst angehängte, nicht angezeigte Dateien"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Alle speichern"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Nachrichtenentwürfe"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Nachricht wird wiederhergestellt"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Geplante Nachricht wird abgebrochen"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Nachricht kopieren"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Details anzeigen"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Geschützte Nachrichten"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Nachrichtenkästchen"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Sperren"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Ins Telefon kopieren"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Nachricht von SIM-Karte kopiert"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Nachricht stornieren"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Anhänge"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Nicht gesendete Nachrichten"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Maximal zulässige Zeichenanzahl erreicht."
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Wiederherstellung wird durchgeführt..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Keine Anhänge"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "In Zwischenablage kopiert"
+
diff --git a/main/po/el_GR.po b/main/po/el_GR.po
index 2efdcf9..6c7d91b 100755..100644
--- a/main/po/el_GR.po
+++ b/main/po/el_GR.po
@@ -7,15 +7,9 @@ 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 "ΠεÏιοÏισμός. Δεν είναι δυνατή η εισαγωγή απαγοÏευμένου πεÏιεχομένου"
@@ -31,54 +25,18 @@ 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 "ΠÏοεπισκόπηση"
@@ -88,156 +46,48 @@ 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 "Το μήνυμα παÏαδόθηκε"
@@ -253,26 +103,14 @@ 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"
+msgstr "ΜηνÏματα Push"
msgid "IDS_MSGF_BODY_READ_REPORT"
msgstr "ΑναφοÏά ανάγνωσης"
@@ -289,9 +127,6 @@ msgstr "ΑπόÏÏιψη"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "Επιλογές λήψης"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "ΔιαδÏομή απάντησης"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
msgstr "Αίτηση αναφοÏάς παÏάδοσης"
@@ -301,12 +136,6 @@ 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 "Χαμηλή"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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 δευτεÏόλεπτα"
@@ -400,12 +187,6 @@ 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 "ΠÏοβολή λεπτομεÏειών επαφής"
@@ -418,18 +199,6 @@ 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 "ΠÏοώθ."
@@ -439,132 +208,48 @@ 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 "Επιλογή διεÏθυνσης"
@@ -574,30 +259,9 @@ 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 "Μη έγκυÏος παÏαλήπτης"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "Η πολιτική ασφαλείας πεÏιοÏίζει τη σÏνÏ
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "Γίνεται Ï€Ïοσθήκη. ΠεÏιμένετε..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "ΔιεÏθυνση κέντÏου υπηÏεσίας"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "ΑνεπιθÏμητα μηνÏματα"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Μεγάλο"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Κανονική"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "ΜικÏή"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Δεν είναι δυνατή η αποστολή του Ï€ÏογÏαμματισμένου μηνÏματος. ΟÏίστε άλλη ÏŽÏα"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "ΗμεÏομηνία & ÏŽÏα"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Δεν έχουν Ï€Ïοστεθεί παÏαλήπτες. Εισάγετε παÏαλήπτες"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Επιλογές αποστολής"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Λήψη Ï„Ïπου ειδοποίησης"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Κανονική"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Αποστολή μηνÏματος SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "ΠαÏαλήπτες"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Επανάληψη"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Μήνυμα"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Μία φοÏά"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 φοÏές"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 φοÏές"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Î’Ïίσκομαι σε έκτακτη ανάγκη. Βοηθήστε με."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "Δεν έχει τοποθετηθεί SIM"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Λήψη φωτογÏαφίας"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Λήψη βίντεο"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "ΗχογÏάφηση"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "ΜηνÏματα εκπομπής κυψέλης"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "ΜηνÏματα κάÏτας SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Η διάÏκεια Ï€Ïέπει να είναι μεγαλÏτεÏη από %d δευτεÏόλεπτα"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "ΑδÏνατη η Ï€Ïοσθήκη πεÏιεχομένου"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Επιλογή παÏαλήπτη"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "ΠÏοβολή επαφών"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "ΔιάÏκεια (%s δευτ/τα)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Î Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î· εικόνα. Συμπίεση..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Αποθήκευση μηνÏματος ως Ï€ÏόχειÏο"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Άλλο"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "ΠÏόχειÏο"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "ΔιάÏκεια διαφάνειας"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Αποστολή email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Στοιχεία που έχουν εισαχθεί"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Συνημμένα στοιχεία"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d συνημμένα"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "ΠÏογÏαμ.\nμήνυμα"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "ΔιάÏκεια\n(%d δευτ.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "ΧÏ. στοιχ. άλλης επαφ."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Αυτό το μήνυμα πεÏιέχει ένα συνημμένο αÏχείο που δεν εμφανίζεται"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Αυτό το μήνυμα πεÏιέχει μεÏικά συνημμένα που δεν εμφανίζονται"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Αποθήκευση όλων"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "ΠÏόχειÏα μηνÏματα"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Θα γίνει επαναφοÏά του μηνÏματος"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Το Ï€ÏογÏαμματισμένο μήνυμα θα ακυÏωθεί"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "ΑντιγÏ. κειμέν. μηνυμ."
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "ΠÏοβολ.στοιχ.μηνÏμ."
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Κλειδωμένα μηνÏματα"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Φάκελοι μηνυμάτων"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Αποκλεισμός"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "ΑντιγÏαφή στο τηλέφωνο"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Το μήνυμα αντιγÏάφηκε από την κάÏτα SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "ΑκÏÏωση μηνÏματος"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Συνημμένα"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Αποστολή μηνÏματος αποτυχίας"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Ο μέγιστος αÏιθμός χαÏακτήÏων συμπληÏώθηκε"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "ΕπαναφοÏά..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "ΧωÏίς συνημμένα"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "ΑντιγÏάφηκε στο Ï€ÏόχειÏο"
+
diff --git a/main/po/en.po b/main/po/en.po
index 4380774..29ca2b1 100755..100644
--- a/main/po/en.po
+++ b/main/po/en.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
@@ -253,24 +103,12 @@ 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"
@@ -289,9 +127,6 @@ 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"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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"
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "Security policy restricts composing of text messages"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "Adding. Please wait..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Service centre address"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spam messages"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Large"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Small"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Unable to send scheduled message. Set another time"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Date and time"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimedia messages"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "No recipients added. Enter recipients"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Sending options"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Receiving alert type"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Sending SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Recipients"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Repeat"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Message"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Once"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 times"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 times"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "I am in an emergency. Please help me"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM not inserted"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Take picture"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Capture video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Record audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB messages"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM card messages"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Duration must be longer than %d seconds"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Unable to add content"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Select recipient"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "View contact"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Duration (%s secs)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Picture too large. Compressing..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Message saved as draft"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Other"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Draft"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Duration for slide"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Send email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Inserted items"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Attached items"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d attachments"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Scheduled\nmessage"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Duration\n(%d secs)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Use other contact info"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "This message includes an attached file not shown"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "This message includes attached files not shown"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Save all"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Draft messages"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Message will be restored"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Scheduled message will be cancelled"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copy message text"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "View message details"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Locked messages"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Message boxes"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Block"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copy to phone"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Message copied from SIM card"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Cancel message"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Attachments"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Sending failed message"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Maximum number of characters reached"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Restoring..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "No attachments"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copied to clipboard"
+
diff --git a/main/po/en_US.po b/main/po/en_US.po
new file mode 100644
index 0000000..d624fcc
--- /dev/null
+++ b/main/po/en_US.po
@@ -0,0 +1,504 @@
+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_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Maximum number of pages reached"
+
+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_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_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Enter channel number"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 message selected"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d messages 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_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Add to contact"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Discard"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Unable to send message"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Take photo"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "No address"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Attached item list"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Auto download"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Broadcast messages"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "center %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Custom time"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Delivery report"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Sending failed"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "From"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Inserted item list"
+
+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_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+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_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_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Low"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgent"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Priority"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Send read report"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Page duration"
+
+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_HEADER_DRM_CONTENT"
+msgstr "DRM content"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Item list"
+
+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_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_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_DUPLICATED_RECIPIENT"
+msgstr "Duplicated recipient"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Maximum number of recipients (%d) reached"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "To"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Record sound"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Record video"
+
+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_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d attachments available. Select up to %d attachments"
+
+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_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Font size"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Creation mode"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimedia message"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "No subject"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Service center"
+
+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_SK_RESEND"
+msgstr "Resend"
+
+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_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Discard current message?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Selected"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Delete?"
+
+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..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Service center address"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spam messages"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Large"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Small"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Unable to send scheduled message. Set another time"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Date and time"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimedia messages"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "No recipients added. Enter recipients"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Sending options"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Receiving alert type"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Sending SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Recipients"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Repeat"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Message"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Once"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 times"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 times"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "I am in an emergency. Please help me"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM not inserted"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Take picture"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Capture video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Record audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB messages"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM card messages"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Duration must be longer than %d seconds"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Unable to add content"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Select recipient"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "View contact"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Duration (%s sec)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Picture too large. Compressing..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Message saved as draft"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Other"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Draft"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Duration for slide"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Send email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Inserted items"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Attached items"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d attachments"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Scheduled\nmessage"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Duration\n(%d secs)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Use other contact info"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "This message includes an attached file not shown"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "This message includes attached files not shown"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Save all"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Draft messages"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Message will be restored"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Scheduled message will be canceled"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copy message text"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "View message details"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Locked messages"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Message boxes"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Block"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copy to phone"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Message copied from SIM card"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Cancel message"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Attachments"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Sending failed message"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Maximum number of characters reached"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Restoring..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "No attachments"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copied to clipboard"
+
diff --git a/main/po/es_ES.po b/main/po/es_ES.po
index 33f395b..c8c3bd7 100755..100644
--- a/main/po/es_ES.po
+++ b/main/po/es_ES.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
@@ -253,24 +103,12 @@ 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"
@@ -289,9 +127,6 @@ 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"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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."
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ 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..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Dirección del centro de servicios"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Mensajes de correo basura"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Grande"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Pequeño"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Diminuto"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "No se puede enviar el mensaje programado. Defina otra hora"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Fecha y hora"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Mensajes multimedia"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "No se han añadido destinatarios. Introduzca destinatarios"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Opciones de envío"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Recibiendo tipo de alerta"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "Emergencia"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Envío de mensaje de emergencia"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Destinatarios"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Repetir"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Mensajes"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Una vez"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 veces"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 veces"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Estoy en una emergencia. Ayúdenme, por favor"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM no insertada"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Hacer foto"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Capturar vídeo"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Grabar audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Mensajes de CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Mensajes de tarjeta SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "La duración debe superar los %d segundos"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "No se puede añadir contenido"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Seleccionar destinatario"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Ver contactos"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Duración (%s seg)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Imagen demasiado grande. Comprimiendo..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Mensaje guardado como borrador"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Otro"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Borrador"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Duración de la presentación de diapositiva"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Enviar correo electrónico"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Elementos insertados"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Elementos adjuntos"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d archivos adjuntos"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Mensaje\nprogramado"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Duración\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Usar info otros contac"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Este mensaje incluye un archivo adjunto que no se muestra"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Este mensaje incluye archivos adjuntos que no se muestran"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Guardar todo"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Mensajes de borrador"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Se restablecerá el mensaje"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Se cancelará el mensaje programado"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copiar texto del mensaje"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Ver detalles mens"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Mensajes bloqueados"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Buzón de mensajes"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Bloquear"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copiar en el teléfono"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Mensaje copiado desde la tarjeta SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Cancelar mensaje"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Archivos adjuntos"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Error al enviar mensaje"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Alcanzado el número máximo de caracteres"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Restaurando..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Sin archivos adjuntos"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado al portapapeles"
+
diff --git a/main/po/fi.po b/main/po/fi.po
new file mode 100644
index 0000000..c4e4730
--- /dev/null
+++ b/main/po/fi.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Ei voi avata"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Nouda"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Ei voi siirtää"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Sivujen enimmäismäärä on saavutettu"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Rajoitettu tila. Rajoitettua sisältöä ei voi lisätä"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Toimitettu"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Vanhentunut"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Lue"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Noudetaan..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Aseta SIM-kortti viestien lähettämiseksi. Viesti tallennetaan Lähetetyt-kansioon"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Syötä kanavanumero"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 viesti valittu"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d viestiä valittu"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Esikatselu"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Tiedostonimi on jo käytössä"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Ei viestejä"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Lisää yhteystietoon"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Hylkää"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Viestiä ei voi lähettää"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Ota valokuva"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Ei osoitetta"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Liitetiedostojen luettelo"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automaattinen lataus"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Tiedoteviestit"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Keskus %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Määritetty aika"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Toimitusraportti"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Lähetys epäonnistui"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Lähettäjä"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Lisätty kohdeluettelo"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Viesti toimitettu"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Viesti noudettu"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Vapaa"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Varoitus"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Lähetetty"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "t"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "kt"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Palveluviestit"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Lukuraportti"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Vastaanotettu"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuaalinen"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Hylkää"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Vastaanottoasetukset"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Pyydä toimitusraportti"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Pyydä lukuraportti"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Rajoitettu"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Matala"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normaali"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Kiireellinen"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Tärkeys"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Lähetä lukuraportti"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Sivun kesto"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Hätäviestit"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Tekstiviestit"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Koko yhteensä"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM-sisältö"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Kohdeluettelo"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekuntia"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekuntia"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekuntia"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Kotiverkko"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Asenna"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Vierailuverkko"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Näytä yhteystiedot"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multimediaviesti lähetetty"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Viestin nouto epäonnistui"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Multimediaviestin lähettäminen epäonnistui"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Siir."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Lukem."
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Siirrä puhelimeen"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Vastaanottaja esiintyy kahdesti"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Vastaanottajien enimmäismäärä (%d) on saavutettu"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Vastaanottaja"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Tallenna ääntä"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Tallenna video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Muutettu multimediaviestiksi"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Vaihdettu tekstiviestiksi"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d liitettä käytettävissä. Valitse enintään %d liitettä"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Kaikkia tiedostoja ei voi liittää. Liitetiedostojen enimmäiskapasiteetti on %d kt. Jatketaanko?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Kirjasinkoko"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Luontitila"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimediaviesti"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Ei aihetta"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Viestikeskus"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Valitse osoite"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Siirrä SIM-kortille"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Olet siirtymässä online-tilaan (%s). Jatketaanko?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Läh. uud."
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Virheellinen vast.ottaja"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Virheelliset vastaanottajat"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Puhelun aikana ei voi toistaa"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Ei voi tallentaa massamuistitilassa"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Hylätäänkö nykyinen viesti?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Valittu"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Poistetaanko?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Ei voi liittää. Tiedostojen enimmäiskoko on %d kt"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Rajoitettu"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Ei voi lähettää edelleen.\nTiedoston edelleenlähetys on estetty"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Ajoitettu viesti"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Suojauskäytäntö estää tekstiviestien kirjoittamisen"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Lisätään. Odota..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Viestikeskuksen osoite"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Roskapostiviestit"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Iso"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normaali"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Pieni"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tosi pieni"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Ajoitettua viestiä ei voi lähettää. Määritä toinen aika"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Päivämäärä ja aika"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimediaviestit"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Vastaanottajia ei lisätty. Anna vastaanottajat"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Lähetysasetukset"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Vastaanotettavan hälytyksen tyyppi"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "Hätäviesti"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normaali"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Hätäviestin lähetys"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Vastaanottajat"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Toista"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Viesti"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Kerran"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 kertaa"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 kertaa"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Olen hädässä. Auta minua."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM-korttia ei ole asetettu"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Ota kuva"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Kuvaa video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Tallenna ääntä"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB-viestit"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM-kortilla olevat viestit"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Keston on oltava enemmän kuin %d sekuntia"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Sisältöä ei voi lisätä"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Valitse vastaanottaja"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Tarkastele yhteystietoja"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Kesto (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Kuva on liian iso. Pakataan..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Viesti tallennettu luonnoksena"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Muu"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Vedos"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Dian kesto"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Lähetä sähköpostiviesti"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Lisätyt kohteet"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Liitetyt kohteet"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d liitettä"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Ajoitettu\nviesti"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Kesto\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Käytä muita yht.tiet."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Tähän viestiin sisältyy liitetiedosto, jota ei näytetä"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Tähän viestiin sisältyy liitetiedostoja, joita ei näytetä"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Tallenna kaikki"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Viestiluonnokset"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Viesti palautetaan"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Ajoitettu viesti peruutetaan"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopioi viestiteksti"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Näytä viestin tiedot"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Lukitut viestit"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Viesti-ikkunat"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Estä"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopioi puhelimeen"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Viesti on kopioitu SIM-kortilta"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Peruuta viesti"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Liitteet"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Lähetetään epäonnistunutta viestiä"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Merkkien enimmäismäärä saavutettu"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Palautetaan..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Ei liitteitä"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopioitu leikepöydälle"
+
diff --git a/main/po/fr_FR.po b/main/po/fr_FR.po
index 350d3c3..74c0520 100755..100644
--- a/main/po/fr_FR.po
+++ b/main/po/fr_FR.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
@@ -253,24 +103,12 @@ 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"
@@ -289,9 +127,6 @@ 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"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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."
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "La politique de sécurité limite la création de SMS"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "Ajout. Veuillez patienter..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresse du centre de service"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Messages Spam"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Grande"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Petite"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Minuscule"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Impossible d'envoyer un message programmé. Définissez un autre horaire"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Date et heure"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Aucun destinataire ajouté. Sélectionnez"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Options d'envoi"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Type d'alerte de réception"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Envoi de SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Destinataires"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Nombre de répétitions"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Message"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "1 fois"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 fois"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 fois"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Je suis en situation d'urgence. Aidez-moi s'il vous plaît."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "Carte SIM non insérée"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Photographier"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Capturer une vidéo"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Enregistrement audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Messages de diffusion"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Messages de la carte SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "La durée doit être supérieure à %d secondes"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Impossible d'ajouter du contenu"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Sélectionner un destinataire"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Voir le contact"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Durée (%s sec)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Image trop volumineuse. Compression..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Message enregistré comme brouillon"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Autre"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Brouil."
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Durée de la diapositive"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Envoyer un e-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Eléments insérés"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Pièces jointes"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d pièces jointes"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Message\nprogrammé"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Durée\n(%d s.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Util autr. infos cont."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Ce message comporte une pièce jointe non affichée"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Ce message inclut les fichiers joints non affichés"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Tout enregistrer"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Messages brouillons"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Le message sera restauré"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Le message programmé sera annulé"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copie message texte"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Aff. détails message"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Messages verrouillés"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Messageries"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Bloquer"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copier dans le téléphone"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Message copié à partir de la carte SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Annuler le message"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Pièce(s) jointe(s)"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Envoi du message d'échec"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Nb. max. de caractères atteint"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Restauration..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Pas de pièce jointe"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copié dans le Presse-papiers"
+
diff --git a/main/po/he.po b/main/po/he.po
new file mode 100644
index 0000000..9bbe12d
--- /dev/null
+++ b/main/po/he.po
@@ -0,0 +1,504 @@
+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_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+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_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "הכנס כרטיס SIM כדי לשלוח הודעות. ההודעה תישמר בתיבת דו×ר יוצ×"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "הזן מספר ערוץ"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "נבחרה הודעה ×חת"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_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_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "הוסף ל×יש קשר"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "מחק"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "×œ× × ×™×ª×Ÿ לשלוח ×ת ההודעה"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "×¦×œ× ×ª×ž×•× ×”"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "×ין כתובת"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "רשימת ×¤×¨×™×˜×™× ×ž×¦×•×¨×¤×™×"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "הורדה ×וטומטית"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "הודעות שידור"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "מרכז %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "שעה מות×מת ×ישית"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "דוח מסירה"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "השליחה נכשלה"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "מ×ת"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+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_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+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_REQUEST_DELIVERY_REPORT"
+msgstr "בקש דוח מסירה"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "בקש ×ישור קרי××”"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "מוגבל"
+
+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_SENDINGOPTION_PRIORITY"
+msgstr "עדיפות"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "שלח ×ישור קרי××”"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+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_HEADER_DRM_CONTENT"
+msgstr "תוכן DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+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_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_SK_FORWARD_LITE"
+msgstr "העבר"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "×œ× × ×§×¨×"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "העבר לטלפון"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "נמען משוכפל"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "הגעת למספר המרבי של × ×ž×¢× ×™× (‎%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "הזן ×©× × ×ž×¢×Ÿ ×ו מספר"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "הקלט צליל"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "הקלט ויד×ו"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "השתנה ל-MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "הוחלף ב-SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d ×§×‘×¦×™× ×ž×¦×•×¨×¤×™× ×–×ž×™× ×™×. בחר עד %d ×§×‘×¦×™× ×ž×¦×•×¨×¤×™×"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "×œ× × ×™×ª×Ÿ לצרף ×ת כל הקבצי×. הקיבולת המרבית ×œ×§×‘×¦×™× ×ž×¦×•×¨×¤×™× ×”×™× %d KB. להמשיך?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "גודל גופן"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "מצב יצירה"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "הודעת מולטימדיה"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "×ין נוש×"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+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_SK_RESEND"
+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_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "השלך הודעה נוכחית?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "נבחר"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+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 "מדיניות ×”×בטחה מגבילה חיבור SMS"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "מוסיף. ×× × ×”×ž×ª×Ÿ..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "כתובת מוקד הודעות"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "הודעה זבל"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "גדול"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "רגיל"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "קטן"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "קטן מ×וד"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "×œ× × ×™×ª×Ÿ לשלוח הודעה מתוזמנת. הגדר מועד ×חר"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "ת×ריך ושעה"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "הודעות מולטימדיה"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "×œ× × ×•×¡×¤×• נמעני×. הזן נמעני×"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "×פשרויות שליחה"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "סוג התר×ת קבלה"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "רגיל"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "SOS שליחת"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "נמעני×"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "חזרה"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "הודעה"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "חד-פעמי"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 פעמי×"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 פעמי×"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "×× ×™ במצוקה. × × ×¢×–×•×¨ לי."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM ×œ× ×”×•×›× ×¡"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "×¦×œ× ×ª×ž×•× ×”"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "×¦×œ× ×•×™×“×ו"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "הקלט שמע"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "הודעות CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "הודעות כרטיס SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "משך הזמן חייב להיות ×רוך יותר מ-%d שניות"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "×œ× × ×™×ª×Ÿ להוסיף תוכן"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "בחר נמען"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "הצג ×יש קשר"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "משך זמן (%s†שניות)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "התמונה גדולה מדי. דוחס..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "ההודעה נשמרה כטיוטה"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "×חר"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "טיוטה"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "משך זמן עבור שקופית"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "שלח דו×â€×œ"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "×¤×¨×™×˜×™× ×©×”×•×›× ×¡×•"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "×¤×¨×™×˜×™× ×ž×¦×•×¨×¤×™×"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d ×§×‘×¦×™× ×ž×¦×•×¨×¤×™×"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "הודעה\nמתוזמנת"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "משך\nâ€(‎%d שניות)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "פרטי ×יש קשר ×חרי×"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "הודעה זו כוללת קובץ מצורף ש×ינו מוצג"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "הודעה זו כוללת ×§×‘×¦×™× ×ž×¦×•×¨×¤×™× ×©××™× × ×ž×•×¦×’×™×"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "שמור הכל"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "הודעות טיוטה"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "ההודעה תשוחזר"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "ההודעה המתוזמנת תבוטל"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "העתק טקסט הודעה"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "צפה בפרטי הודעה"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "הודעות נעולות"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "תיבות הודעה"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "חסו×"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "העתק לטלפון"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "ההודעה הועתקה מכרטיס SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "בטל הודעה"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "×§×‘×¦×™× ×ž×¦×•×¨×¤×™×"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "שולח הודעה שנכשלה"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "הגעת למספר המרבי של תווי×"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "משחזר..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "×ין ×§×‘×¦×™× ×ž×¦×•×¨×¤×™×"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "הועתק ללוח"
+
diff --git a/main/po/hi.po b/main/po/hi.po
new file mode 100644
index 0000000..c24ca71
--- /dev/null
+++ b/main/po/hi.po
@@ -0,0 +1,504 @@
+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_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+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_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Messages भेजने के लिठकोई SIM कारà¥à¤¡ डालें। Message Outbox में सेव किया जाà¤à¤—ा"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "चैनल नंबर दरà¥à¤œ करें"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 सनà¥à¤¦à¥‡à¤¶ चयनित"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_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_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "संपरà¥à¤• में जोड़ें"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "डिसà¥à¤•à¤¾à¤°à¥à¤¡"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "सनà¥à¤¦à¥‡à¤¶ भेजने में अकà¥à¤·à¤®"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "फोटो लें"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "कोई पता नहीं"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "संलगà¥à¤¨ आइटेम सूची"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "सà¥à¤µà¤¤: डाउनलोड"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "पà¥à¤°à¤¸à¤¾à¤°à¤£ सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "केंदà¥à¤° %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "कसà¥à¤Ÿà¤® समय"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "वितरण रिपोरà¥à¤Ÿ"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "भेजना असफल हà¥à¤†"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "से"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+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_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+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_REQUEST_DELIVERY_REPORT"
+msgstr "वितरण रिपोरà¥à¤Ÿ के लिठअनà¥à¤°à¥‹à¤§"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "पठित रिपोरà¥à¤Ÿ के लिठअनà¥à¤°à¥‹à¤§"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "पà¥à¤°à¤¤à¤¿à¤¬à¤‚धित"
+
+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_SENDINGOPTION_PRIORITY"
+msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "पठित रिपोरà¥à¤Ÿ भेजें"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "पेज अवधि"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "आपातकाल सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "टेकà¥à¤¸à¥à¤Ÿ सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "कà¥à¤² आकार"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM सामगà¥à¤°à¥€"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+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_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_SK_FORWARD_LITE"
+msgstr "आगे"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "अपठित"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "फोन में ले जाà¤à¤‚"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "डà¥à¤ªà¥à¤²à¥€à¤•à¥‡à¤Ÿ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¥à¤¤à¤¾"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾à¤“ं की अधिकतम संखà¥à¤¯à¤¾ (%d) तक पहà¥à¤à¤š गया"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "को"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "धà¥à¤µà¤¨à¤¿ रिकॉरà¥à¤¡ करें"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "विडियो रिकॉरà¥à¤¡ करें"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "MMS में बदला गया"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "SMS में बदला गया"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d अटैचमेंटà¥à¤¸ उपलबà¥à¤§à¥¤ %d अटैचमेंटà¥à¤¸ तक चà¥à¤¨à¥‡à¤‚"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "सभी फाइलें संलगà¥à¤¨ करने में अकà¥à¤·à¤®à¥¤ अधिकतम अटैचमेंट कà¥à¤·à¤®à¤¤à¤¾ %d केबी है। जारी रखें?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "फॉनà¥à¤Ÿ आकार"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "निरà¥à¤®à¤¾à¤£ मोड"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "मलà¥à¤Ÿà¥€à¤®à¥€à¤¡à¤¿à¤¯à¤¾ सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "कोई विषय नहीं"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+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_SK_RESEND"
+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_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ सनà¥à¤¦à¥‡à¤¶ निरसà¥à¤¤ करें?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "चयनित"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+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 "जोड रहा है. कृपया पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "सेवा केनà¥à¤¦à¥à¤° पता"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "सà¥â€à¤ªà¥ˆà¤® सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "बड़ा"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "सामानà¥à¤¯"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "छोटा"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "छोटा"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "अनà¥à¤¸à¥‚चित सनà¥à¤¦à¥‡à¤¶ भेजने में अकà¥à¤·à¤®à¥¤ à¤à¤• और समय सेट करें"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "दिनांक और समय"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "मलà¥à¤Ÿà¥€à¤®à¥€à¤¡à¤¿à¤¯à¤¾ सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "कोई पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾ जोड़ा नहीं गया। पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾ दरà¥à¤œ करें"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "भेजनें के विकलà¥à¤ª"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "अलरà¥à¤Ÿ पà¥à¤°à¤•à¤¾à¤° पà¥à¤°à¤¾à¤ªà¥à¤¤ कर रहा है"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "आपातकाल"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "सामानà¥à¤¯"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "आपातकालीन भेज रहा है"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¥à¤¤à¤¾"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "दोहराà¤à¤"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "à¤à¤•à¤¬à¤¾à¤°"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 बार"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 बार"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "मैं आपात सà¥à¤¥à¤¿à¤¤à¤¿ में हूà¤à¥¤ कृपया मेरी मदद करें"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM नहीं डाली गई"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "तसà¥à¤µà¥€à¤° लें"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "वीडियो कैपà¥â€à¤šà¤° करें"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "ऑडियो रिकॉरà¥à¤¡ करें"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "सीम कारà¥à¤¡ सनà¥à¤¦à¥‡à¤¶"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "अवधि %d सेकंडà¥à¤¸ से अधिक होनी चाहिà¤"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "विषय वसà¥à¤¤à¥ जोड़ने में अकà¥à¤·à¤®"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "पà¥à¤°à¤¾à¤ªà¥â€à¤¤à¤•à¤°à¥à¤¤à¤¾ चà¥à¤¨à¥‡à¤‚"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "संपरà¥à¤• देखें"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "अवधि (%s सेकंड)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "चितà¥à¤° बहà¥à¤¤ बडा है। कंपà¥à¤°à¥‡à¤¸ हो रहा है..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "सनà¥à¤¦à¥‡à¤¶ डà¥à¤°à¤¾à¤«à¥à¤Ÿ के रूप में सेव किया"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "अनà¥à¤¯"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "डà¥à¤°à¤¾à¤«à¥à¤Ÿ"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "सà¥à¤²à¤¾à¤‡à¤¡ अवधि"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "ईमेल भेजें"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ आइटम"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "संलगà¥à¤¨ मदें"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d अटैचमेंटà¥à¤¸"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "निरà¥à¤§à¤¾à¤°à¤¿à¤¤\nसंदेश"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "अवधि\n(%d सेकंड)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "अनà¥à¤¯ संपरà¥à¤• जानकारी का उपयोग करें"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "इस सनà¥à¤¦à¥‡à¤¶ में अदृशà¥à¤¯ संलगà¥à¤¨ फ़ाइल शामिल हैं"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "इस सनà¥à¤¦à¥‡à¤¶ में अपà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ संलगà¥à¤¨ की गई फ़ाइलें शामिल हैं"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "सभी सेव करें"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "डà¥à¤°à¤¾à¤«à¤¼à¥à¤Ÿ संदेश"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "संदेश रीसà¥à¤Ÿà¥‹à¤° किठजाà¤à¤à¤—े"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "निरà¥à¤§à¤¾à¤°à¤¿à¤¤ संदेश रदà¥à¤¦ किया जाà¤à¤—ा"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "सनà¥à¤¦à¥‡à¤¶ टेकà¥â€à¤¸à¥â€à¤Ÿ कॉपी करें"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "सनà¥à¤¦à¥‡à¤¶ विवरण देखें"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "सनà¥à¤¦à¥‡à¤¶ लॉक किठगà¤"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Message बॉकà¥â€à¤¸à¥‡à¤œà¤¼"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "बà¥à¤²à¥‰à¤• करें"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "फोन में कॉपी करें"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "SIM कारà¥à¤¡ से सनà¥à¤¦à¥‡à¤¶ कॉपी किया गया"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "संदेश रदà¥à¤¦ करें"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "संलगà¥à¤¨à¤•"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "विफल सनà¥à¤¦à¥‡à¤¶ भेजा जा रहा है"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "वरà¥à¤£à¥‹ की संखà¥â€à¤¯à¤¾ अधिकतम पहà¥à¤à¤šà¥€"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "रीसà¥â€à¤Ÿà¥‹à¤° हो रहा है…"
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "कोई संलगà¥à¤¨à¤• नहीं"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ में कॉपी किया गया"
+
diff --git a/main/po/hr.po b/main/po/hr.po
new file mode 100644
index 0000000..8b2c9e8
--- /dev/null
+++ b/main/po/hr.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nemoguće otvoriti"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Preuzmi"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Nemoguće premjestiti"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Maks. broj stranica"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "OgraniÄeni naÄin rada. Nemoguće umetnuti ograniÄeni sadržaj"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "IsporuÄeno"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Isteklo"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "ProÄitano"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Preuzimanje..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Umetnite SIM karticu prije slanja poruke. Poruka spremljena u Odlazne"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Unesite broj kanala"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Odabrana 1 poruka"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d odabranih poruka"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Pregled"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Ime datoteke već postoji"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Nema poruka"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Dodaj kontaktu"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Odbaci"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Nemoguće poslati poruku"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Fotografiranje"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Nema adrese"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Privici"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Auto. skidanje"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Info poruke mreže"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centar %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Postavi"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Izvješće o isporuci"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Slanje neuspješno"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Od"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Umetnute stavke"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Poruka isporuÄena"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Poruka preuzeta"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Slobodno"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Upozorenje"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Poslano"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Push poruke"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "IzvjeÅ¡taj o Äitanju"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Primljeno"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "RuÄno"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Odbaci poziv"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Opcije primanja"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Izvješće isporuke"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Izvješće Äitanja"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "OgraniÄeno"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Niski"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normalni"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Visoki"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritet"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Slanje izvjeÅ¡taja Äitanosti"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Trajanje stranice"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS poruke"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS poruke"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Ukupna veliÄina"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM sadržaj"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Popis stavki"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sek"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sek"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sek"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "MatiÄna mreža"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instalirati"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Roaming"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Detalji kontakta"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS poslan"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Preuzimanje poruke neuspješno"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Neuspješno slanje MMS poruke"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Proslij."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "NeproÄitano"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Premjesti u telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Primatelji su duplicirani"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Maksimalni broj primatelja (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Za"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Snimi zvuk"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Video snimanje"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Promijenjeno na MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Promijenjeno u SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d privitaka dostupno. Odaberite do %d privitaka"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Nemoguće pridružiti sve datoteke. Maksimalna veliÄina privitka %d kB. Nastavak?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "VeliÄina slova"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "NaÄin sastavljanja"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Bez naslova"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centar za usluge"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Odaberite adresu"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Premjesti na SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Spajanje na internet (%s). Nastaviti?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Pon. pošalji"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Neispravan primatelj"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Greška primatelja"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Nemoguće reprod. tijekom poziva"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Nemoguće spremiti u naÄinu spremanja podataka"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Odbaciti trenutnu poruku?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Odabrano"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Obrisati?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Nemoguće pridružiti. Maks. veliÄina datoteka: %d kB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "OgraniÄeno"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "ProsljeÄ‘ivanje nemoguće\nDatoteka zakljuÄana za prosljeÄ‘ivanje"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Odgođeno slanje"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Sigurnosne odredbe ograniÄavaju sastavljanje SMS poruka"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Dodaje se. PriÄekajte..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresa centra za poruke"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Neželjene poruke"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Velika"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normalna"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Mala"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Nije moguće poslati zakazanu poruku. Postavite drugo vrijeme"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datum i vrijeme"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS poruke"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nema dodanih primatelja. Unesite primatelje"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Opcije slanja"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Vrsta obavjesti"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normalna"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Slanje SOS poruke"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Primatelji"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Ponavljanje"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Poruka"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "1 puta"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 puta"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 puta"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "U nevolji sam! Molim pomoć!"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "Umetnite SIM karticu"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Fotografiranje"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Snimanje videa"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Snimi zvuk"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB poruke"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Poruke na SIM kartici"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Trajanje mora biti dulje od %d sek"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Nemoguće dodati"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Odaberite primatelja"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Prikaz kontakta"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Trajanje (%s sek)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Slika prevelika. Sažimanje..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Poruka spremljena u Pripremu"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Ostalo"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Priprema"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Trajanje stranice"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Pošalji email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Umetnute stavke"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Privitak"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d privitaka"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Zakazana\nporuka"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Trajanje\n(%d sek)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Kor. dru. kontak. pod."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Poruka sadrži privitak koji nije prikazan"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Poruka sadrži privitke koji nisu prikazani"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Spremi sve"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Poruke iz pripreme"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Poruke će biti vraćene"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Zakazane poruke bit će otkazane"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopiraj tekst poruke"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Prikaz detalja"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "ZakljuÄane poruke"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Okviri poruka"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokiraj"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopiraj na telefon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Poruka kopirana sa SIM kartice"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Poništi poruku"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Privitak"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Slanje neuspješnih poruka"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Maks. broj znakova"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Vraćanje..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Bez privitaka"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopirano u međuspremnik"
+
diff --git a/main/po/hu.po b/main/po/hu.po
new file mode 100644
index 0000000..ea37cf1
--- /dev/null
+++ b/main/po/hu.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nem nyitható meg"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Fogadás"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Nem helyezhető át"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Elérte az oldalak maximális számát"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Korlátozott mód. Nem szúrható be korlátozott tartalom"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Kézbesítve"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Lejárt"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Elolvasva"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Fogadás..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Üzenetküldéshez helyezzen be SIM-kártyát. Az üzenet a Kimenő mappába kerül"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Adja meg a csatorna számát"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 üzenet kiválasztva"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d üzenet kiválasztva"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Előnézet"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Ez a fájlnév már létezik."
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Nincs üzenet"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Hozzáadás névjegyhez"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Elvetés"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Nem lehet elküldeni az üzenetet"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Fényképezés"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Nincs cím"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Csatolt tételek"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatikus letöltés"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Hálózati hírüzenetek"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "%d. központ"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Egyéni időpont"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Kézbesítési jelentés"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "A küldés sikertelen"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Feladó"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Beszúrt tétellista"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Az üzenet kézbesítve"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Az üzenet letöltve"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Szabad"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Figyelmeztetés"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Elküldve"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Push üzenetek"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Jelentést olvas"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Fogadva"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Kézi"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Elutasít"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Fogadás beállítások"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Kézbesítési jelentést kér"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Olvasási jelentést kér"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Korlátozva"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Alacsony"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normál"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Sürgős"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritás"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Olvasási jelentés küldése"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Oldal időtartama"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Segélykérő üzenetek"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Szöveges üzenetek"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Teljes méret"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM-tartalom"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Tételek listája"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 másodperc"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 másodperc"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 másodperc"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Saját hálózat"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Telepít"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Roamingban használt hálózat"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Névjegyadatok megtekintése"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multimédia üzenet elküldve"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Üzenet fogadása sikertelen"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "A multimédia üzenet elküldése nem sikerült"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Tov.k."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Olv.tlan"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Telefonra áthelyez"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Kétszer előforduló címzett"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Elérte a címzettek maximális számát (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Címzett"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Hangfelvétel"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Videófelvétel"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Ãtvált MMS-re"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "SMS-re módosítva"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d melléklet áll rendelkezésre. Legfeljebb %d mellékletet válasszon ki"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Nem lehet mindegyik fájlt csatolni. Összesen legfeljebb %d KB csatolható. Folytatja?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Betűméret"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Létrehozási mód"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimédia üzenet"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Üres tárgymező"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Szolgáltatásközpont"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Válasszon címet"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "SIM-kártyára áthelyez"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Kapcsolódni készül (%s). Folytatja?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Újraküld"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Érvénytelen címzett"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Érvénytelen címzettek"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Hívás közben nem lehet lejátszani"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Háttértár módban nem lehet menteni"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Elveti a jelenlegi üzenetet?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Kiválasztva"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Törli?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Nem csatolható. A maximális fájlméret %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Korlátozva"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Nem lehet továbbküldeni. A fájl védett a továbbküldés ellen"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Ütemezett üzenet"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "A biztonsági irányelv korlátozza a szöveges üzenetek írását"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Hozzáadás. Kis türelmet..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Szolgáltatóközpont címe"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Levélszemét"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Nagy"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normál"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Kicsi"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Nem lehet elküldeni az ütemezett üzenetet. Más időt állítson be"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Dátum és idő"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimédia üzenetek"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nem adott meg címzettet. Adja meg a címzetteket"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Küldés beállítások"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Fogadásjelzés típusa"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normál"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Segélykérő üzenet küldése"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Címzettek"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Ismétlés"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Ãœzenet"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Egyszer"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "Háromszor"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "Ötször"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Veszélyben vagyok. Segítséget kérek."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "Nincs behelyezve SIM"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Kép készítése"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Videó rögzítése"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Hang rögzítése"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Hírüzenetek"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM-üzenetek"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Az időtartamnak hosszabbnak kel lennie %d másodpercnél"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "A tartalom nem adható hozzá"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Címzett kiválasztása"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Névjegy megtekintése"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Időtartam (%s mp)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "A kép túl nagy. Tömörítés..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Üzenet piszkozatként mentve"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Egyéb"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Piszkoz."
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Dia időtartama"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "E-mail küldése"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Beszúrt tételek"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Csatolt tételek"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d melléklet"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Ütemezett\nüzenet"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Időtartam\n(%d mp)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Más kapcs.info. haszn."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Ez az üzenet nem megjeleníthető mellékletet tartalmaz"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Ez az üzenet megjelenítetlen csatolt fájlokat tartalmaz"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Összes mentése"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Piszkozatok"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Vissza fogja állítani az üzenetet"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Vissza fogja vonni az ütemezett üzenetet"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Üzenetszöv. másolása"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Ãœz.adatok megtekint."
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Védett üzenetek"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Ãœzenetablakok"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Letiltás"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Másolás telefonra"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Üzenet átmásolva a SIM kártyáról"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Üzenet visszavonása"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Mellékletek"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Sikertelen üzenet küldése"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Nincs hely több karakternek"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Visszaállítás..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Nincs melléklet"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "A vágólapra másolva"
+
diff --git a/main/po/id.po b/main/po/id.po
new file mode 100644
index 0000000..35e576b
--- /dev/null
+++ b/main/po/id.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Tidak bisa membuka"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Mendapatkan kembali"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Tidak bisa memindahkan"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Maksimum jumlah halaman tercapai"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Mode terbatas. Tidak bisa menyisipkan konten terbatas"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Terkirim"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Habis waktu"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Membaca"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Mendapatkan kembali..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Masukkan kartu SIM utk mengirim pesan. Pesan akan tersimpan di Kotak keluar"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Masukkan nomor saluran"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 pesan dipilih"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d pesan dipilih"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Tinjauan"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Nama file sudah ada"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Tdk ada pesan"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Tambah ke kontak"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Buang"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Tidak bisa mengirim pesan"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Ambil foto"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Tdk ada alamat"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Daftar item terlampir"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Otomatis download"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Pesan siaran"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Pusat %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Kustomisasi waktu"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Laporan pengiriman"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Pengiriman gagal"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Dari"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Dftr item tersisip"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Pesan dikirim"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Pesan ditelusuri"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Bebas"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Peringatan"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Terkirim"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Pesan push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Baca laporan"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Diterima"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manual"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Tolak"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Pilihan penerimaan"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Laporan permintaan pengiriman"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Baca laporan permintaan"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Terbatas"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Rendah"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Mendesak"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritas"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Kirim laporan baca"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Durasi halaman"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Pesan SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Pesan teks"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Ukuran total"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Konten DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Daftar item"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 detik"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 detik"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 detik"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Jaringan asal"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instal"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Jaringan luar negeri"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Lihat detail kontak"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Pesan multimedia terkirim"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Penelusuran pesan gagal"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Mengirim pesan multimedia gagal"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Teruskn"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Tak dibaca"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Pindah ke telepon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Penerima digandakan"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Jumlah maksimum penerima (%d) tercapai"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Ke"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Rekam suara"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Rekam video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Diubah ke MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Diubah ke SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d lampiran tersedia. Pilih hingga %d lampiran"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Tidak dapat melampirkan semua file. Kapasitas lampiran maksimum %d KB. Lanjutkan?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Ukuran huruf"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Mode kreasi"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Pesan multimedia"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Tanpa subjek"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Pusat layanan"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Pilih alamat"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Pindah ke SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Anda akan online (%s). Lanjutkan?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Krm ulang"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Penerima tidak berlaku"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Penerima tidak berlaku"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Tidak bisa memutar selama panggilan"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Tidak bisa menyimpan dalam mode Media penyimpan"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Buang pesan terkini?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Terpilih"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Hapus?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Tidak bisa melampirkan. Ukuran maksimum file adalah %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Terbatas"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Tdk dapat utk diteruskan.\nFile diteruskan terkunci"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Pesan terjadwal"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Kebijakan pengaman membatasi penulisan pesan teks"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Menambah. Harap tunggu..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Alamat pusat layanan"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Pesan spam"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Besar"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Kecil"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Tidak dapat mengirim pesan yang dijadwalkan. Atur waktu lain"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Tanggal dan waktu"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Pesan multimedia"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Tidak ada penerima ditambahkan. Masukkan penerima"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Pilihan pengiriman"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Menerima tipe alert"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Mengirim SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Penerima"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Mengulang"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Pesan"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Sekali"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 kali"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 kali"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Saya dalam situasi darurat. Tolong saya"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM tidak disisipkan"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Ambil Gambar"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Ambil video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Rekam audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Pesan CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Pesan kartu SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Durasi harus lebih lama dari %d detik"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Tidak bisa menambah konten"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Pilih penerima"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Lihat kontak"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Durasi (%s detik)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Gambar terlalu besar. Mengkompresi..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Pesan disimpan sebagai draft"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Lain"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Draft"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Durasi untuk slide"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Kirim email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Item yang dimasukkan"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Item terlampir"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d lampiran"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Pesan\nterjadwal"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Durasi\n(%d detik)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Pakai info kontak lain"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Pesan ini terdapat lampiran file tak ditampilkan"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Pesan ini termasuk file terlampir yang tidak diperlihatkan"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Simpan semua"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Pesan draf"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Pesan akan dipulihkan"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Pesan terjadwal akan dibatalkan"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Salin teks pesan"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Lihat rincian pesan"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Pesan terkunci"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Kotak-kotak pesan"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blok"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Salin ke telepon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Pesan disalin dari kartu SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Batalkan pesan"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Lampiran"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Mengirim pesan gagal"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Jumlah maksimum karakter tercapai"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Simpan ulang…"
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Tdk ada lampiran"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Disalin ke clipboard"
+
diff --git a/main/po/it_IT.po b/main/po/it_IT.po
index 9f3fcc6..ca744e3 100755..100644
--- a/main/po/it_IT.po
+++ b/main/po/it_IT.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
+msgstr "Annulla"
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"
@@ -253,24 +103,12 @@ 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"
@@ -289,9 +127,6 @@ 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"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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"
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "I criteri di protezione limitano la composizione degli SMS"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "Aggiunta. Attendere..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Indirizzo centro servizi"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Messaggi spam"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Grande"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normale"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Piccolo"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Minuscolo"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Impossibile inviare messaggio programmato. Impostare un orario diverso"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Data e ora"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nessun destinatario aggiunto. Immettere i destinatari"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Opzioni di invio"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Ricezione tipo di avviso"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normale"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Invio messaggio SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Destinatari"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Ripeti"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Messaggio"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Una volta"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 volte"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 volte"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Sono in una situazione di emergenza. Ho bisogno di aiuto."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM non inserita"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Scatta foto"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Registra video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Registra audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Messaggi CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Messaggi scheda SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "La durata deve essere superiore a %d secondi"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Impossibile aggiungere contenuto"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Seleziona destinatario"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Visualizza contatti"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Durata (%s sec)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Immagine troppo grande. Compressione..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Messaggio salvato come bozza"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Altri"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Bozza"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Durata per slide"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Invia e-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Elementi inseriti"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Elementi allegati"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d allegati"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Messaggio\nprogrammato"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Durata\n(%d sec)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Usa altre info contatto"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Il messaggio contiene un file allegato non visualizzato"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Questo messaggio include file allegati non visualizzati"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Salva tutti"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Bozze messaggi"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Il messaggio verrà ripristinato"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Il messaggio programmato verrà annullato"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copia testo messaggio"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Visual. dettagli msg"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Messaggi bloccati"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Cartelle messaggi"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blocca"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copia nel telefono"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Messaggio copiato dalla scheda SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Annulla messaggio"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Allegati"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Invio messaggio non riuscito"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Raggiunto numero massimo di caratteri"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Ripristino..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Nessun allegato"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Elemento copiato negli appunti"
+
diff --git a/main/po/ja_JP.po b/main/po/ja_JP.po
index 7458d55..1381216 100755..100644
--- a/main/po/ja_JP.po
+++ b/main/po/ja_JP.po
@@ -1,5 +1,5 @@
msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
-msgstr "é–‹ã‘​ã¾ã›ã‚“"
+msgstr "開らã​ã“ã¨ãŒâ€‹ã§ã​ã¾ã›ã‚“。"
msgid "IDS_MSGF_OPT_RETRIEVE"
msgstr "å—ä¿¡"
@@ -7,20 +7,14 @@ 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 "é…信完了"
+msgstr "é…信​完了"
msgid "IDS_MSGF_BODY_EXPIRED"
msgstr "期é™åˆ‡ã‚Œ"
@@ -31,92 +25,35 @@ 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 "ファイルåãŒæ—¢ã«ã‚ã‚Šã¾ã™ã€‚"
+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 "電話帳"
+msgstr "メッセージ​を​é€ä¿¡â€‹ã§ã​ã¾ã›ã‚“。"
msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
msgstr "カメラを起動"
@@ -124,120 +61,33 @@ 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 "メッセージ​ãŒâ€‹é…信​ã•ã‚Œã¾ã—ãŸ"
@@ -251,13 +101,7 @@ 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 "サイズ​ã¨â€‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„​ãŒâ€‹æœ€å¤§â€‹è¨±å¯å€¤â€‹ã‚’​超ãˆãŸâ€‹å ´åˆã¯â€‹é€šçŸ¥â€‹ã•ã‚Œâ€‹ã¾ã™"
+msgstr "é€ä¿¡å®Œäº†"
msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
msgstr "B"
@@ -265,12 +109,6 @@ 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 "プッシュ​メッセージ"
@@ -289,9 +127,6 @@ msgstr "æ‹’å¦"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "å—信​オプション"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "返信パス"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
msgstr "é…信​レãƒãƒ¼ãƒˆâ€‹ã‚’​è¦æ±‚​"
@@ -301,63 +136,24 @@ 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 "標準"
+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メッセージ"
@@ -367,21 +163,12 @@ 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秒"
@@ -400,12 +187,6 @@ 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 "連絡先​詳細​を​表示"
@@ -418,18 +199,6 @@ 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 "転é€"
@@ -439,132 +208,48 @@ 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 "アドレスã®é¸æŠž"
@@ -574,30 +259,9 @@ 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 "宛先​ãŒâ€‹ç„¡åŠ¹â€‹ã§ã™"
@@ -605,32 +269,20 @@ msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
msgstr "無効ãªå®›å…ˆ"
msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
-msgstr "通話中​ã«â€‹å†ç”Ÿâ€‹ã§ãã¾ã›ã‚“。"
+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ã§ã™ã€‚"
@@ -649,3 +301,204 @@ msgstr "SMSã®ä½œæˆã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒãƒªã‚·ãƒ¼ã«ã‚ˆã£ã¦åˆ¶é™ã•ã‚Œ
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "追加中​ã§ã™ã€‚​ã—ã°ã‚‰ã​ãŠå¾…ã¡â€‹ãã ã•ã„..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "サービス​センター​アドレス"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "迷惑​メッセージ"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "大"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "標準"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "å°"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "最å°"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "予約​メッ​セー​ジ​を​é€ä¿¡â€‹ã§ã​ã¾ã›â€‹ã‚“。​他​ã®â€‹æ™‚刻​を​設定​ã—ã¦â€‹ãã â€‹ã•â€‹ã„。"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "日付ã¨æ™‚刻"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "マルãƒãƒ¡ãƒ‡ã‚£ã‚¢â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "宛先ã¯è¿½åŠ ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚宛先を入力ã—ã¦ãã ã•ã„。"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "é€ä¿¡ã‚ªãƒ—ション"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "å—信​通知ã®ç¨®é¡ž"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "標準"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "SOSã®â€‹é€ä¿¡ä¸­"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "宛先"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "ç¹°ã‚Šè¿”ã—期間"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "メッセージ"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "1回ã®ã¿"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3回"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5回"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "緊急​ã§ã™ã€‚​助ã‘ã¦â€‹ãã ã•ã„"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM​ãŒâ€‹æŒ¿å…¥â€‹ã•ã‚Œã¦â€‹ã„ã¾ã›ã‚“"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "カメラを起動"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "動画撮影"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "録音"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CBメッセージ"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIMカード​メッセージ"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "表示時間ã¯%d秒以上ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "コンテンツ​を​追加​ã§ãã¾ã›ã‚“"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "宛先​を​é¸æŠžâ€‹ã—ã¦â€‹ãã ã•ã„"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "連絡先を表示"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "所è¦æ™‚é–“ (%s秒)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "ç”»åƒãŒå¤§ãã™ãŽã¾ã™ã€‚ 圧縮中..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "メッセージã¯ä¸‹æ›¸ãã«ä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "ãã®ä»–"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "下書ã"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "スライドã®å†ç”Ÿæ™‚é–“"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Eメールé€ä¿¡"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "挿入​アイテム"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "添付​アイテム"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d件​ã®â€‹æ·»ä»˜â€‹ãƒ•ã‚¡ã‚¤ãƒ«"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "é€ä¿¡â€‹äºˆå®š\nメッセージ"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "期間\n(%d秒)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "他​ã®â€‹é€£çµ¡â€‹å…ˆâ€‹æƒ…報​を​使用"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¯éžè¡¨ç¤ºã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¯éžè¡¨ç¤ºã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "å…¨ã¦ä¿å­˜"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "下書ã​メッセージ"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "メッセージを復元ã—ã¾ã™ã€‚"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "é€ä¿¡äºˆå®šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’キャンセルã—ã¾ã™ã€‚"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "本文を​コピー"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "メッセージ​詳細​ã®â€‹è¡¨ç¤º"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "ä¿è­·ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "メッセージ​ボックス"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "ブロック"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "本体ã«ã‚³ãƒ”ー"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "メッセージをSIMカードã‹ã‚‰ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "メッセージをキャンセル"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "ファイル添付"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "失敗​ã—ãŸâ€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€‹ã®â€‹é€ä¿¡â€‹ä¸­"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "最大​文字数​ã«â€‹é”ã—​ã¾ã—ãŸã€‚"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "復元中..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "未​添付"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "クリップボード​ã«â€‹ã‚³ãƒ”ー​ã—ã¾ã—ãŸã€‚"
+
diff --git a/main/po/ko_KR.po b/main/po/ko_KR.po
index 1ef07d6..8636dc2 100755..100644
--- a/main/po/ko_KR.po
+++ b/main/po/ko_KR.po
@@ -7,15 +7,9 @@ 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 "제한 모드입니다. ì œí•œëœ ì»¨í…츠는 삽입할 수 없습니다"
@@ -23,62 +17,26 @@ msgid "IDS_MSGF_BODY_DELIVERED"
msgstr "전송ë˜ì—ˆìŠµë‹ˆë‹¤"
msgid "IDS_MSGF_BODY_EXPIRED"
-msgstr "ê¸°í•œì´ ë§Œë£Œë˜ì—ˆìŠµë‹ˆë‹¤"
+msgstr "ë§Œë£Œëœ ì»¨í…츠"
msgid "IDS_MSGF_BODY_READ"
-msgstr "ì½ê¸°"
+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 "ì±„ë„ ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”"
+msgstr "메시지를 전송하기 위해서는 사용 가능한 SIM 카드를 넣으세요. 전송ë˜ì§€ 못한 메시지는 ë°œì‹ ëŒ€ê¸°í•¨ì— ì €ìž¥ë©ë‹ˆë‹¤"
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 "미리보기"
@@ -88,156 +46,48 @@ 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 "메시지가 전달ë˜ì—ˆìŠµë‹ˆë‹¤"
@@ -253,29 +103,17 @@ 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 "ì½ìŒ í™•ì¸ ë©”ì‹œì§€"
+msgstr "ì½ìŒ 확ì¸"
msgid "IDS_MSGF_BODY_RECEIVED"
msgstr "수신하였습니다"
@@ -289,9 +127,6 @@ msgstr "ê±°ì ˆ"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "수신 옵션"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "회신 경로"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
msgstr "수신 확ì¸"
@@ -301,12 +136,6 @@ 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 "ë‚®ìŒ"
@@ -316,48 +145,15 @@ 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메시지"
@@ -367,21 +163,12 @@ 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ì´ˆ"
@@ -400,12 +187,6 @@ 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 "ì—°ë½ì²˜ ìƒì„¸ì •ë³´ 보기"
@@ -418,18 +199,6 @@ 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 "전달"
@@ -439,132 +208,48 @@ 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 "메시지가 전달ë˜ì—ˆìŠµë‹ˆë‹¤"
+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 "주소를 ì„ íƒí•˜ì„¸ìš”"
@@ -574,30 +259,9 @@ 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 "수신ì¸ì´ 바르지 않습니다"
@@ -610,27 +274,15 @@ 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까지 입니다"
@@ -649,3 +301,204 @@ msgstr "보안 ì •ì±…ì— ë”°ë¼ ë¬¸ìž ë©”ì‹œì§€ ìž‘ì„±ì´ ì œí•œë©ë‹ˆë‹¤"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "추가 중... 잠시만 기다리세요"
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "서비스 센터 주소"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "스팸 메시지"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "í¬ê²Œ"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "보통"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "작게"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "아주 작게"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "예약 메시지를 전송할 수 없습니다. 다른 ì‹œê°„ì„ ì„¤ì •í•˜ì„¸ìš”"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "날짜 ë° ì‹œê°„"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "ì¶”ê°€ëœ ìˆ˜ì‹ ì¸ì´ 없습니다. 수신ì¸ì„ 입력하세요"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "전송 옵션"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "수신 알림 방법"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "보통"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "SOS메시지 보내기"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "수신ì¸"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "반복"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "메시지"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "한 번만"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3회"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5회"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "위급 ìƒí™©ìž…니다. ë„와주세요"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIMì´ ì‚½ìž…ë˜ì§€ 않았습니다"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "사진 ì´¬ì˜"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "ë™ì˜ìƒ ì´¬ì˜"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "오디오 ë…¹ìŒ"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "방송 메시지"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM 카드 메시지"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "표시 시간 ê°’ì€ %d초보다 커야 합니다"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "첨부할 수 없습니다"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "ìˆ˜ì‹ ì¸ ì„ íƒ"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "ì—°ë½ì²˜ 보기"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "표시 시간(%s초)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "ì‚¬ì§„ì´ ë„ˆë¬´ í½ë‹ˆë‹¤. 압축 중..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "메시지가 ìž„ì‹œ ë³´ê´€ ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "기타"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "임시 보관"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "슬ë¼ì´ë“œ ìž¬ìƒ ì‹œê°„"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "ì´ë©”ì¼ ë³´ë‚´ê¸°"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "ì¶”ê°€ëœ í•­ëª©"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "첨부파ì¼"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%dê°œì˜ ì²¨ë¶€íŒŒì¼"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "예약\n메시지"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "시간\n(%d초)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "다른 ì—°ë½ì²˜ ì •ë³´ 사용"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "ë©”ì‹œì§€ì— ìˆ¨ê²¨ì§„ 첨부파ì¼ì´ í¬í•¨ë˜ì–´ 있습니다"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "ë©”ì‹œì§€ì— ìˆ¨ê²¨ì§„ 첨부파ì¼ì´ í¬í•¨ë˜ì–´ 있습니다"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "ëª¨ë‘ ì €ìž¥"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "임시 메시지"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "메시지가 ë³µì›ë©ë‹ˆë‹¤"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "예약 메시지가 취소ë©ë‹ˆë‹¤"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "메시지 본문 복사"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "메시지 내용 보기"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "보호 메시지"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "메시지 보관함"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "차단"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "휴대í°ìœ¼ë¡œ 복사"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "SIM ì¹´ë“œì—ì„œ 메시지가 복사ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "예약 메시지 취소"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "첨부파ì¼"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "메시지를 전송하지 못하였습니다"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "ìž…ë ¥ 가능한 최대 글ìžìˆ˜ë¥¼ 초과하였습니다"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "복구 중..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "첨부파ì¼ì´ 없습니다"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "í´ë¦½ë³´ë“œì— 복사ë˜ì—ˆìŠµë‹ˆë‹¤"
+
diff --git a/main/po/lt.po b/main/po/lt.po
new file mode 100644
index 0000000..ac9bc97
--- /dev/null
+++ b/main/po/lt.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nepavyko atidaryti"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Atnaujinti"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Negalima perkelti"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Pasiektas didžiausias puslapių skaiÄius"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Draudžiamas režimas. Neįmanoma įterpti draudžiamo turinio"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Pristatyta"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Galiojimas pasibaigęs"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Skaityti"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "AtsiunÄiama..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Įdėkite SIM kortelę, kad galėtumėte siųsti pranešimus. Pranešimas bus išsaugotas Išsiųstuose"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Įveskite kanalo numerį"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Pasirinkta 1 žinutė"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Pasirinkta žinuÄių: %d"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Peržiūra"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Failas tokiu pavadinimu jau yra"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "ŽinuÄių nÄ—ra"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Įtraukti adresatą"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Panaikinti"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Negalima išsiųsti žinutės"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Fotografuoti"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "NÄ—ra adreso"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Pridėtas elementų sąrašas"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatinis atsisiuntimas"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Transliavimo žinutės"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centras %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Pasirinktu laiku"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Ataskaita apie pristatymÄ…"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Išsiųsti nepavyko"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Nuo"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Pridėtų elementų sąrašas"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Žinutė pristatyta"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Žinutė atnaujinta"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Laisva"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "PerspÄ—jimas"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Išsiųsta"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Naujienų žinutės"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Perskaitymo patvirtinimas"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Gauta"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Rankinis"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Atmesti"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Gavimo parinktys"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Prašyti pristatymo ataskaitos"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Prašyti perskaitymo patvirtinimo"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Apribota"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Nesvarbus"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Įprastas"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Skubu"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "PirmenybÄ—"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Siųsti ataskaitą apie perskaitymą"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Puslapio rodymo trukmÄ—"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS žinutės"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Teksto žinutės"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Bendras dydis"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM turinys"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Elementų sąrašas"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekundžių"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekundÄ—s"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekundÄ—s"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Vietos tinklas"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Įdiegti"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Tarptinklinis ryšys"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Peržiūrėti adresato informaciją"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Daugialypė žinutė išsiųsta"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Žinutės gauti nepavyko"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "MMS žinutės išsiųsti nepavyko"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Persiųs."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Neskaityta"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Perkelti į telefoną"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Du tokie pat gavÄ—jai"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Pasiektas didžiausias gavÄ—jų (%d) skaiÄius"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Kam"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Įrašyti garsą"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Įrašyti vaizdo įrašą"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Pakeista į MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Keisti į SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "Yra %d priedai (-ų). Pasirinkti iki %d priedų"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Neįmanoma pridėti visų failų. Maksimalus priedo dydis: %d KB. Tęsti?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Å rifto dydis"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Kūrimo režimas"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Daugialypė žinutė"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "NÄ—ra temos"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Paslaugų centras"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Pasirinkti adresÄ…"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Perkelti į SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Prisijungsite prie tinklo(%s). Tęsti?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Persiųsti"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Klaidingas gavÄ—jas"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Neteisingi gavÄ—jai"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Negalima paleisti skambuÄio metu"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Neįmanoma išsaugoti, kol veikia duomenų saugyklos režimas"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Atmesti dabartinę žinutę?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Pasirinkta"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Ar trinti?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Neįmanoma pridėti. Maksimalus failų dydis yra %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Apribota"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Persiųsti nepavyko.\nFailo persiuntimo galimybė užrakinta"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Suplanuota žinutė"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Saugos strategija riboja teksto žinuÄių kÅ«rimÄ…"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Pridedama. Palaukite..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Paslaugų centro adresas"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Brukalų žinutės"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Didelis"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Įprastas"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Mažas"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Neįmanoma išsiųsti suplanuotos žinutės. Nustatyti kitą laiką"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Data ir laikas"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Daugialypės žinutės"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nėra pridėtų gavėjų. Įveskite gavėjus"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Siuntimo parinktys"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "PriÄ—mimo signalo tipas"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Įprastas"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "SOS siunÄiama"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "GavÄ—jai"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Kartoti"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Žinutė"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "VienÄ… kartÄ…"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 kartus"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 kartus"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Man atsitiko bÄ—da. PadÄ—kite man."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM neįdėta"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Fotografuoti"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Filmuoti vaizdo įrašą"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Įrašyti garso įrašą"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Tinklo žinutės"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM kortelÄ—je esanÄios žinutÄ—s"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Trukmė turi būti ilgesnė nei %d sek."
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Įtraukti turinio nepavyko"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Pasirinkti gavÄ—jÄ…"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Rodyti adresatÄ…"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "TrukmÄ— (%s sek.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Per didelÄ— nuotrauka. Glaudinama..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Žinutė išsaugota kaip juodraštis"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Kiti"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Juodraš."
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "SkaidrÄ—s trukmÄ—"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Siųsti el. laišką"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Įterpti elementai"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "PridÄ—ti elementai"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "Priedai: %d"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Suplanuota\nžinutė"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "TrukmÄ—\n(%d sek.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Naud. kitÄ… kontak.inf."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Å ioje žinutÄ—je yra pridÄ—tas, taÄiau nerodomas failas."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Å ioje žinutÄ—je yra keli pridÄ—ti, taÄiau nerodomi failai."
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "IÅ¡saugoti viskÄ…"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Juodraštinės žinutės"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Žinutė bus atkurta"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Suplanuota žinutė bus atšaukta"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopij. žinut. tekstą"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Rodyti žin. inf."
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Užrakintos žinutės"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "ŽinuÄių dėžutÄ—s"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokuoti"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopijuoti į telefoną"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Iš SIM kortelės nukopijuota žinutė"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Atšaukti žinutę"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Priedai"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Pranešimas Išsiųsti nepavyko"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Pasiektas didžiausias simbolių skaiÄius"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Atkuriama..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Priedų nėra"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Nukopijuota į iškarpinę"
+
diff --git a/main/po/lv.po b/main/po/lv.po
new file mode 100644
index 0000000..4dc9750
--- /dev/null
+++ b/main/po/lv.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nevar atvērt"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Izgūt"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Nevar pÄrvietot"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Ir sasniegts maksimÄlais lapu skaits"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Ierobežots režīms. Nevar ievietot ierobežotu saturu"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "PiegÄdÄta"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Beidzies derīgums"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Lasīta"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Izgūst..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Lai sÅ«tÄ«tu ziņas, ievietojiet SIM karti. Ziņu saglabÄs mapÄ“ IzejoÅ¡Äs"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Ievadiet kanÄla numuru"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Izvēlēta 1 ziņa"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Izvēlētas %d ziņas"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Priekšskatījums"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Faila nosaukums jau pastÄv"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Nav ziņu"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Pievienot kontaktam"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Atmest"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Nevar nosūtīt ziņu"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Fotografēt"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Nav adreses"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Pievienoto objektu sarakts"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "AutomÄtiska lejupielÄde"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Apraides ziņas"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centrs %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "PielÄgots laiks"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "PiegÄdes atskaite"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "NeizdevÄs nosÅ«tÄ«t"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "No"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Ievietoto objektu saraksts"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Ziņa piegÄdÄta"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Ziņa ielÄdÄ“ta"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Brīvs"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "BrÄ«dinÄjums"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Nosūtīts"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Infoziņas"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Lasīšanas atskaite"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Saņemts"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "ManuÄli"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Noraidīt"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Saņemšanas iespējas"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "PieprasÄ«t piegÄdes atskaiti"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Pieprasīt lasīšanas atsk."
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Aizliegts"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Zema"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Parasta"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Steidzami"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "PrioritÄte"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Sūtīt lasīšanas atskaiti"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Lapas ilgums"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS ziņas"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Īsziņas"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Kopējais lielums"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM saturs"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Objektu saraksts"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekundes"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekundes"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekundes"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "MÄjas tÄ«kls"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instalēt"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Viesabonēšanas tīkls"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Skatīt kontakta datus"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multiziņa nosūtīta"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Ziņas izguve neizdevÄs"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Multivides ziņas sÅ«tÄ«Å¡ana neizdevÄs"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "PÄrsÅ«t."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Nelas."
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "PÄrvietot uz tÄlruni"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "AdresÄta dublikÄts"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Sasniegts maksimÄlais adresÄtu skaits (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Kam"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Ierakstīt skaņu"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Ierakstīt video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Mainīts uz multiziņu"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Mainīts uz īsziņu"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "Pieejami %d pielikumi. Izvēlieties līdz pat %d pielikumiem"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Nevar pievienot visus failus. MaksimÄlais pievienojamo failu lielums ir %d KB. Vai turpinÄt?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Fonta lielums"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Izveides režīms"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multiziņa"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Nav tēmas"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Pakalpojumu centrs"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Atlasiet adresi"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "PÄrvietot uz SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "JÅ«s grasÄties pÄriet uz tieÅ¡saistes(%s) režīmu. Vai turpinÄt?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Sūtīt vēlreiz"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "NederÄ«gs adresÄts"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "NederÄ«gi adresÄti"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Sarunas laikÄ nevar veikt atskaņoÅ¡anu"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Nevar saglabÄt, atrodoties lielapjoma atmiņas režīmÄ"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Vai izmest pašreizējo ziņu?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Izvēlēts"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Vai dzēst?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Nevar pievienot. MaksimÄlais failu lielums ir %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Aizliegts"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Nevar pÄrsÅ«tÄ«t.\nFails ir bloÄ·Ä“ts pret pÄrsÅ«tÄ«Å¡anu"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "IeplÄnotÄ ziņa"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Drošības politika ierobežo īsziņu izveidi"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Notiek pievienošana. Lūdzu, uzgaidiet..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Pakalpojuma centra adrese"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "SurogÄtpasta ziņas"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Liels"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Parasta"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Mazs"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "SÄ«ks"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Nevar nosÅ«tÄ«t ieplÄnoto ziņu. Iestatiet citu laiku"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datums un laiks"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multiziņas"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nav pievienots neviens adresÄts. Ievadiet adresÄtus"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Sūtīšanas iespējas"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "SaņemÅ¡anas signÄla veids"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Parasta"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "SOS sūtīšana"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "AdresÄti"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "AtkÄrtot"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Ziņa"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Vienu reizi"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "trīsreiz"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "piecreiz"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Man radusies ÄrkÄrtas situÄcija. LÅ«dzu, palÄ«dzi."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM karte nav ievietota"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Fotografēt"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Uzņemt videoklipu"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Ierakstīt skaņu"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Šūnu apraides ziņas"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM kartes ziņas"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Ilgumam jÄbÅ«t garÄkam par %d sekundÄ“m"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Nevar pievienot saturu"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "AdresÄta izvÄ“le"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Skatīt kontaktu"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Ilgums (%s s.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Attēls par lielu. Notiek saspiešana..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Ziņa saglabÄta kÄ melnraksts"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Cits"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Melnr."
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Slaida ilgums"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Sūtīt e-pasta ziņu"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Ievietotie objekti"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Pievienotie objekti"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d pielikumi"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "IeplÄnota\nziņa"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Ilgums\n(%d sek.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Izm. citu kontaktinf."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Å ai ziņai ir pievienoti daži faili, kas netiek rÄdÄ«ti."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Å ajÄ ziÅ†Ä ir pievienoti faili, kurus nerÄda"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "SaglabÄt visu"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Ziņu melnraksti"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Ziņa tiks atjaunota"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "IeplÄnotÄ ziņa tiks atcelta"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopēt ziņas tekstu"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Skatīt ziņas datus"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "BloÄ·Ä“tÄs ziņas"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Ziņu pastkastes"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "BloÄ·Ä“t"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "KopÄ“t tÄlrunÄ«"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Ziņa nokopēta no SIM kartes"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Atcelt ziņu"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Pielikumi"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Ziņa par neveiksmīgu nosūtīšanu"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Sasniegts maksimÄlais rakstzÄ«mju skaits"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Atjauno..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Nav pielikumu"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopēts starpliktuvē"
+
diff --git a/main/po/ms.po b/main/po/ms.po
new file mode 100644
index 0000000..35ee30e
--- /dev/null
+++ b/main/po/ms.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Tidak boleh membuka"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Dapat semula"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Tidak boleh alih"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Bilangan maksimum halaman dicapai"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Mod terhad. Tidak dapat memasukkan kandungan terhad"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Dihantar"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Telah tamat tempoh"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Baca"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Mendpt semula..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Masukkan kad SIM utk menghantar mesej. Mesej akan disimpan ke Peti keluar"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Masukkan nombor saluran"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 mesej dipilih"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d mesej dipilih"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Pratonton"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Nama fail telah wujud"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Tiada mesej"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Tambah ke kenalan"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Buang"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Tidak boleh menghantar mesej"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Tangkap foto"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Tiada alamat"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Senarai item yang dilampirkan"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Muat turun auto"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Mesej siaran"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "%d tengah"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Masa langganan"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Laporan penghantaran"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Penghantaran gagal"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Daripada"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Senarai perkara dimasukkan"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Mesej diserahkan"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Mesej didapatkan semula"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Bebas"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Amaran"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Dihantar"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Mesej tolakan"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Laporan baca"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Diterima"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manual"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Tolak"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Pilihan penerimaan"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Minta laporan penghantaran"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Minta laporan baca"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Terhad"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Rendah"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Biasa"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Penting"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Keutamaan"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Hantar laporan baca"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Tempoh halaman"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Mesej SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Mesej teks"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Jumlah saiz"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Kandungan DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Senarai item"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 saat"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 saat"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 saat"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Rangkaian rumah"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Pasang"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Rangkaian asing"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Lihat butiran kenalan"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Mesej multimedia dihantar"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Mendapatkan semula mesej gagal"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Penghantaran mesej multimedia gagal"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "K'mukakn"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Nyahbaca"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Pindah ke telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Penerima dipenduakan"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Bilangan maksimum penerima (%d) dicapai"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Kpd"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Rakam bunyi"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Rakam video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Tukar ke MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Tukar ke SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d lampiran tersedia. Pilih sehingga %d lampiran"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Tidak boleh melampirkan semua fail. Muatan maksimum lampiran ialah %d KB. Teruskan?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Saiz fon"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Mod cipta"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Mesej multimedia"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Tiada subjek"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Pusat perkhidmatan"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Pilih alamat"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Pindah ke SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Anda akan ke dalam talian (%s). Teruskan?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Htr smula"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Penerima tidak sah"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Penerima tidak sah"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Tdk dpt memainkan semasa panggilan"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Tidak boleh menyimpan semasa dalam mod storan besar"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Buang mesej semasa?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Dipilih"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Padam?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Tdk dpt melampirkan. Saiz fail maksimum ialah %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Terhad"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Tdk dpt memajukan.\nFail berkunci"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Mesej berjadual"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Polisi keselamatan melarang mengarang mesej teks"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Menambah. Sila tunggu..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Alamat pusat perkhidmatan"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Mesej spam"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Besar"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Biasa"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Kecil"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Kecil"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Tidak dapat menghantar mesej berjadual. Tetapkan masa yang lain"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Tarikh dan masa"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Mesej multimedia"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Tiada penerima ditambah. Masukkan penerima"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Pilihan penghantaran"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Menerima jenis peringatan"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Biasa"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Menghantar SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Penerima"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Ulang"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Mesej"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Sekali"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 kali"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 kali"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Saya dalam kecemasan. Sila bantu saya"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM tidak disisipkan"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Tangkap gambar"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Ambil video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Rakam audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Mesej CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Mesej kad SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Tempoh mesti lebih lama daripada %d saat"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Tidak boleh menambah kandungan"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Pilih penerima"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Lihat kenalan"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Tempoh (%s saat)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Gambar terlalu besar. Memampatkan..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Mesej disimpan sebagai draf"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Lain"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Draf"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Tempoh untuk slaid"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Hantar emel"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Item yang dimasukkan"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Perkara yang dilampirkan"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d lampiran"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Mesej\nberjadual"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Tempoh\n(%d saat)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Guna maklumt knln lain"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Mesej ini merangkumi fail lampiran yang tidak ditunjukkan"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Mesej ini termasuk fail lampiran yang tidak ditunjukkan"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Simpan semua"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Mesej draf"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Mesej akan dipulihkan"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Mesej berjadual akan dibatalkan"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Salin teks mesej"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Lihat butiran mesej"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Mesej dikunci"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Peti mesej"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Sekat"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Salin ke telefon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Mesej disalin dari kad SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Batal mesej"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Lampiran"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Mesej penghantaran gagal"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Bilangan maksimum aksara dicapai"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Memulih…"
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Tiada lampiran"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Disalin ke papan klip"
+
diff --git a/main/po/nl_NL.po b/main/po/nl_NL.po
index 90f0eda..496d55c 100755..100644
--- a/main/po/nl_NL.po
+++ b/main/po/nl_NL.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
@@ -253,24 +103,12 @@ 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"
@@ -289,9 +127,6 @@ 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"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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."
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "Beveiligingsbeleid legt beperkingen op voor SMS-berichten"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "Toevoegen. Even geduld..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adres servicecentrum"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spamberichten"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Groot"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normaal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Klein"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Extra klein"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Kan gepland bericht niet verzenden. Stel een andere tijd in"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datum en tijd"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS-berichten"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Geen ontvangers toegevoegd. Geef ontvangers in"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Verzendopties"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Alarmtype ontvangen"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normaal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "SOS wordt verzonden"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Ontvangers"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Herhalen"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Bericht"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Eenmalig"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 keer"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 keer"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Ik ben in gevaar. Help me."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM niet geplaatst"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Foto maken"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Video opnemen"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Geluid opnemen"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Infoberichten"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM-kaartberichten"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Duur moet langer zijn dan %d seconden"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Kan inhoud niet toevoegen"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Ontvanger selecteren"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Contacten weergeven"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Duur (%s sec)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Foto te groot. Comprimeren..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Bericht opgeslagen als concept"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Overige"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Concept"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Duur voor dia"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "E-mail verzenden"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Ingevoegde items"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Bijlagen"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d bijlagen"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Gepland\nbericht"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Duur\n(%d sec)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Andere contactgegevens"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Dit bericht bevat een bijlage die niet wordt weergegeven"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Dit bericht bevat niet getoonde bijlagen"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Alles opslaan"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Conceptberichten"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Bericht wordt hersteld"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Gepland bericht wordt geannuleerd"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Berichttekst kopiëren"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Berichtdetails tonen"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Vergrendelde berichten"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Postvakken"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokkeren"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopiëren naar telefoon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Bericht gekopieerd van SIM-kaart"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Bericht annuleren"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Bijlagen"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Bericht “Verzenden misluktâ€"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Maximumaantal tekens bereikt"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Herstellen..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Geen bijlagen"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Gekopieerd naar klembord"
+
diff --git a/main/po/no.po b/main/po/no.po
new file mode 100644
index 0000000..5ca260f
--- /dev/null
+++ b/main/po/no.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Kan ikke åpne"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Hent"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Kan ikke flytte"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Det maksimale antall sider er nådd"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Begrenset modus. Kan ikke sette inn begrenset innhold"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Levert"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Utløpt"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Lest"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Henter..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Sett inn et SIM-kort for å sende meldinger. Meldinger vil lagres i utboksen"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Angi kanalnummer"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 melding valgt"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d meldinger valgt"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Forhåndsvisning"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Filnavn allerede i bruk"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Ingen meldinger"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Legg til kontakt"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Forkast"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Kan ikke sende melding"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Ta bilde"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Ingen adresse"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Vedlagt elementliste"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatisk nedlasting"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Kringkastingsmeldinger"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Senter %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Egendefinert tid"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Leveringsrapport"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Mislykket..."
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Fra"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Innsatt elementliste"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Melding levert"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Melding hentet"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Ledig"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Advarsel"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Sendt"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Tjenestemeldinger"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Leserapport"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Mottatt"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuelt"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Avvis"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Mottaksalternativer"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Be om leveringsrapport"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Be om leserapport"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Begrenset"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Lav"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Haster"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritet"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Send leserapport"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Sidevarighet"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS-meldinger"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Tekstmeldinger"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Total størrelse"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM-innhold"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Elementliste"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekunder"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekunder"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekunder"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Hjemmenettverk"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Installer"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Roaming-nettverk"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Vis kontaktdetalj"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS-melding sendt"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Kunne ikke hente melding"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Sending av mulitmediamelding feilet"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Vid.send"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Ulest"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Flytt til telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Duplisert mottaker"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Maksimalt antall mottakere (%d) er nådd"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Til"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Spill inn lyd"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Spill inn video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Endret til MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Endret til SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d vedlegg tilgjengelig. Velg opptil %d vedlegg"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Kan ikke legge ved alle filer. Maksimal kapasitet for vedlegg er %d kB. Fortsette?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Skriftstørrelse"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Opprettelsesmodus"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS-melding"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Intet emne"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Tjenestesentral"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Velg adresse"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Flytt til SIM-kort"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Du er i ferd med å gå på nett (%s). Fortsette?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Send på nytt"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Ugyldig mottaker"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Ugyldige mottakere"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Kan ikke spille av under samtale"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Kan ikke lagre mens enheten er i masselagringsmodus"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Forkast aktuell melding?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Valgt"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Slette?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Kan ikke legge ved. Maksimal filstørrelse er %d kB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Begrenset"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Kan ikke legge til. Filen er beskyttet mot videresending"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Planlagt melding"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Sikkerhetspolicy begrenser skriving av tekstmeldinger"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Legger til. Vennligst vent..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Tjenestesenteradresse"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spammeldinger"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Stor"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Liten"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Veldig liten"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Kan ikke sende planlagt melding. Angi et annet tidspunkt"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Dato og tid"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS-meldinger"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Ingen mottakere lagt til. Angi mottakere"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Sendingsalternativer"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Mottar varseltype"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Sender SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Mottakere"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Gjenta"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Melding"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Én gang"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 ganger"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 ganger"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Jeg er i nød. Hjelp meg."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM-kort ikke satt inn"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Ta bilde"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Ta opp video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Spill inn lyd"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB-meldinger"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM-kortmeldinger"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Varigheten må være lenger enn %d sekunder"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Kan ikke legge til innhold"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Velg mottaker"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Vis kontakter"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Varighet (%s sek)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Bildet er for stort. Komprimerer..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Melding lagret som utkast"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Annet"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Utkast"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Varighet for bilde"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Send e-post"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Elementer som er satt inn"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Vedlagte elementer"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d vedlegg"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Planlagt\nmelding"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Varighet\n(%d sek)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Bruk annen kontaktinfo"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Denne meldingen inneholder ett filvedlegg som ikke vises"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Denne meldingen inkluderer vedlagte filer som ikke vises"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Lagre alle"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Kladdemeldinger"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Meldingen vil bli gjenopprettet"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Planlagt melding vil bli avbrutt"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopier meldingstekst"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Vis meldingsdetaljer"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "LÃ¥ste meldinger"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Meldingsbokser"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokker"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopier til telefon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Meldinger kopiert fra SIM-kort"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Avbryt melding"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Vedlegg"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Sending mislyktes-melding"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "NÃ¥dd maksimalt antall tegn"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Gjenoppretter..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Ingen vedlegg"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopiert til utklippstavle"
+
diff --git a/main/po/pl.po b/main/po/pl.po
new file mode 100644
index 0000000..6467fe0
--- /dev/null
+++ b/main/po/pl.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nie można otworzyć"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Pobierz wiad."
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Nie można przenieść"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Osiągnięto maksymalną liczbę stron"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Tryb ograniczony. Nie można wstawić zastrzeżonej treści"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Doręczono"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Wygasła wiadomość"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Przeczytano"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Pobieranie..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Włóż kartę SIM w celu wysłania wiadomości. Wiadomość zostanie zapisana w skrzynce nadawczej"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Wprowadź numer kanału"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Wybranych wiadomości: 1"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Wybranych wiadomości: %d"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "PodglÄ…d"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Nazwa pliku już istnieje"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Brak wiadomości"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Dodaj do kontaktów"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Anuluj"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Nie można wysłać wiadomości"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Zrób zdjęcie"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Brak adresu"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Lista załączników"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatycznie"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Wiad. sieciowe"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centrum SMS %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Ustaw. własne"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Raport doręczenia"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Błąd wysyłania"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Od"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Lista wstawionych elementów"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Wiadomość dostarczona"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Wiadomość pobrana"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Nie ostrzegaj"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Ostrzeżenie"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Wysłano"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "kB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "WAP Push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Raport odczytania"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Odebrano"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Ręcznie"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Odrzucaj"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Ustawienia odbierania"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Raport doręczenia"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Żądaj raportu przeczytania"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Ograniczony"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Niski"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normalny"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Wysoki"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Priorytet"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Wyślij raport odczytu"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Czas wyświetlania strony"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Wiad. alarmowa"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "ÅÄ…czny rozmiar"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Zawartość DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Lista elementów"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sek."
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sek."
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sek."
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Odbiór w sieci domowej"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instaluj"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Odbiór w roamingu"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Wyświetl szczegóły kontaktu"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Wysłano MMS"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Błąd pobierania wiadomości"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Błąd wysyłania MMS"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "P. dalej"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Nieprz."
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Przenieś do pamięci telefonu"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Powtórzony odbiorca"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Osiągnięto maksymalną liczbę odbiorców (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Do"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Nagraj dźwięk"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Nagraj film"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Zmieniono na MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Zmieniono na SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "Liczba dostępnych załączników: %d. Maksymalna liczba załączników do wybrania: %d"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Nie można dołączyć wszystkich plików. Maksymalna wielkość załącznika to %d kB. Kontynuować?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Rozmiar czcionki"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Tryb tworzenia"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Brak tematu"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centrum SMS"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Wybierz adres"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Przenieś do pamięci SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Połączyć z WAP(%s)? Kontynuować?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Wyślij ponownie"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Nieprawidłowy odbiorca"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Nieprawidłowi odbiorcy"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Niedozwolone podczas połączenia"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Nie można zapisać w trybie pamięci masowej"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Usunąć bieżącą wiadomość?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Wybrane"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Usunąć?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Nie można dołączyć. Maksymalny rozmiar plików to %d kB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Ograniczony"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Nie można przesłać dalej.\nPrzesyłanie pliku jest zablokowane"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Zaplanowana wiadomość"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Zasady zabezpieczeń ograniczają tworzenie wiadomości SMS"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Dodawanie. Czekaj..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adres centrum usług"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Wiadomości typu spam"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Duża"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normalny"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Pomniejsz"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Bardzo mała"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Nie można wysłać zaplanowanej wiadomości. Ustaw inną godzinę"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Data i godzina"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nie dodano żadnych odbiorców. Wprowadź odbiorców"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Ustawienia wysyłania"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Typ alarmu odbierania"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normalny"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Wysyłanie wiad. alarmowej"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Odbiorcy"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Powtarzanie"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Wiadomość"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Raz"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 razy"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 razy"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Sytuacja alarmowa. ProszÄ™ o pomoc."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "Nie włożono karty SIM"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Zrób zdjęcie"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Nagraj video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Nagraj dźwięk"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Wiadomości sieciowe"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Wiadomości karty SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Czas trwania musi być dłuższy niż %d s"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Nie można dodać zawartości"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Wybierz odbiorcÄ™"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Wyświetl kontakt"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Czas trwania (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Obraz za duży. Trwa kompresja..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Wiadomość została zapisana jako robocza"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Inne"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Wer.rob."
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Czas trwania slajdu"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Wyślij e-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Wstawione elementy"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Załączniki"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "Załączników: %d"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Zaplanowana\nwiadomość"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Czas trwania\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Użyj inf. innego kont."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Ta wiadomość zawiera pewne załączniki, które nie są pokazane."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Ta wiadomość zawiera niewyświetlone dołączone pliki"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Zapisz wszystko"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Wersje robocze wiadomości"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Wiadomość zostanie przywrócona"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Zaplanowana wiadomość zostanie anulowana"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopiuj tekst wiad."
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Pokaż szczeg. wiad."
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Zablokowane wiadomości"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Skrzynki wiadomości"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokuj"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopiuj do pamięci telefonu"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Skopiowano wiadomość z karty SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Anuluj wiadomość"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Załączniki"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Błąd wysyłania wiadomości"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Osiągnięto maksymalną liczbę znaków"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Przywracanie..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Bez załączników"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Skopiowane do schowka"
+
diff --git a/main/po/pt_PT.po b/main/po/pt_PT.po
index ac7a139..eb0416e 100755..100644
--- a/main/po/pt_PT.po
+++ b/main/po/pt_PT.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
@@ -253,24 +103,12 @@ 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"
@@ -278,7 +116,7 @@ msgid "IDS_MSGF_BODY_READ_REPORT"
msgstr "Relatório de leitura"
msgid "IDS_MSGF_BODY_RECEIVED"
-msgstr "Recebida"
+msgstr "Recebido"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
msgstr "Manual"
@@ -289,9 +127,6 @@ 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"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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."
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ 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..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Endereço do centro de serviço"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Mensagens de spam"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Grande"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Pequeno"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Muito pequeno"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Impossível enviar mensagem programada. Defina outra hora"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Data e hora"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nenhum destinatário adicionado. Introduzir destinatários"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Opções de envio"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Tipo de alerta de recepção"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Envio de SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Destinatários"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Repetir"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Mensagem"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Uma vez"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 vezes"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 vezes"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Estou numa situação de emergência. Ajudem-me."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM não inserido"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Tirar fotografia"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Capturar vídeo"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Gravação de áudio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Mensagens DC"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Mensagens do cartão SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "A duração tem de ser mais longa do que %d segundos"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Impossível adicionar conteúdo"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Seleccionar destinatário"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Ver contactos"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Duração (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Imagem demasiado grande. A comprimir..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Mensagem guardada como rascunho"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Outro"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Rascunho"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Duração para o slide"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Enviar e-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Itens inseridos"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Itens anexados"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d anexos"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Mensagem\nprogramada"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Duração\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Util. out. infos cntc."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Esta mensagem inclui um ficheiro anexado não apresentado."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Esta mensagem inclui ficheiros anexados não mostrados"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Guardar tudo"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Mensagens rascunho"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "A mensagem será restaurada"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "A mensagem programada será cancelada"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copiar texto msg."
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Ver detalhes msg."
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Mensagens bloqueadas"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Caixas de mensagens"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Bloquear"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copiar para o telefone"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Mensagem copiada do cartão SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Cancelar mensagem"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Anexos"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "A enviar mensagem que falhou"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Número máximo de caracteres atingido."
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "A recuperar..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Nenhum anexo"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado para a área de transferência"
+
diff --git a/main/po/ro.po b/main/po/ro.po
new file mode 100644
index 0000000..6da3295
--- /dev/null
+++ b/main/po/ro.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Imposibil de deschis"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Preluare"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Imposibil de mutat"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "A fost atins numărul maxim de pagini"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Mod restricţionat. Imposibil de introdus conţinutul restricţionat"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Livrat"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Expirat"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Citit"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Se preia..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Introduceţi cartela SIM pentru a trimite mesaje. Mesajele vor fi salvate în Cutia de ieşire"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Introducere număr canal"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 mesaj selectat"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d mesaje selectate"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Previzualizare"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Numele fişierului există deja"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Nici un mesaj"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Adăugare la contacte"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Renunţare"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Imposibil de trimis mesajul"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Realizare fotografie"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Nicio adresă"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Listă de elemente ataşate"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Descărcare automată"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Mesaje informare"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centru %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Timp particularizat"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Raport livrare"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Trimitere eşuată"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "De la"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Listă de elemente inserate"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Mesaj livrat"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Mesaj regăsit"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Liber"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Avertisment"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Trimis"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KO"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Mesaje server"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Citire raport"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Primit"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manual"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Respingere"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Opţiuni primire"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Solicitare raport de livrare"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Solicitare raport citire"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Restricţionat"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Scăzută"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Urgent"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritate"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Trimitere raport citire"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Dimensiune pagină"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Mesaje SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Mesaje text"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Dimensiune totală"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Conţinut DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Listă elemente"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 secunde"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 secunde"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 secunde"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Reţea reşedinţă"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instalare"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Reţea în roaming"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Vizualizare detalii contact"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Mesaj multimedia trimis"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Preluare mesaj nereuşită"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Trimitere mesaj multimedia nereuşită"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Redir"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Necitit"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Mutare în telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Destinatar dublat"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Numărul maxim de destinatari (%d) a fost atins"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Către"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "ÃŽnregistrare sunet"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "ÃŽnregistrare videoclip"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Schimbat în MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Modificat la SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d ataşări disponibile. Selectaţi maximum %d ataşări"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Imposibil de ataşat toate fişierele. Capacitatea maximă a ataşării este de %d KO. Continuaţi?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Dimensiune font"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Mod creare"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Mesaj multimedia"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Niciun subiect"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Centru service"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Selectare adresă"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Mutare în SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Sunteţi pe cale să vă conectaţi (%s). Continuaţi?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Retrimitere"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Destinatar nevalid"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Destinatari nevalizi"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Imposibil de redat în timpul unui apel"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Imposibil de salvat din modul Stocare în masă"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Renunţaţi la mesajul curent?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Selectat"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Ştergeţi?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Imposibil de ataşat. Dimensiunea maximă a fişierelor este de %d KO"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Restricţionat"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Imposibil de redirecţionat. Fişierul este blocat la redirecţionare"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Mesaj programat"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Politica de securitate restricţionează compunerea mesajelor text"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "În curs de adăugare. Aşteptaţi..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresă centru servicii"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Mesaje spam"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Mare"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Mic"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Foarte mic"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Imposibil de trimis mesajul programat. Setaţi o altă oră"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Dată şi oră"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Mesaje multimedia"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nu a fost adăugat niciun destinatar. Introduceţi destinatari"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Opţiuni trimitere"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Tip de alertă la primire"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Se trimite SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Destinatari"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Repetare"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Mesaj"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "O dată"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 ori"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 ori"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Sunt într-o situaţie de urgenţă. Vă rog să mă ajutaţi."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM neinserat"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Fotografiere"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Captură video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "ÃŽnregistrare audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Mesaje CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Mesaje de pe cartela SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Durata trebuie să fie mai mare de %d secunde"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Imposibil de adăugat conţinut"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Selectare destinatar"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Vizualizare contacte"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Durată (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Fotografia este prea mare. Se comprimă..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Mesajul a fost salvat ca ciornă"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Alte"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Ciornă"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Durata pentru diapozitiv"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Trimitere email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Elemente inserate"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Elemente ataÅŸate"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d ataşări"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Mesaj\nprogramat"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Durată\n(%d secunde)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Ut. alte inf. contact"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Acest mesaj include un fiÅŸiere ataÅŸat care nu este prezentat."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Acest mesaj conţine fişiere ataşate neafişate"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Salvare totală"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Schiţe de mesaje"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Mesajul va fi restabilit"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Mesajul programat va fi revocat"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Copiere text mesaj"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "AfiÅŸ. detalii mesaj"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Mesaje blocate"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Casete de mesaje"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blocare"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Copiere în telefon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Mesaj copiat de pe cartela SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Revocare mesaj"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Ataşări"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Trimiterea mesajului nereuÅŸit"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Adăugare la marcaje"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Restabilire"
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Nicio ataÅŸare"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiat în clipboard"
+
diff --git a/main/po/ru_RU.po b/main/po/ru_RU.po
index 9bc2ece..3560620 100755..100644
--- a/main/po/ru_RU.po
+++ b/main/po/ru_RU.po
@@ -2,20 +2,14 @@ msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
msgstr "Ðевозможно открыть"
msgid "IDS_MSGF_OPT_RETRIEVE"
-msgstr "Загрузить"
+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 "Ограниченный режим. Ðевозможно вÑтавить ограниченное Ñодержимое"
@@ -23,7 +17,7 @@ msgid "IDS_MSGF_BODY_DELIVERED"
msgstr "ДоÑтавлено"
msgid "IDS_MSGF_BODY_EXPIRED"
-msgstr "Срок дейÑÑ‚Ð²Ð¸Ñ ÑƒÐ¶Ðµ закончен"
+msgstr "Срок дейÑÑ‚Ð²Ð¸Ñ Ð·Ð°ÐºÐ¾Ð½Ñ‡ÐµÐ½"
msgid "IDS_MSGF_BODY_READ"
msgstr "Прочитано"
@@ -31,54 +25,18 @@ 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 "ПроÑмотр"
@@ -88,156 +46,48 @@ 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 "Сообщение доÑтавлено"
@@ -245,7 +95,7 @@ msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
msgstr "Сообщение получено"
msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
-msgstr "Без ограничений"
+msgstr "Свободно"
msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
msgstr "Предупреждающий"
@@ -253,24 +103,12 @@ 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-ÑообщениÑ"
@@ -289,11 +127,8 @@ msgstr "Отказ"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "Параметры приема"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "Оплата ответа"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
-msgstr "Отчет о доÑтавке"
+msgstr "ЗапроÑить отчет о доÑтавке"
msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
msgstr "Отчет о прочтении"
@@ -301,12 +136,6 @@ 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 "Ðизкий"
@@ -316,48 +145,15 @@ 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 ÑообщениÑ"
@@ -367,21 +163,12 @@ 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 Ñекунд"
@@ -400,12 +187,6 @@ 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 "Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ контакте"
@@ -418,18 +199,6 @@ 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 "ПереÑ."
@@ -439,165 +208,60 @@ 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"
+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 "ÐедопуÑтимый получатель"
@@ -610,27 +274,15 @@ 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 КБ"
@@ -649,3 +301,204 @@ msgstr "Политика безопаÑноÑти ограничивает наÐ
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "Добавление. Подождите..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "ÐÐ´Ñ€ÐµÑ Ñ†ÐµÐ½Ñ‚Ñ€Ð° обÑлуживаниÑ"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Спам"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Большой"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Обычный"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Маленький"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Ðе удалоÑÑŒ отправить запланированное Ñообщение. Задайте другое времÑ"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Дата и времÑ"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Получатели не введены. Введите получателей"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Параметры отправки"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Тип ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ получении"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Обычный"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Отправка SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Получатели"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Повтор"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Сообщение"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "1 раз"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 раза"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 раз"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Я в беде! Мне нужна помощь."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM-карта не уÑтановлена"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Сделать фото"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "ЗапиÑать видео"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "ЗапиÑÑŒ звука"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Широковещательные Ñообщ."
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° SIM-карте"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "ДлительноÑÑ‚ÑŒ должна быть более %d Ñек."
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Ðевозможно добавить Ñодержимое"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Выберите получателÑ"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "ПроÑмотреть"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "ДлительноÑÑ‚ÑŒ (%s Ñек.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Слишком большой размер изображениÑ. Сжатие..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Сообщение Ñохранено как черновик"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Другой"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Черновик"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "ДлительноÑÑ‚ÑŒ Ñлайда"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Отправить E-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Ð’Ñтавленные Ñлементы"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "ВложениÑ"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "Вложений: %d"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Запланир.\nÑообщение"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Продолжительн.\n(%d Ñ.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "ИÑп. Ñвед. о др. конт."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Сообщение Ñодержит вложенный файл, который не отображаетÑÑ."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Сообщение Ñодержит вложенные файлы, которые не отображаютÑÑ"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Сохранить вÑе"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Черновики"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Сообщение будет воÑÑтановлено"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Запланированное Ñообщение будет отменено"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Копировать текÑÑ‚"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "ПроÑмотреть ÑведениÑ"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Заблокированные ÑообщениÑ"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Папки Ñообщений"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Блокировать"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Копировать на телефон"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Сообщение Ñкопировано Ñ SIM-карты"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Отменить ÑообщениÑ"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "ВложениÑ"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Отправка Ñбойного ÑообщениÑ"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "ДоÑтигнуто макÑимальное чиÑло Ñимволов"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "ВоÑÑтановление..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Ðет вложений"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Скопировано в буфер обмена"
+
diff --git a/main/po/sk.po b/main/po/sk.po
new file mode 100644
index 0000000..37c7b82
--- /dev/null
+++ b/main/po/sk.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nedá sa otvoriť"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Stiahnuť"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Nedá sa presunúť"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Dosiahol sa maximálny poÄet strán"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Obmedzený režim. Nedá sa vložiť obmedzený obsah"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "DoruÄené"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Platnosť vypršala"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "PreÄítané"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "NaÄítavanie..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Pred odoslaním správ vložte SIM kartu. Správa sa uloží do prieÄinka Na odoslanie"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Zadajte Äíslo kanála"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 vybratá správa"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Vybraté správy: %d"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Ukážka"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Názov súboru už existuje"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Žiadne správy"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Pridať do kontaktu"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Vyradiť"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Správa sa nedá odoslať"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Odfotiť"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Žiadna adresa"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Zoznam priložených položiek"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automaticky stiahnuť"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Vysielané správy"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centrum %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Vlastný Äas"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Potvrdenie o doruÄení"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Odosielanie sa nepodarilo"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Od"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Zoznam vložených položiek"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Správa bola doruÄená"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Správa naÄítaná"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Voľné"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Upozornenie"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Odoslané"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "kB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Správa push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Potvrdenie o preÄítaní"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Prijatá"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "RuÄne"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Odmietnuť"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Možnosti príjmu"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "VyžiadaÅ¥ potvrdenie o doruÄení"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "VyžiadaÅ¥ potvrd. o preÄít."
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Zakázané"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Nízka"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normálna"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Naliehavé"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Dôležitosť"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "OdoslaÅ¥ potvrdenie o preÄítaní"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Trvanie stránky"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Tiesňové správy"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Celková veľkosť"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Obsah DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Zoznam položiek"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekúnd"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekundy"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekúnd"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Domáca sieť"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Inštalovať"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Sieť roaming"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Zobraziť kontaktné údaje"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "MMS odoslaná"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "NaÄítanie správy sa nepodarilo"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Odoslanie multimediálnej správy zlyhalo"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Predať"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Nepre-Äítané"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Presunúť do telefónu"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Duplicitný príjemca"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Dosiahol sa maximálny poÄet príjemcov (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Komu"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Nahrať zvuk"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Nahrať video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Zmenená na MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Zmenené na SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d príloh k dispozícii. Vyberte maximálne %d príloh"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Nedajú sa priložiÅ¥ vÅ¡etky súbory. Maximálna veľkosÅ¥ príloh je %d kB. PokraÄovaÅ¥?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Veľkosť písma"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Režim vytvárania"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Žiadny predmet"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Stredisko služieb"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Vyberte adresu"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Presunúť na SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Chystáte sa prejsÅ¥ do režimu online (%s). Chcete pokraÄovaÅ¥?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Odoslať znova"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Neplatný príjemca"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Neplatní príjemcovia"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "PoÄas hovoru sa nedá prehrávaÅ¥"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Nemožno uložiť v režime veľkokapacitného ukladacieho priestoru"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Zahodiť aktuálnu správu?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Vybrané"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Odstrániť?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Nedá sa priložiť. Maximálna veľkosť súborov je %d kB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Zakázané"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Nedá sa preposlaÅ¥ Äalej.\nSúbor je zamknutý proti preposielaniu Äalej"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Naplánovaná správa"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Politika zabezpeÄenia obmedzuje písanie textových správ"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Pridáva sa. PoÄkajte, prosím..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresa strediska služieb"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Nevyžiadané správy"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Veľké"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normál."
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Malé"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Naplánovaná správa sa nedá odoslaÅ¥. Nastavte iný Äas"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Dátum a Äas"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nepridali sa žiadni príjemcovia. Zadajte príjemcov"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Možnosti odosielania"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Typ upozornenia na prijímanie"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normál."
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Odosielanie tiesňovej správy"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Príjemcovia"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Opakovať"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Správa"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Raz"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "Trikrát"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "Päťkrát"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Som v tiesňovej situácii. Pomôžte mi, prosím."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM karta nie je vložená"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Fotografovať"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Snímať video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Nahrať zvuk"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Správy CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Správy na karte SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Trvanie musí byť dlhšie než %d sekundy"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Obsah sa nedá pridať"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Vybrať príjemcu"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Zobraziť kontakty"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Trvanie (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Obrázok je príliš veľký. Komprimuje sa..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Správa uložená ako koncept"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Ďalšie"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Koncept"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Trvanie snímky"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Odoslať e-mail"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Vložené položky"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Pripojené položky"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "Prílohy: %d"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Naplánovaná\nspráva"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Trvanie\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Použ. Äal. kont. údaje"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Tato správa obsahuje súbor, ktorý nie je uvedený."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Tato správa obsahuje nezobrazené priložené súbory"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Uložiť všetko"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Koncepty správ"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Správa sa obnoví"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Naplánovaná správa sa zruší"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopír. text správy"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Zobr. detaily správy"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Uzamknuté správy"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Schránky správ"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokovať"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopírovať do telefónu"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Správa sa skopírovala z karty SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Zrušiť správu"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Prílohy"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Odosiela sa zlyhaná správa"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Bol dosiahnutý maximálny poÄet znakov"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Obnovenie..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Žiadne prílohy"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Skopírované do schránky"
+
diff --git a/main/po/sl.po b/main/po/sl.po
new file mode 100644
index 0000000..8a6856f
--- /dev/null
+++ b/main/po/sl.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Ni mogoÄe odpreti"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Naloži"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Premikanje ni mogoÄe"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Doseženo je najveÄje dovoljeno Å¡tevilo strani"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Omejen naÄin. Ni mogoÄe vstaviti omejene vsebine"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Dostavljeno"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Veljavnost je potekla"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Prebrano"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Nalagam..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Vstavite kartico SIM za poÅ¡iljanje sporoÄil. SporoÄilo se bo shranilo v mapo V poÅ¡iljanju"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Vnesi Å¡tevilko postaje"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 sporoÄilo je izbrano"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d izbranih sporoÄil"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Predogled"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Ime datoteke že obstaja"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Ni sporoÄil"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Dodaj v stike"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Zavrzi."
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Ni mogoÄe poslati sporoÄila"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Posnemi fotografijo"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Ni naslova"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Seznam pripetih predmetov"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Samodejno nalaganje"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Info sporoÄila"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Center %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "ÄŒas po meri"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "PoroÄilo o dostavi"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Pošiljanje ni uspelo"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Od"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Seznam vnesenih predmetov"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "SporoÄilo je dostavljeno"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "SporoÄilo je naloženo"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Prosto"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Opozorilo"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Poslano"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Potisna sporoÄila"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "PoroÄilo o branju"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Prejeto"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "RoÄno"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Zavrni"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Možnosti sprejema"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Zahtevaj poroÄilo o dostavi"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Zahtevaj poroÄilo o branju"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Omejeno"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Nizka"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normalno"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Nujno"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Pomembnost"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "PoÅ¡lji poroÄilo o branju"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Trajanje strani"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SporoÄila v sili"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Besedilna sporoÄila"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Skupna velikost"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Vsebina DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Seznam predmetov"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekund"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekundi"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekund"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "DomaÄe omrežje"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Namesti"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Tuje omrežje"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Prikaži podrobnosti stika"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "VeÄpredstavnostno sporoÄilo je poslano"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Nalaganje sporoÄila ni uspelo"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "PoÅ¡iljanje sporoÄila MMS ni uspelo"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Posred."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Neprebr."
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Premakni v telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Prejemnik je podvojen"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Doseženo je najveÄje dovoljeno Å¡tevilo prejemnikov (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Za"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Posnemi zvok"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Posnemi video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Spremenjeno v MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Spremenjeno v SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "Na voljo je %d prilog. Izberite do %d prilog"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Vseh datotek ni mogoÄe priložiti. Velikost prilog je omejena na %d KB. Želite nadaljevati?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Velikost pisave"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "NaÄin ustvarjanja"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimedijsko sporoÄilo"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Ni zadeve"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Servisni center"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Izberi naslov"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Premakni na SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Vzpostavili boste povezavo (%s). Nadaljujem?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Znova pošlji"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Neveljaven prejemnik"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Neveljavni prejemniki"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Ni mogoÄe predvajati med klicem"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Ni mogoÄe shraniti v naÄinu shranjevanja"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Zavržem trenutno sporoÄilo?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Izbrano"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Izbrišem?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Ni mogoÄe priložiti. NajveÄja dovoljena velikost datotek je %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Omejeno"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Dodajanje ni mogoÄe. Datoteka ima onemogoÄeno posredovanje"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "NaÄrtovano sporoÄilo"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Varnostni pravilnik omejuje sestavljanje besedilnih sporoÄil"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Dodajam. PoÄakajte ..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Naslov centra za storitve"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Neželena sporoÄila"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Velika"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normalno"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Majhna"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Drobna"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "NaÄrtovanega sporoÄila ni mogoÄe poslati. Nastavite drugo uro"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datum in Äas"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimedijska sporoÄila"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Ni dodanih prejemnikov. Vnesite prejemnike."
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Možnosti za pošiljanje"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Vrsta opozorila za sprejem"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normalno"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "PoÅ¡iljanje sporoÄila v sili"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Prejemniki"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Ponovi"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "SporoÄilo"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Enkrat"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3-krat"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5-krat"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Potrebujem pomoÄ. Pomagajte mi"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM ni vstavljena"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Posnemi sliko"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Posnemi video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Posnemi zvok"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "SporoÄila v celici"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SporoÄila na kartici SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Trajanje mora biti daljše od %d sekund"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Vsebine ni mogoÄe dodati"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Izberite prejemnika"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Prikaži vizitko"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Trajanje (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Slika je prevelika. Stiskam..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "SporoÄilo shranjeno kot osnutek"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Drugo"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Osnutek"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Trajanje za diapozitiv"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Pošlji e-pošto"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Vstavljeni elementi"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Priloženi predmeti"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d prilog"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "NaÄrtovano\nsporoÄilo"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Trajanje\n(%d s)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Up. druge pod. za stik"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "SporoÄilo vsebuje pripeto datoteko, ki ni prikazana"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "To sporoÄilo vkljuÄuje priložene datoteke, ki niso prikazane"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Shrani vse"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Osnutki sporoÄil"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "SporoÄilo bo obnovljeno"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "NaÄrtovano sporoÄilo bo preklicano"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kop. bes. sporoÄila"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Prik.podr. sporoÄila"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Zaklenjena sporoÄila"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "SporoÄilna polja"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokiraj"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopiraj v telefon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "SporoÄilo je kopirano s kartice SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "PrekliÄi sporoÄilo"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Priloge"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "PoÅ¡iljanje sporoÄila ni uspelo"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Doseženo je najveÄje dovoljeno Å¡tevilo znakov"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Obnavljanje..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Ni prilog"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopirano v odložiÅ¡Äe"
+
diff --git a/main/po/sr.po b/main/po/sr.po
new file mode 100644
index 0000000..82ce48c
--- /dev/null
+++ b/main/po/sr.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Nemoguće otvoriti"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Preuzmi"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Nemoguće premestiti"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Dostignut maksimalan broj strana"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "OgraniÄen režim. Nemoguće ubaciti sadržaj sa ograniÄenjem prikazivanja"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "IsporuÄeno"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Datum isteka već prošao"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "ProÄitano"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Preuzimanje..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Ubaci SIM karticu radi slanja poruka. Poruka će biti saÄuvana u otpremnom sanduÄetu"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Unesi broj kanala"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Izabrano poruka: 1"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "Izabrano poruka: %d"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Pregled"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Naziv fajla već postoji"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Nema poruka"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Dodaj u kontakte"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Odbaci"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Nemoguće poslati poruku"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Slikaj"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Nema adrese"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Lista priloženih stavki"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Automatsko preuzimanje"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Info poruke"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Centar %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Željeno vreme"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Izveštaj o prispeću"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Slanje neuspešno"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Od"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Lista ubaÄenih stavki"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Poruka isporuÄena"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Poruka primljena"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Slobodno"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Upozorenje"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Poslato"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Pritisne poruke"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Čitanje izveštaja"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Primljeno"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "RuÄno"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Odbaci"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Opcije prijema"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Zahtevaj izveštaj o prispeću"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Zahtevaj izveÅ¡. o Äitanju"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "OgraniÄeno"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Nizak"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normalan"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Hitno"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritet"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Å alji izveÅ¡taj o Äitanju"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Dužina prikaza jedne strane"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS poruke"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Tekstualne poruke"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Ukupna veliÄina"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM sadržaj"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Lista stavki"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekundi"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekunde"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekundi"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Domaća mreža"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Instaliraj"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Strana mreža"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Prikaži podatke o kontaktu"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multimedijalna poruka poslata"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Preuzimanje poruke neuspešno"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Slanje multimedijalne poruke neuspešno"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Prosledi"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "NeproÄ."
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Prebaci u telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Primalac dupliran"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Dostignut maksimalan broj primalaca (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Za"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Snimi zvuk"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Snimi video zapis"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Promenjeno na MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Promenjeno u SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "Dostupno je %d priloga. Izaberi do %d priloga"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Nemoguće priložiti sve fajlove. Maksimalna veliÄina priloga je %d KB. Nastavak?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "VeliÄina fonta"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Režim kreiranja"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimedijalna poruka"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Nema naslova"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Servisni centar"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Izaberi adresu"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Prebaci u SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Prećićete u online režim (%s). Nastaviti?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Ponovi slanje"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Neispravan primalac"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Neispravni primaoci"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Nemoguće reprodukovati tokom poziva"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Nije moguće Äuvanje u režimu masovne memorije"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Odbaci trenutnu poruku?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Izabrano"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Obriši?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Nemoguće priložiti. Maks. veliÄina fajlova je %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "OgraniÄeno"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Nemoguće proslediti. Fajl je zakljuÄan za prosleÄ‘ivanje"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Planirana poruka"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Politika bezbednosti ograniÄava pisanje tekstualnih poruka"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Dodavanje. SaÄekaj..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adresa servisnog centra"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spam poruke"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Velika"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normalan"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Mala"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Mala"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Nije moguće poslati planiranu poruku. Podesi drugo vreme"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datum i vreme"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimedijalne poruke"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Nisu dodati primaoci. Unesi primaoce"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Opcije slanja"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Tip upozorenja na prijem"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normalan"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Slanje SOS-a"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Primaoci"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Ponovi"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Poruka"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Jednom"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 puta"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 puta"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "U opasnosti sam. Pomozite mi."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM kartica nije ubaÄena"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Slikaj"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Snimi video zapis"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Snimi audio"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Info poruke"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Poruke SIM kartice"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Trajanje mora biti duže od %d sekundi"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Nemoguće dodati sadržaj"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Izaberi primaoca"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Prikaži kontakt"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Trajanje (%s sek.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Slika prevelika. Sabijanje..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Poruka saÄuvana kao skica"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Ostalo"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Skice"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Trajanje prikaza slajda"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Pošalji e-poruku"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "UbaÄene stavke"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Priložene stavke"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d priloga"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Planirana\nporuka"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Trajanje\n(%d sek.)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Koristi druge kontakt informacije"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Ova poruka sadrži neprikazan priložen fajl"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Ova poruka sadrži neprikazane priložene fajlove"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "SaÄuvaj sve"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Skica poruka"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Poruke će biti vraćene"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Planirana poruka će biti otkazana"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopiraj tekst poruke"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Prikaži info. o por."
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "ZakljuÄane poruke"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "SanduÄići"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blokiraj"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopiraj u telefon"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Poruka je kopirana sa SIM kartice"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Otkaži poruku"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Prilozi"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Slanje neuspešno poslate poruke"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Dostignut maksimalan broj karaktera"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Vraćanje..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Nema priloga"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Iskopirano u privremenu memoriju"
+
diff --git a/main/po/sv.po b/main/po/sv.po
new file mode 100644
index 0000000..33e19c6
--- /dev/null
+++ b/main/po/sv.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Det går inte att öppna"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "Hämta"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Det går inte att flytta"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Högsta antal sidor har uppnåtts"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Begränsat läge. Det går inte att infoga begränsat innehåll"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Levererat"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Har slutat gälla"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Läs"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Hämtar..."
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Sätt i ett SIM-kort för att skicka meddelanden. Meddelandet sparas i Utkorgen"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Ange kanalnummer"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 valt meddelande"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d valda meddelanden"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Förhandsgranska"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Filnamnet finns redan"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Inga meddelanden"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Lägg till till kontakt"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Avvisa"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Kan inte skicka meddelande"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Ta foto"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Ingen adress"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Bifogade objekt"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Autohämtning"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Broadcast-meddelanden"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Center %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Egen tid"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Leveransrapport"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Sändningsfel"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Från"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Infogade objekt"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Meddelande levererat"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Meddelande hämtat"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Fritt"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Varning"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Sänt"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Push-meddelanden"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Läsrapport"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Mottaget"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Manuellt"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Avvisa"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Mottagningsalternativ"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Begär leveransrapport"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Begär läsrapport"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Begränsat"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "LÃ¥g"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Brådskande"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Prioritet"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Sänd läsrapport"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Sidvaraktighet"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "SOS-meddelanden"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Textmeddelanden"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Total storlek"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "DRM-innehåll"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Lista över objekt"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 sekunder"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 sekunder"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 sekunder"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Hemnät"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Installera"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Roaming-nät"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Visa kontaktinformation"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Multimediemeddelande skickat"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "Fel vid hämtning av meddelande"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Det gick inte att skicka multimediemeddelandet"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Vidare."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Olästa"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Flytta till telefon"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "Mottagare finns redan"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Högsta antalet mottagare (%d) har uppnåtts"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Till"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Spela in ljud"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Spela in video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Ändrad till multimediemeddelande"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Ändrat till SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d bilagor är tillgängliga. Välj upp till %d bilagor"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Det går inte att bifoga alla filer. Högsta kapacitet för bilagor är %d KB. Fortsätta?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Teckenstorlek"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Skapaläge"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Multimediemeddelande"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Ingen rubrik"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Tjänstecenter"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Välj adress"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Flytta till SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Du kommer att ansluta (%s). Fortsätt?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Skicka igen"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "Ogiltig mottagare"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "Ogiltiga mottagare"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Kan inte spela upp under samtal"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Det går inte att spara i masslagringsläget"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Ignorera aktuellt meddelande?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Vald"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Radera?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Det går inte att bifoga. Högsta filstorlek är %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Begränsat"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Det går inte att vidarebefordra.\nFilen är låst"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Schemalagt meddelande"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Säkerhetspolicy begränsar hur textmeddelanden kan skrivas"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Lägger till. Vänta..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Adress till tjänstcentral"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Skräppostmeddelanden"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Stor"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Liten"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Det går inte att skicka schemalagt meddelande. Ange en annan tid"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Datum och tid"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimediemeddelanden"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Inga mottagare har lagts till. Lägg till mottagare"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Sändalternativ"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Tar emot varningstyp"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Sänder SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Mottagare"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Upprepa"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Meddelande"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "En gång"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 gånger"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 gånger"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Jag är i nöd. Hjälp mig."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM-kortet är inte isatt"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Ta foto"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Spela in video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Spela in ljud"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB-meddelanden"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM-kortsmeddelanden"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Varaktigheten måste vara längre än %d sekunder"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Det går inte att lägga till innehåll"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Välj mottagare"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Visa kontakter"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Varaktighet (%s s)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "För stor bild. Komprimerar..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Meddelandet har sparats som utkast"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Annat"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Utkast"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Tidslängd för bild"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Skicka e-post"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Infogade objekt"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Bifogade objekt"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d bilagor"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Schemalagt\nmeddelande"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Varaktighet\n(%d sek)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Anv. ann. kontaktinfo."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Meddelandet innehåller en bifogad fil som inte visas"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Meddelandet innehåller bifogade filer som inte visas"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Spara alla"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Utkast"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Meddelandet kommer att återställas"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Schemalagt meddelande kommer att avbrytas"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Kopiera medd.text"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Visa meddelandeinfo"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "LÃ¥sta meddelanden"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Meddelanderutor"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Blockera"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Kopiera till telefonen"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Meddelandet har kopierats från SIM-kortet"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Avbryt meddelande"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Bilagor"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Skickar misslyckat meddelande"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Maximalt antal tecken har använts"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Återställer..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Inga bilagor"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopierat till Urklipp"
+
diff --git a/main/po/th.po b/main/po/th.po
new file mode 100644
index 0000000..23b1ba6
--- /dev/null
+++ b/main/po/th.po
@@ -0,0 +1,504 @@
+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_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+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_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "ใส่ SIM ​à¸à¸²à¸£à¹Œà¸”​เพื่อ​ส่ง​ข้อ​ความ ข้อ​ความ​จะ​ถูà¸â€‹à¸šà¸±à¸™à¸—ึà¸â€‹à¹ƒà¸™â€‹à¸‚้อ​ความ​ออà¸"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "ใส่​หมาย​เลข​สถานี"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "เลือà¸â€‹à¹à¸¥à¹‰à¸§ 1 ​ข้อ​ความ"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_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_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "เพิ่ม​ใน​ราย​ชื่อ"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "ละทิ้ง"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "ไม่​สามารถ​ส่ง​ข้อ​ความ"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "ถ่าย​รูป"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "ไม่​มี​ที่​อยู่"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "รายà¸à¸²à¸£â€‹à¸—ี่​à¹à¸™à¸šâ€‹à¸¡à¸²â€‹à¸”้วย"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "ดาวน์​โหลด​อัตโนมัติ"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "ข้อความเครือข่าย"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "ศูนย์ข้อความ %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "à¸à¸³à¸«à¸™à¸”​เวลา​เอง"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "รายงาน​à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡â€‹à¸œà¸´à¸”​พลาด"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "จาà¸"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+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_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+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_REQUEST_DELIVERY_REPORT"
+msgstr "ต้อง​à¸à¸²à¸£â€‹à¸£à¸²à¸¢à¸‡à¸²à¸™â€‹à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "ต้อง​à¸à¸²à¸£â€‹à¸£à¸²à¸¢à¸‡à¸²à¸™â€‹à¸à¸²à¸£â€‹à¸­à¹ˆà¸²à¸™"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "จำà¸à¸±à¸”"
+
+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_SENDINGOPTION_PRIORITY"
+msgstr "ระดับ​ความ​สำคัà¸"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "ส่ง​รายงาน​à¸à¸²à¸£â€‹à¸­à¹ˆà¸²à¸™"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "เวลา​à¹à¸ªà¸”ง​หน้า​ข้อ​ความ"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "ข้อ​ความ​ฉุà¸â€‹à¹€à¸‰à¸´à¸™"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "ข้อ​ความ"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "ขนาด​ทั้ง​หมด"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "คอน​เทนท์ DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+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_VIEW_CONTACT_DETAIL"
+msgstr "ดู​ราย​ละเอียด​ราย​ชื่อ"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "ส่ง​ข้อ​ความ​มัลติ​มี​เดีย​à¹à¸¥à¹‰à¸§"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "เรียà¸à¸‚้อความ\n​ผิดพลาด"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡â€‹à¸‚้อ​ความ​มัลติ​มี​เดีย​ไม่​สำเร็จ"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "ส่ง​ต่อ"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "ไม่​อ่าน"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "ย้าย​ไป​ยัง​\nโทรศัพท์"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "ผู้​รับ​ซ้ำ"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "ถึง​จำนวน​ผู้​รับ​สูง​สุด (%d) ​à¹à¸¥à¹‰à¸§"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "ถึง"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "บันทึà¸â€‹à¹€à¸ªà¸µà¸¢à¸‡"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "บันทึà¸â€‹à¸§à¸µâ€‹à¸”ี​โอ"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "เปลี่ยน​เป็น MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "เปลี่ยน​เป็น SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "มี​ไฟล์​à¹à¸™à¸šâ€‹à¸—ี่​ใช้​ได้ %d ​ไฟล์ เลือà¸â€‹à¹„ฟล์​à¹à¸™à¸šâ€‹à¹„ม่​เà¸à¸´à¸™ %d ​ไฟล์"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "ไม่​สามารถ​à¹à¸™à¸šâ€‹à¹„ฟล์​ทั้ง​หมด ความ​จุ​ของ​ไฟล์​à¹à¸™à¸šâ€‹à¸ªà¸¹à¸‡â€‹à¸ªà¸¸à¸” %d ​KB ​ทำ​ต่อ?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "ขนาด​อัà¸à¸©à¸£"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "โหมด​à¸à¸²â€‹à¸£à¸ªâ€‹à¸£à¹‰à¸²à¸‡"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "ข้อ​ความ​มัลติ​มี​เดีย"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "ไม่​มี​ชื่อ​เรื่อง"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+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_SK_RESEND"
+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_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "ยà¸â€‹à¹€à¸¥à¸´à¸â€‹à¸‚้อ​ความ​ปัจจุบัน?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "เลือà¸à¹à¸¥à¹‰à¸§"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+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 "ข้อ​ความ​\nที่ตั้งเวลา"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "นโยบาย​ความ​ปลอดภัย​จำà¸à¸±à¸”​à¸à¸²à¸£â€‹à¹€à¸‚ียน​ข้อ​ความ​ปà¸à¸•à¸´"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¹€à¸žà¸´à¹ˆà¸¡ โปรด​รอ..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "หมาย​เลข​ศูนย์​บริà¸à¸²à¸£"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "ข้อ​ความ​ขยะ"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "ใหà¸à¹ˆ"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "ปà¸à¸•à¸´"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "เล็à¸"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "ไทนี"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "ไม่​สามารถ​ส่ง​ข้อ​ความ​ที่​วาง​à¸à¸³à¸«à¸™à¸”​à¸à¸²à¸£â€‹à¹„ว้ ตั้ง​ค่า​เวลา​อื่น"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "วัน​ที่​à¹à¸¥à¸°â€‹à¹€à¸§à¸¥à¸²"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "ข้อ​ความ MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "ไม่​ได้​เพิ่ม​ผู้​รับ ใส่​ผู้​รับ"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "ทาง​เลือà¸â€‹à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "ประเภท​à¸à¸²à¸£â€‹à¹€à¸•à¸·à¸­à¸™â€‹à¹€à¸¡à¸·à¹ˆà¸­â€‹à¹„ด้​รับ"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "ฉุà¸â€‹à¹€à¸‰à¸´à¸™"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "ปà¸à¸•à¸´"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡â€‹à¸‚้อ​ความ​ฉุà¸â€‹à¹€à¸‰à¸´à¸™"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "ผู้​รับ"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "ซ้ำ"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "ข้อ​ความ"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "ครั้ง​เดียว"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 ​ครั้ง"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 ​ครั้ง"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¸­à¸¢à¸¹à¹ˆâ€‹à¹ƒà¸™â€‹à¹€à¸«à¸•à¸¸â€‹à¸‰à¸¸à¸â€‹à¹€à¸‰à¸´à¸™ ช่วย​ด้วย"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "ไม่​ได้​ใส่ SIM"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "ใส่​รูป​ภาพ"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "ถ่ายวีดีโอ"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "à¸à¸²à¸£â€‹à¸šà¸±à¸™à¸—ึà¸â€‹à¹€à¸ªà¸µà¸¢à¸‡"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "ข้อ​ความ CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "ข้อ​ความ​ใน SIM ​à¸à¸²à¸£à¹Œà¸”"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "ช่วง​เวลา​ต้อง​นานà¸à¸§à¹ˆà¸² %d ​วินาที"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "เพิ่ม​คอน​เทนท์​ไม่​ได้"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "เลือà¸â€‹à¸œà¸¹à¹‰â€‹à¸£à¸±à¸š"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "ดู​ราย​ชื่อ"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "ช่วง​เวลา (%s ​วินาที)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "รูป​ภาพ​ใหà¸à¹ˆâ€‹à¹€à¸à¸´à¸™â€‹à¹„ป à¸à¸³à¸¥à¸±à¸‡â€‹à¸šà¸µà¸šâ€‹à¸­à¸±à¸”..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "ข้อ​ความ​ที่​บันทึà¸â€‹à¹€à¸›à¹‡à¸™â€‹à¸‚้อ​ความ​ร่าง"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "อื่นๆ"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "ร่าง"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "ช่วง​เวลา​ของ​สไลด์"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "ส่ง​อี​เมล์"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "รายà¸à¸²à¸£à¸—ี่ใส่"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "รายà¸à¸²à¸£â€‹à¹à¸™à¸š"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d ​ไฟล์​à¹à¸™à¸š"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "ข้อ​ความ\nที่ตั้งเวลา"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "ช่วงเวลา\n(%d วินาที)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "ใช้ข้อมูลรายชื่ออื่น"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "ข้อ​ความ​นี้​รวม​ไฟล์​à¹à¸™à¸šâ€‹à¸—ี่​ไม่​à¹à¸ªà¸”ง"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "ข้อ​ความ​นี้​รวม​ไฟล์​à¹à¸™à¸šâ€‹à¸—ี่​ไม่​à¹à¸ªà¸”ง"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "บันทึà¸â€‹à¸—ั้ง​หมด"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "ข้อความร่าง"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "ข้อความจะถูà¸à¸„ืนค่า"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "ข้อ​ความที่ตั้งเวลาจะถูà¸à¸¢à¸à¹€à¸¥à¸´à¸"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "คัด​ลอà¸â€‹à¸‚้อ​ความ"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "ดู​ราย​ละเอียด​ข้อ​ความ"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "ข้อ​ความ​ที่​ล็อà¸"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "à¸à¸¥à¹ˆà¸­à¸‡â€‹à¸‚้อ​ความ"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "บล็อà¸"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "คัด​ลอà¸â€‹à¹„ป​ยัง​โทรศัพท์"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "ข้อ​ความ​ที่​คัด​ลอà¸â€‹à¸ˆà¸²à¸ SIM ​à¸à¸²à¸£à¹Œà¸”"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "ยà¸à¹€à¸¥à¸´à¸à¸‚้อความ"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "ไฟล์​à¹à¸™à¸š"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¸ªà¹ˆà¸‡â€‹à¸‚้อ​ความ​ที่​ล้ม​เหลว"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "จำนวนตัวอัà¸à¸©à¸£à¹€à¸à¸´à¸™à¸‚อบเขต"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¹€à¸£à¸µà¸¢à¸â€‹à¸„ืน..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "ไม่​มี​ไฟล์​à¹à¸™à¸š"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "คัด​ลอà¸â€‹à¸¥à¸‡â€‹à¸„ลิ​ป​บอร์ด"
+
diff --git a/main/po/tr_TR.po b/main/po/tr_TR.po
index 6dc8a60..d4afbdd 100755..100644
--- a/main/po/tr_TR.po
+++ b/main/po/tr_TR.po
@@ -7,15 +7,9 @@ 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"
@@ -31,54 +25,18 @@ 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"
@@ -88,156 +46,48 @@ 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"
@@ -253,24 +103,12 @@ 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ı"
@@ -289,9 +127,6 @@ 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"
@@ -301,12 +136,6 @@ 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"
@@ -316,48 +145,15 @@ 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ı"
@@ -367,21 +163,12 @@ 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"
@@ -400,12 +187,6 @@ 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"
@@ -418,18 +199,6 @@ 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"
@@ -439,132 +208,48 @@ 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"
@@ -574,30 +259,9 @@ 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ı"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ 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..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Servis merkezi adresi"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Spam mesajları"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Büyük"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Küçük"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Zamanlanan mesaj gönderilemiyor. Başka zaman ayarlayın"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Tarih ve saat"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Multimedya mesajları"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Alıcı eklenemedi. Alıcı girin"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Gönderme seçenekleri"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Alma uyarı türü"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "Acil"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Acil durum mesajı gönder"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Alıcılar"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Tekrar"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Mesaj"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Bir defa"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 kez"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 kez"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Acil bir durumla karşı karşıyayım. Lütfen bana yardım edin."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM takılı değil"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Resim çek"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Video yakala"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Ses kaydet"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB mesajları"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM kart mesajları"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Süre %d saniyeden uzun olmalıdır"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "İçerik eklenemiyor"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Alıcı seç"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Kişiyi görüntüle"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Süre (%s sn)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Resim çok büyük. Sıkıştırılıyor..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Mesaj taslak olarak kaydedildi"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "DiÄŸer"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Taslak"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Slayt süresi"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "E-posta gönder"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Eklenen öğeler"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Ekli öğeler"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d ek"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Zamanlı\nmesaj"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Süre\n(%d san)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Dğr kişi blglrn kllnın"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Bu mesajda gösterilmemiş ekli dosya var"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Bu mesajda gösterilmemiş bazı ekli dosyalar var"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Tümünü kaydet"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Taslak mesajlar"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Mesaj geri yüklenecek"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Zamanlı mesaj iptal edilecek"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Mesaj metni kopyala"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Mesaj ayrıntı göster"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Kilitli mesajlar"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Mesaj kutuları"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Engelle"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Telefona kopyala"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Mesaj SIM karttan kopyalandı"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Mesajı iptal et"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Eklentiler"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Gönderme başarısız mesajı"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Maksimum karakter sayısına ulaşıldı"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Geri alınıyor..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Eklenti yok"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Panoya kopyalandı"
+
diff --git a/main/po/uk.po b/main/po/uk.po
new file mode 100644
index 0000000..5fe850e
--- /dev/null
+++ b/main/po/uk.po
@@ -0,0 +1,504 @@
+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_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+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_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Щоб надіÑлати повідомленнÑ, вÑтавте SIM-картку. ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ збережено у вихідних"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Введіть номер каналу"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "Вибрано 1 повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_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_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Додати до контакту"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "СкаÑувати"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Ðеможливо надіÑлати повідомленнÑ"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Сфотографувати"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Без адреÑи"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Приєднано ÑпиÑок об’єктів"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "ÐвтозавантаженнÑ"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "СВ-повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Центр %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "Призначити чаÑ"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Звіт про доÑтавку"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Збій надÑиланнÑ"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Від"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+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_MSGSIZE_BYTE"
+msgstr "Б"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+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_REQUEST_DELIVERY_REPORT"
+msgstr "Запитувати звіт про доÑтавку"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Запит. звіт про прочитаннÑ"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Обмежено"
+
+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_SENDINGOPTION_PRIORITY"
+msgstr "Пріоритет"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "ÐадіÑлати звіт про прочитаннÑ"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "ТриваліÑÑ‚ÑŒ Ñторінки"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "ЕкÑтрені повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "SMS-повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Загальний розмір"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "ВміÑÑ‚ DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+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_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_SK_FORWARD_LITE"
+msgstr "ПереÑ."
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "Ðепроч."
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "ПереміÑтити в телефон"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð´ÐµÑ€Ð¶ÑƒÐ²Ð°Ñ‡Ð°"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "ДоÑÑгнуто макÑимальної кількоÑÑ‚Ñ– одержувачів (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Кому"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "ЗапиÑати звук"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "ЗапиÑати відео"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Змінено на MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Змінено на SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "ДоÑтупно вкладень: %d. Виберіть не більше %d вкладень"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Ðеможливо вклаÑти вÑÑ– файли. МакÑимальний обÑÑг вкладень: %d КБ. Продовжити?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Розмір шрифту"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Режим ÑтвореннÑ"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "MMS-повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Ðемає теми"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "SMS-центр"
+
+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_SK_RESEND"
+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_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "СкаÑувати поточне повідомленнÑ?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Вибрано"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+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 "ДодаваннÑ. Зачекайте..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "ÐдреÑа ÑервіÑного центру"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Ðебажані повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Великий"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Звичайний"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Малий"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Tiny"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Ðеможливо надіÑлати заплановане повідомленнÑ. Ð’Ñтановіть інший чаÑ"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Дата Ñ– чаÑ"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "MMS-повідомленнÑ"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Одержувачів не додано. Введіть одержувачів"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Опції надÑиланнÑ"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Тип отримуваного Ñигналу"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Звичайний"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ ÐµÐºÑтреного повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "Одержувачі"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Повторити"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "ПовідомленнÑ"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Один раз"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 рази"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 разів"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Я в надзвичайній Ñитуації. Допоможіть мені."
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM-картку не вÑтавлено"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Зробити знімок"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Відеозйомка"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "ЗапиÑати звук"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "CB-повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ SIM-картки"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "ТриваліÑÑ‚ÑŒ має бути більшою за %d Ñек."
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Ðеможливо додати вміÑÑ‚"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Вибір одержувача"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "ПереглÑнути контакт"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "ТриваліÑÑ‚ÑŒ (%s Ñек.)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Ð¤Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ñ–Ñ Ð·Ð°Ð²ÐµÐ»Ð¸ÐºÐ°. СтиÑканнÑ..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñк чернетку"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Інші"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Чернетка"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "ТриваліÑÑ‚ÑŒ Ñлайда"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "ÐадіÑлати Email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Ð’Ñтавлені об'єкти"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Вкладені об’єкти"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d вкладень"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Запланов.\nповідомленнÑ"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "ТриваліÑÑ‚ÑŒ\n(%d Ñек)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Вик. інші конт. дані"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ” приєднаний файл, що не відображений."
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ” приєднані файли, що не відображені."
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Зберегти вÑе"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Чернетки повідомлень"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ відновлено"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Заплановане Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ ÑкаÑовано"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Копіюв. текÑÑ‚ повід."
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Перегл. повідомленнÑ"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Захищені повідомленнÑ"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Вікна повідомлень"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Блокувати"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Копіювати на телефон"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñкопійовано із SIM-картки"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "СкаÑувати надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "ВкладеннÑ"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ, з Ñким ÑтавÑÑ Ð·Ð±Ñ–Ð¹"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "ДоÑÑгнуто макÑимальної кількоÑÑ‚Ñ– Ñимволів"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "ВідновленнÑ..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Без вкладень"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Скопійовано в буфер обміну"
+
diff --git a/main/po/vi.po b/main/po/vi.po
new file mode 100644
index 0000000..38fbdf3
--- /dev/null
+++ b/main/po/vi.po
@@ -0,0 +1,504 @@
+msgid "IDS_MSGF_POP_UNABLE_TO_OPEN"
+msgstr "Không thể mở"
+
+msgid "IDS_MSGF_OPT_RETRIEVE"
+msgstr "K.phục"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_MOVE"
+msgstr "Không thể di chuyển"
+
+msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED"
+msgstr "Äã đạt số trang tối Ä‘a"
+
+msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT"
+msgstr "Chế độ hạn chế. Không thể chèn nội dung hạn chế"
+
+msgid "IDS_MSGF_BODY_DELIVERED"
+msgstr "Äã gửi"
+
+msgid "IDS_MSGF_BODY_EXPIRED"
+msgstr "Äã hết hạn"
+
+msgid "IDS_MSGF_BODY_READ"
+msgstr "Äá»c"
+
+msgid "IDS_MSGF_BODY_RETRIEVING_ING"
+msgstr "Äang khôi phục…"
+
+msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX"
+msgstr "Gắn thẻ SIM để gửi tin nhắn. Tin nhắn sẽ được lưu vào Hộp thư đi"
+
+msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER"
+msgstr "Nhập số kênh"
+
+msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED"
+msgstr "1 tin nhắn được chá»n"
+
+msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED"
+msgstr "%d tin nhắn được chá»n"
+
+msgid "IDS_MSGC_HEADER_PREVIEW"
+msgstr "Xem trÆ°á»›c"
+
+msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS"
+msgstr "Tên File đã tồn tại"
+
+msgid "IDS_MSGF_POP_NOMESSAGES"
+msgstr "Không có tin nhắn"
+
+msgid "IDS_MSGF_BODY_ADD_TO_CONTACT"
+msgstr "Thêm vào danh bạ"
+
+msgid "IDS_MSGF_OPT_DISCARD"
+msgstr "Thoát"
+
+msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE"
+msgstr "Không thể gửi tin nhắn"
+
+msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO"
+msgstr "Chụp ảnh"
+
+msgid "IDS_MSGC_POP_NO_ADDRESS"
+msgstr "Không địa chỉ"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST"
+msgstr "Äã đính kèm danh sách các mục"
+
+msgid "IDS_MSGF_BODY_AUTODOWNLOAD"
+msgstr "Tá»± Ä‘á»™ng tải vá»"
+
+msgid "IDS_MSGF_BODY_BROADCASTMESSAGES"
+msgstr "Tin nhắn quảng bá"
+
+msgid "IDS_MSGF_BODY_CENTRE_PD"
+msgstr "Trung tâm %d"
+
+msgid "IDS_MSGF_BODY_CUSTOM_TIME"
+msgstr "GiỠtùy chỉnh"
+
+msgid "IDS_MSGF_BODY_DELIVERY_REPORT"
+msgstr "Báo đã gửi tin"
+
+msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED"
+msgstr "Không gửi được"
+
+msgid "IDS_MSGF_BODY_FROM"
+msgstr "Từ"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST"
+msgstr "Danh sách các mục đã chèn"
+
+msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED"
+msgstr "Tin nhắn được gửi"
+
+msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
+msgstr "Tin nhắn đã truy xuất"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
+msgstr "Tá»± do"
+
+msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
+msgstr "Cảnh báo"
+
+msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"
+msgstr "Äã gá»­i"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_BYTE"
+msgstr "B"
+
+msgid "IDS_MSGF_BODY_MSGSIZE_KB"
+msgstr "KB"
+
+msgid "IDS_MSGF_BODY_PUSH_MESSAGES"
+msgstr "Tin nhắn Push"
+
+msgid "IDS_MSGF_BODY_READ_REPORT"
+msgstr "Báo cáo Ä‘á»c"
+
+msgid "IDS_MSGF_BODY_RECEIVED"
+msgstr "Äã nhận"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL"
+msgstr "Thủ công"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT"
+msgstr "Từ chối"
+
+msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
+msgstr "Tùy chá»n khi nhận"
+
+msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
+msgstr "Yêu cầu báo cáo gửi tin"
+
+msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT"
+msgstr "Yêu cầu báo đã Ä‘á»c tin"
+
+msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED"
+msgstr "Hạn chế"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW"
+msgstr "Thấp"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL"
+msgstr "Bình thÆ°á»ng"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT"
+msgstr "Khẩn cấp"
+
+msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY"
+msgstr "Äá»™ Æ°u tiên"
+
+msgid "IDS_MSGF_BODY_SEND_READ_REPORT"
+msgstr "Gá»­i thông báo Ä‘á»c tin"
+
+msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION"
+msgstr "Thá»i gian hiển thị trang"
+
+msgid "IDS_MSGF_BODY_SOS_MESSAGES"
+msgstr "Tin nhắn SOS"
+
+msgid "IDS_MSGF_BODY_TEXT_MESSAGES"
+msgstr "Tin nhắn"
+
+msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB"
+msgstr "Tổng kích thước"
+
+msgid "IDS_MSGF_HEADER_DRM_CONTENT"
+msgstr "Ná»™i dung DRM"
+
+msgid "IDS_MSGF_HEADER_ITEM_LIST"
+msgstr "Danh sách mục"
+
+msgid "IDS_MSGF_OPT_10SEC"
+msgstr "10 giây"
+
+msgid "IDS_MSGF_OPT_2SEC"
+msgstr "2 giây"
+
+msgid "IDS_MSGF_OPT_5SEC"
+msgstr "5 giây"
+
+msgid "IDS_MSGF_OPT_HOME_NETWORK"
+msgstr "Mạng địa phương"
+
+msgid "IDS_MSGF_OPT_INSTALL"
+msgstr "Cài đặt"
+
+msgid "IDS_MSGF_OPT_ROAM_NETWORK"
+msgstr "Mạng nước ngoài"
+
+msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL"
+msgstr "Xem chi tiết danh bạ"
+
+msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT"
+msgstr "Tin nhắn MMS đã gửi"
+
+msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED"
+msgstr "truy cập tin nhắn đã thất bại"
+
+msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED"
+msgstr "Gửi tin nhắn MMS đã thất bại"
+
+msgid "IDS_MSGF_SK_FORWARD_LITE"
+msgstr "Ch.tiếp"
+
+msgid "IDS_MSGF_SK3_UNREAD"
+msgstr "ChÆ°a Ä‘á»c"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_PHONE"
+msgstr "Chuyển qua điện thoại"
+
+msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT"
+msgstr "NgÆ°á»i nhận trùng lặp"
+
+msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED"
+msgstr "Äã đạt số ngÆ°á»i nhận tối Ä‘a (%d)"
+
+msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"
+msgstr "Tá»›i"
+
+msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND"
+msgstr "Ghi âm"
+
+msgid "IDS_MSGC_OPT_RECORD_VIDEO"
+msgstr "Quay video"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_MMS"
+msgstr "Äổi thaÌ€nh MMS"
+
+msgid "IDS_MSGC_POP_CHANGED_TO_SMS"
+msgstr "Äã đổi thành SMS"
+
+msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS"
+msgstr "%d mục đính kèm hiện có. Chá»n tối Ä‘a %d đính kèm"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q"
+msgstr "Không thể đính kèm tất cả file. Dung lượng đính kèm tối đa là %d KB. Tiếp tục?"
+
+msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"
+msgstr "Cỡ chữ"
+
+msgid "IDS_MSGF_BODY_MMSCREATIONMODE"
+msgstr "Chế độ tạo"
+
+msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"
+msgstr "Tin nhắn MMS"
+
+msgid "IDS_MSGF_BODY_NO_SUBJECT"
+msgstr "Không có chủ Ä‘á»"
+
+msgid "IDS_MSGF_BODY_SERVICECENTRE"
+msgstr "Trung tâm dịch vụ"
+
+msgid "IDS_MSGF_HEADER_SELECT_ADDRESS"
+msgstr "Chá»n địa chỉ"
+
+msgid "IDS_MSGF_OPT_MOVE_TO_SIM"
+msgstr "Chuyển qua thẻ SIM"
+
+msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q"
+msgstr "Bạn đang định trực tuyến(%s). Tiếp tục?"
+
+msgid "IDS_MSGF_SK_RESEND"
+msgstr "Gửi lại"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENT"
+msgstr "NgÆ°á»i nhận không hợp lệ"
+
+msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS"
+msgstr "NgÆ°á»i nhận không hợp lệ"
+
+msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Không thể phát khi Ä‘ang gá»i"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE"
+msgstr "Không thể lưu khi đang trong Chế độ bộ nhớ chung"
+
+msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q"
+msgstr "Hủy tin nhắn hiện thá»i?"
+
+msgid "IDS_MSGC_POP_SPACE_SELECTED"
+msgstr "Äã chá»n"
+
+msgid "IDS_MSGF_OPT_DELETE_Q"
+msgstr "Xóa?"
+
+msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB"
+msgstr "Không thể đính kèm. Kích cỡ tối đa của file là %d KB"
+
+msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED"
+msgstr "Hạn chế"
+
+msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
+msgstr "Không thể chuyển.\n File bị khoá chuyển"
+
+msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
+msgstr "Tin nhắn theo lịch trình"
+
+msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
+msgstr "Chính sách bảo mật hạn chế soạn tin nhắn văn bản"
+
+msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
+msgstr "Äang thêm. Vui lòng chá»..."
+
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "Äịa chỉ trung tâm dịch vụ"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "Tin nhắn rác"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "Lá»›n"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "Bình thÆ°á»ng"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "Nhá»"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "Rất nhá»"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "Không thể gá»­i tin nhắn đã lên lịch. Äặt thá»i gian khác"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "Thá»i gian"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "Tin nhắn MMS"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "Không có ngÆ°á»i nhận nào được thêm. Nhập ngÆ°á»i nhận"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "Tùy chá»n khi gá»­i"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "Loại báo hiệu nhận"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "Bình thÆ°á»ng"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "Äang gá»­i tin nhắn SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "NgÆ°á»i nhận"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "Lặp lại"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "Tin nhắn"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "Một lần"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 lần"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 lần"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "Tôi đang trong tình trạng khẩn cấp. Hãy giúp tôi"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "Chưa gắn SIM"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "Chụp ảnh"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "Quay video"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "Thu âm"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "Tin nhắn CB"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "Tin nhắn trong SIM"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "Thá»i lượng phải dài hÆ¡n %d giây"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "Không thể thêm nội dung"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "Select recipient"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "Xem danh bạ"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "Thá»i lượng (%s giây)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "Ảnh quá lá»›n. Äang nén..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "Tin nhắn được lưu như bản thảo"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "Khác"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "Dự thảo"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "Thá»i lượng của bản trình chiếu"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "Gá»­i email"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "Mục được thêm"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "Các mục đính kèm"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d đính kèm"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "Äã lên lịch\nthông báo"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "Thá»i gian\n(%d giây)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "Sử dụng thông tin danh bạ khác"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "Tin nhắn này bao gồm một file đính kèm không hiện lên"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "Tin nhắn này bao gồm các file đính kèm không được hiện lên"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "Lưu tất cả"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "Tin nhắn bản thảo"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "Tin nhăÌn sẽ Ä‘Æ°Æ¡Ì£c khôi phục"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "Tin nhắn đã được xếp lịch sẽ bị hủy"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "Chép văn bản tin nhắn"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "Xem chi tiết t.nhắn"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "Äã khoá tin nhắn"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "Hộp tin nhắn"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "Chặn"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "Chép vào điện thoại"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "Äã chép tin nhắn từ thẻ SIM"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "Hủy tin nhăÌn"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "Phần đính kèm"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "Gửi tin nhắn bị lỗi"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "Äã đạt số ký tá»± tối Ä‘a"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "Äang phục hồi"
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "Không có phần đính kèm"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "Äã chép vào bảng tạm"
+
diff --git a/main/po/zh_CN.po b/main/po/zh_CN.po
index 2d3def3..0240455 100755..100644
--- a/main/po/zh_CN.po
+++ b/main/po/zh_CN.po
@@ -7,15 +7,9 @@ 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 "å—é™æ¨¡å¼ã€‚ 无法æ’å…¥å—é™å†…容"
@@ -31,54 +25,18 @@ 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 "预览"
@@ -88,156 +46,48 @@ 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 "ä¿¡æ¯å·²é€è¾¾"
@@ -253,26 +103,14 @@ 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短信"
+msgstr "推é€ä¿¡æ¯"
msgid "IDS_MSGF_BODY_READ_REPORT"
msgstr "阅读报告"
@@ -289,9 +127,6 @@ msgstr "æ‹’ç»"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "接收选项"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "回å¤è·¯å¾„"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
msgstr "è¦æ±‚é€è¾¾æŠ¥å‘Š"
@@ -301,12 +136,6 @@ 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 "低"
@@ -316,48 +145,15 @@ 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ä¿¡æ¯"
@@ -367,21 +163,12 @@ 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 秒"
@@ -400,12 +187,6 @@ 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 "查看è”系人详细信æ¯"
@@ -418,18 +199,6 @@ 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 "转å‘"
@@ -439,132 +208,48 @@ 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 "选择地å€"
@@ -574,30 +259,9 @@ 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 "无效收件人"
@@ -610,27 +274,15 @@ 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"
@@ -641,7 +293,7 @@ msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED"
msgstr "无法转寄\n文件已é”上转寄"
msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"
-msgstr "预定的信æ¯"
+msgstr "定时信æ¯"
msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES"
msgstr "安全政策é™åˆ¶ç¼–写短信"
@@ -649,3 +301,204 @@ msgstr "安全政策é™åˆ¶ç¼–写短信"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "添加中,请ç¨ç­‰â€¦"
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "æœåŠ¡ä¸­å¿ƒåœ°å€"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "垃圾信æ¯"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "大"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "å°"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "å¾®å°"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "无法å‘é€å®šæ—¶ä¿¡æ¯ã€‚设置其他时间"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "日期和时间"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "彩信"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "没有添加收件人,请输入è”系人"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "å‘é€é€‰é¡¹"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "接收æ示类型"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "å‘é€SOSä¿¡æ¯"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "收件人"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "é‡å¤"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "ä¿¡æ¯"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "一次"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 次"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 次"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "我的情况很紧急。请帮帮我"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "未æ’å…¥ SIM å¡"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "æ‹ç…§"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "æ‹æ‘„录åƒ"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "录音"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "å°åŒºä¿¡æ¯"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIMå¡ä¿¡æ¯"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "æŒç»­æ—¶é—´å¿…须长于 %d 秒"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "无法添加内容"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "选择收件人"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "查看è”系人"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "æŒç»­æ—¶é—´(%s秒)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "图片太大。压缩中…"
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "ä¿¡æ¯å·²ä¿å­˜ä¸ºè‰ç¨¿"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "其他"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "è‰ç¨¿"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "å¹»ç¯ç‰‡æŒç»­æ—¶é—´"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "å‘é€é‚®ä»¶"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "æ’入的项目"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "附件æ¡ç›®"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d个附件"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "定时\n消æ¯"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "时长\n(%d 秒)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "使用其他è”系人信æ¯"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "此信æ¯åŒ…å«ä¸€ä¸ªæœªæ˜¾ç¤ºçš„附件"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "此信æ¯åŒ…å«æœªæ˜¾ç¤ºçš„附件"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "全部ä¿å­˜"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "ä¿¡æ¯è‰ç¨¿"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "å°†æ¢å¤ä¿¡æ¯"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "定时信æ¯å°†å–消"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "å¤åˆ¶ä¿¡æ¯æ–‡æœ¬"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "查看信æ¯è¯¦æƒ…"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "é”定信æ¯"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "ä¿¡ç®±"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "阻止"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "å¤åˆ¶è‡³æ‰‹æœº"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "从 SIM å¡å¤åˆ¶çš„ä¿¡æ¯"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "å–消信æ¯"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "附件"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "å‘é€å¤±è´¥çš„ä¿¡æ¯"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "已达到最大字符é™åˆ¶"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "æ¢å¤ä¸­..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "无附件"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "å·²å¤åˆ¶åˆ°å‰ªè´´æ¿"
+
diff --git a/main/po/zh_HK.po b/main/po/zh_HK.po
index c7e3a72..05488f5 100755..100644
--- a/main/po/zh_HK.po
+++ b/main/po/zh_HK.po
@@ -7,15 +7,9 @@ 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 "é™åˆ¶æ¨¡å¼ã€‚無法æ’å…¥é™åˆ¶çš„內容"
@@ -31,54 +25,18 @@ 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 "é è¦½"
@@ -88,156 +46,48 @@ 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 "訊æ¯å·²å‚³éž"
@@ -245,7 +95,7 @@ msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED"
msgstr "訊æ¯å·²å–回"
msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE"
-msgstr "自由"
+msgstr "å¯ç”¨"
msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING"
msgstr "警告"
@@ -253,24 +103,12 @@ 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 "推é€è¨Šæ¯"
@@ -289,9 +127,6 @@ msgstr "拒絕"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "接收é¸é …"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "回覆路徑"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
msgstr "è¦æ±‚é€é”報告"
@@ -301,12 +136,6 @@ 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 "低"
@@ -316,48 +145,15 @@ 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 訊æ¯"
@@ -367,21 +163,12 @@ 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 秒"
@@ -400,12 +187,6 @@ 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 "檢視è¯çµ¡äººè©³ç´°è³‡æ–™"
@@ -418,18 +199,6 @@ 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 "轉寄"
@@ -439,132 +208,48 @@ 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 "é¸æ“‡åœ°å€"
@@ -574,30 +259,9 @@ 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 "無效收件人"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "安全政策é™åˆ¶æ’°å¯«æ–‡å­—訊æ¯"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "加入中。請ç¨å€™â€¦"
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "æœå‹™ä¸­å¿ƒåœ°å€"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "垃圾訊æ¯"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "大"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "å°"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "å¾®å°"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "無法發é€é å®šè¨Šæ¯ã€‚請設定其他時間"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "日期和時間"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "多媒體訊æ¯"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "未加入收件人。請輸入收件人"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "發é€é¸é …"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "接收æ示類型"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "ç™¼é€ SOS 訊æ¯"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "收件人"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "é‡è¤‡"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "訊æ¯"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "1 次"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 次"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 次"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "我ç¾åœ¨æƒ…æ³ç·Šæ€¥ã€‚請救我"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM å¡æœªæ’å…¥"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "æ‹ç…§"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "æ‹æ”影片"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "錄音"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "å€åŸŸå»£æ’­è¨Šæ¯"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM å¡è¨Šæ¯"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "æŒçºŒæ™‚é–“å¿…é ˆè¶…éŽ %d 秒"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "無法加入內容"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "é¸æ“‡æ”¶ä»¶äºº"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "檢視è¯çµ¡äºº"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "æŒçºŒæ™‚é–“ (%s 秒)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "圖片太大。壓縮中…"
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "訊æ¯å·²å­˜æˆè‰ç¨¿"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "其他"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "è‰ç¨¿"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "投影片æŒçºŒæ™‚é–“"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "發é€é›»å­éƒµä»¶"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "å·²æ’入項目"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "已附加項目"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d 個附件"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "已排程\n訊æ¯"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "æŒçºŒæ™‚é–“n(%d 秒)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "使用其他è¯çµ¡äººè³‡è¨Š"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "此訊æ¯åŒ…括一個未顯示的附加檔案"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "此訊æ¯åŒ…括未顯示的附加檔案"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "全部儲存"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "è‰ç¨¿è¨Šæ¯"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "訊æ¯å°‡è¢«å¾©åŽŸ"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "é å®šè¨Šæ¯å°‡è¢«å–消"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "複製訊æ¯æ–‡å­—"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "檢視訊æ¯è©³æƒ…"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "已鎖定訊æ¯"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "訊æ¯ç®±"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "å°éŽ–"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "複製到手機"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "從 SIM å¡è¤‡è£½è¨Šæ¯"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "å–消訊æ¯"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "附件"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "正在發é€å¤±æ•—çš„ä¿¡æ¯"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "字元數目已é”上é™"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "正在還原..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "無附件"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "已複製到剪貼æ¿"
+
diff --git a/main/po/zh_TW.po b/main/po/zh_TW.po
index 1aa6a24..074b87a 100755..100644
--- a/main/po/zh_TW.po
+++ b/main/po/zh_TW.po
@@ -7,15 +7,9 @@ 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 "é™åˆ¶æ¨¡å¼ã€‚無法æ’å…¥é™åˆ¶çš„內容"
@@ -31,54 +25,18 @@ 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 "é è¦½"
@@ -88,156 +46,48 @@ 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 "訊æ¯å·²å‚³éž"
@@ -253,24 +103,12 @@ 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 "推é€è¨Šæ¯"
@@ -289,9 +127,6 @@ msgstr "拒絕"
msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS"
msgstr "接收é¸é …"
-msgid "IDS_MSGF_BODY_REPLYPATH"
-msgstr "回覆路徑"
-
msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT"
msgstr "è¦æ±‚傳éžå ±å‘Š"
@@ -301,12 +136,6 @@ 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 "低"
@@ -316,48 +145,15 @@ 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 訊æ¯"
@@ -367,21 +163,12 @@ 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 秒"
@@ -400,12 +187,6 @@ 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 "檢視è¯çµ¡äººè©³ç´°è³‡æ–™"
@@ -418,18 +199,6 @@ 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 "轉寄"
@@ -439,132 +208,48 @@ 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 "é¸æ“‡åœ°å€"
@@ -574,30 +259,9 @@ 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 "無效的收件人"
@@ -610,27 +274,15 @@ 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"
@@ -649,3 +301,204 @@ msgstr "訊æ¯å®‰å…¨æ”¿ç­–é™åˆ¶"
msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING"
msgstr "增加中。請ç¨å€™..."
+msgid "IDS_MSGF_BODY_PUSHADDRESS"
+msgstr "æœå‹™ä¸­å¿ƒåœ°å€"
+
+msgid "IDS_MSGF_BODY_SPAM_MESSAGES"
+msgstr "垃圾郵件訊æ¯"
+
+msgid "IDS_MSGF_BODY_LARGE"
+msgstr "大"
+
+msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_BODY_SMALL"
+msgstr "å°"
+
+msgid "IDS_MSGF_BODY_TINY"
+msgstr "ç´°å°"
+
+msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME"
+msgstr "無法發é€é å®šçš„訊æ¯ã€‚請設定其他時間"
+
+msgid "IDS_MSGC_OPT_DATE_AND_TIME"
+msgstr "日期與時間"
+
+msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"
+msgstr "多媒體訊æ¯"
+
+msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS"
+msgstr "沒有收件人,請輸入收件人"
+
+msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS"
+msgstr "傳é€é¸é …"
+
+msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE"
+msgstr "接收警報類型"
+
+msgid "IDS_MSGF_BODY_SOSALERTYES"
+msgstr "SOS"
+
+msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL"
+msgstr "正常"
+
+msgid "IDS_MSGF_OPT_SENDING_SOS"
+msgstr "å‚³é€ SOS"
+
+msgid "IDS_MSGF_BODY_RECIPIENTS"
+msgstr "收件人"
+
+msgid "IDS_MSGF_BODY_REPEAT"
+msgstr "é‡è¦†"
+
+msgid "IDS_MSGF_BODY_MESSAGE"
+msgstr "訊æ¯"
+
+msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE"
+msgstr "一次"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES"
+msgstr "3 次"
+
+msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES"
+msgstr "5 次"
+
+msgid "IDS_MSGF_BODY_SOSMSG"
+msgstr "我ç¾åœ¨æƒ…æ³ç·Šæ€¥ã€‚請救我"
+
+msgid "IDS_MSGF_POP_SIM_NOT_INSERTED"
+msgstr "SIM å¡æœªæ’å…¥"
+
+msgid "IDS_MSGC_BODY_TAKE_PICTURE"
+msgstr "æ‹ç…§"
+
+msgid "IDS_MSGC_BODY_CAPTURE_VIDEO"
+msgstr "æ‹æ”影片"
+
+msgid "IDS_MSGC_BODY_RECORD_AUDIO"
+msgstr "錄音"
+
+msgid "IDS_MSGF_BODY_CB_MESSAGES"
+msgstr "å€åŸŸå»£æ’­è¨Šæ¯"
+
+msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES"
+msgstr "SIM å¡è¨Šæ¯"
+
+msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"
+msgstr "æ™‚é–“å¿…é ˆè¶…éŽ %d 秒"
+
+msgid "IDS_MSGC_POP_MMSCANTADD"
+msgstr "無法加入內容"
+
+msgid "IDS_MSG_HEADER_SELECT_RECIPIENT"
+msgstr "é¸æ“‡æ”¶ä»¶äºº"
+
+msgid "IDS_MSGC_OPT_VIEW_CONTACT"
+msgstr "檢視è¯çµ¡äºº"
+
+msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB"
+msgstr "æŒçºŒæ™‚é–“ (%s 秒)"
+
+msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING"
+msgstr "圖片太大。壓縮 ..."
+
+msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT"
+msgstr "訊æ¯å·²å­˜æˆè‰ç¨¿"
+
+msgid "IDS_MSGF_BODY_OTHER"
+msgstr "其他"
+
+msgid "IDS_MSGF_HEADER_DRAFT_ABB"
+msgstr "è‰ç¨¿"
+
+msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE"
+msgstr "幻燈片時間為"
+
+msgid "IDS_MSGF_OPT_SEND_EMAIL"
+msgstr "傳é€é›»å­éƒµä»¶"
+
+msgid "IDS_MSGF_BODY_INSERTED_ITEMS"
+msgstr "å·²æ’入項目"
+
+msgid "IDS_MSGF_BODY_ATTACHED_ITEMS"
+msgstr "已附加項目"
+
+msgid "IDS_MSGC_BODY_PD_ATTACHMENTS"
+msgstr "%d 個附件"
+
+msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE"
+msgstr "已排定\n訊æ¯"
+
+msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"
+msgstr "æŒçºŒæ™‚é–“n(%d 秒)"
+
+msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"
+msgstr "使用其他è¯çµ¡äººè³‡è¨Š"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"
+msgstr "此訊æ¯åŒ…括一個未顯示的附加檔案"
+
+msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE"
+msgstr "此訊æ¯åŒ…括未顯示的附加檔案"
+
+msgid "IDS_MSGF_HEADER_SAVE_ALL"
+msgstr "全部儲存"
+
+msgid "IDS_MSG_BODY_DRAFT_MESSAGES"
+msgstr "è‰ç¨¿è¨Šæ¯"
+
+msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED"
+msgstr "訊æ¯å°‡å¾©åŽŸ"
+
+msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED"
+msgstr "é ç´„訊æ¯å°‡æœƒå–消"
+
+msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"
+msgstr "複製訊æ¯æ–‡å­—"
+
+msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"
+msgstr "檢視訊æ¯è©³ç´°è³‡æ–™"
+
+msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES"
+msgstr "已鎖定訊æ¯"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_BOXES"
+msgstr "訊æ¯æ–¹å¡Š"
+
+msgid "IDS_MSGF_OPT_BLOCK"
+msgstr "å°éŽ–"
+
+msgid "IDS_MSGF_BODY_COPY_TO_PHONE"
+msgstr "複製到手機"
+
+msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD"
+msgstr "從 SIM å¡è¤‡è£½çš„訊æ¯"
+
+msgid "IDS_MSGC_OPT_CANCEL_MESSAGE"
+msgstr "å–消訊æ¯"
+
+msgid "IDS_MSGC_OPT_ATTACHMENTS"
+msgstr "附件"
+
+msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE"
+msgstr "訊æ¯å‚³é€å¤±æ•—"
+
+msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS"
+msgstr "å·²é”字元數上é™"
+
+msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES"
+msgstr "Saved in My Files"
+
+msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS"
+msgstr "Message details"
+
+msgid "IDS_MSGF_POP_RESTORING_ING"
+msgstr "正在還原..."
+
+msgid "IDS_MSGF_POP_NO_ATTACHMENTS"
+msgstr "無附件"
+
+msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"
+msgstr "複製到剪貼簿"
+
diff --git a/org.tizen.message.xml b/org.tizen.message.xml
new file mode 100755
index 0000000..5a7398b
--- /dev/null
+++ b/org.tizen.message.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.message" version="0.8.15" install-location="internal-only">
+ <label>Message</label>
+ <author email="jyjeong@samsung.com" href="www.samsung.com">Jaeyun Jeong</author>
+ <description>Message Application</description>
+ <ui-application appid="org.tizen.message" exec="/opt/apps/org.tizen.message/bin/message" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+ <icon>org.tizen.message.png</icon>
+ <label>Messages</label>
+ <label xml:lang="en-us">Messages</label>
+ <label xml:lang="nl-nl">Berichten</label>
+ <label xml:lang="de-de">Nachrichten</label>
+ <label xml:lang="zh-hk">訊æ¯</label>
+ <label xml:lang="zh-cn">ä¿¡æ¯</label>
+ <label xml:lang="ru-ru">СообщениÑ</label>
+ <label xml:lang="zh-tw">訊æ¯</label>
+ <label xml:lang="ja-jp">メール</label>
+ <label xml:lang="es-es">Mensajes</label>
+ <label xml:lang="el-gr">ΜηνÏματα</label>
+ <label xml:lang="it-it">Messaggi</label>
+ <label xml:lang="tr-tr">Mesajlar</label>
+ <label xml:lang="pt-pt">Mensagem</label>
+ <label xml:lang="fr-fr">Messages</label>
+ <label xml:lang="ko-kr">메시지</label>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send"/>
+ <uri name="mmsto"/>
+ <mime name="*/*"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send"/>
+ <mime name="*/*"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send_text"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send_text"/>
+ <uri name="sms"/>
+ <mime name="*/*"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send_text"/>
+ <mime name="*/*"/>
+ </application-service>
+ </ui-application>
+ <ui-application appid="org.tizen.msg-ui-class0" exec="/opt/apps/org.tizen.message/bin/msg-ui-class0" nodisplay="true" multiple="false" type="capp" taskmanage="true">
+ <label>Msg-ui-class0</label>
+ <label xml:lang="en-us">Class0 message viewer</label>
+ <label xml:lang="ko-kr">메시지</label>
+ </ui-application>
+ <ui-application appid="msg-composer-efl" exec="/opt/ug/bin/msg-composer-efl" nodisplay="true" multiple="true" type="capp" taskmanage="false">
+ <icon>org.tizen.message.png</icon>
+ <label>Message</label>
+ <label xml:lang="en-us">Message</label>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send"/>
+ <uri name="mmsto"/>
+ <mime name="*/*"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send"/>
+ <mime name="*/*"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send_text"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send_text"/>
+ <uri name="sms"/>
+ <mime name="*/*"/>
+ </application-service>
+ <application-service>
+ <operation name="http://tizen.org/appsvc/operation/send_text"/>
+ <mime name="*/*"/>
+ </application-service>
+ </ui-application>
+</manifest>
diff --git a/packaging/org.tizen.message.spec b/packaging/org.tizen.message.spec
index c58ae83..3acb335 100755
--- a/packaging/org.tizen.message.spec
+++ b/packaging/org.tizen.message.spec
@@ -1,18 +1,19 @@
Name: org.tizen.message
Summary: message application
-Version: 0.8.2
+Version: 0.8.22
Release: 1
Group: devel
-License: Flora Software License
+License: Samsung
Source0: %{name}-%{version}.tar.gz
Requires(post): /bin/touch
-BuildRequires: pkgconfig(appcore-common)
-BuildRequires: pkgconfig(appcore-efl)
+Requires(post): /usr/bin/vconftool
BuildRequires: pkgconfig(appsvc)
BuildRequires: pkgconfig(bundle)
BuildRequires: pkgconfig(capi-appfw-application)
BuildRequires: pkgconfig(contacts-service)
BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(drm-client)
+BuildRequires: pkgconfig(drm-trusted)
BuildRequires: pkgconfig(devman_haptic)
BuildRequires: pkgconfig(elementary)
BuildRequires: pkgconfig(ecore)
@@ -25,8 +26,17 @@ BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(heynoti)
BuildRequires: pkgconfig(icu-i18n)
BuildRequires: pkgconfig(msg-service)
+BuildRequires: pkgconfig(mm-common)
+BuildRequires: pkgconfig(mm-player)
+BuildRequires: pkgconfig(mm-session)
+BuildRequires: pkgconfig(mmutil-jpeg)
+BuildRequires: pkgconfig(mmutil-imgp)
+BuildRequires: pkgconfig(mm-fileinfo)
BuildRequires: pkgconfig(utilX)
-BuildRequires: pkgconfig(ui-gadget)
+BuildRequires: pkgconfig(ui-gadget-1)
+BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(capi-media-sound-manager)
+BuildRequires: pkgconfig(status)
BuildRequires: libug-contacts-devel
BuildRequires: cmake
BuildRequires: edje-tools
@@ -52,18 +62,23 @@ make #%{?jobs:-j%jobs}
rm -rf %{buildroot}
%make_install
-mkdir -p %{buildroot}/opt/apps/org.tizen.message/data
-
%post
+vconftool set -t int db/private/org.tizen.message/font_size 0 -u 5000
+#mkdir -p %{buildroot}/opt/apps/org.tizen.message/data
+chown -R 5000:5000 /opt/apps/org.tizen.message/data
+mkdir -p /opt/ug/bin
+ln -sf /usr/bin/ug-client /opt/ug/bin/msg-composer-efl
%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/bin/msg-ui-class0
+/opt/share/packages/*.xml
/opt/apps/org.tizen.message/res/*
/opt/ug/lib/*.so
-%attr(-,inhouse,inhouse) %dir /opt/apps/org.tizen.message/data
+%dir /opt/apps/org.tizen.message/data
+/opt/share/icons/default/small/*.png
%changelog
diff --git a/setting/CMakeLists.txt b/setting/CMakeLists.txt
index 59ed23a..318a5e6 100755
--- a/setting/CMakeLists.txt
+++ b/setting/CMakeLists.txt
@@ -12,7 +12,13 @@ SET(SETTING_SRCS
./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/main/msg-ui-setting-font-size.c
+ ./src/general/msg-ui-setting-general-setting.c
+ ./src/general/msg-ui-setting-general-block-message.c
./src/text/msg-ui-setting-text-message.c
+ ./src/text/msg-ui-setting-text-service-center.c
+ ./src/multimedia/msg-ui-setting-mm-message.c
+ ./src/multimedia/msg-ui-setting-mm-recv-option.c
)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_SETTING_DIR}/include
@@ -31,12 +37,14 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"")
ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"")
ADD_DEFINITIONS("-DTARGET")
+ADD_DEFINITIONS("-DSLP_PROF")
+
# 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})
+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
index 04d433b..28e90d8 100755
--- a/setting/include/msg-ui-setting-callback.h
+++ b/setting/include/msg-ui-setting-callback.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __DEF_MSG_UI_SETTING_CALLBACK_H__
#define __DEF_MSG_UI_SETTING_CALLBACK_H__
@@ -24,6 +25,12 @@
=============================================================================*/
void msg_ui_setting_text_msg_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_setting_mm_msg_cb(void *data, Evas_Object *obj, void *event_info);
+
+void msg_ui_setting_spam_msg_cb(void *data, Evas_Object *obj, void *event_info);
+
+void msg_ui_setting_font_size_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
index b10d077..a79c16a 100755
--- a/setting/include/msg-ui-setting-common-util.h
+++ b/setting/include/msg-ui-setting-common-util.h
@@ -14,12 +14,14 @@
* 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-general-setting.h"
#include "msg-ui-setting-text-message.h"
-
+#include "msg-ui-setting-mm-message.h"
#define SETTING_MAX_FIELD_COUNT 20
#define SETTING_MAX_VALUE_COUNT 10
diff --git a/setting/include/msg-ui-setting-gadget.h b/setting/include/msg-ui-setting-gadget.h
index 61c3938..97b3c2e 100755
--- a/setting/include/msg-ui-setting-gadget.h
+++ b/setting/include/msg-ui-setting-gadget.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __DEF_MSG_UI_SETTING_GADGET_H__
#define __DEF_MSG_UI_SETTING_GADGET_H__
diff --git a/setting/include/msg-ui-setting-general-setting.h b/setting/include/msg-ui-setting-general-setting.h
new file mode 100755
index 0000000..f1136b2
--- /dev/null
+++ b/setting/include/msg-ui-setting-general-setting.h
@@ -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 __DEF_MSG_UI_SETTING_GENERAL_SETTING_H__
+#define __DEF_MSG_UI_SETTING_GENERAL_SETTING_H__
+
+
+#include <msg.h>
+#include "msg-ui-setting-main.h"
+
+
+#define MSG_UI_SETTING_BLOCKED_DETAIL_CREATE -1
+
+
+typedef enum {
+ MSG_UI_SETTING_GENERAL_MENU_NUMBERS_TO_REJECT,
+ MSG_UI_SETTING_GENERAL_MENU_BLOCK_MESSAGE,
+ MSG_UI_SETTING_GENERAL_MENU_MAX
+
+} MSG_UI_SETTING_GENERAL_MENU_E;
+
+typedef enum {
+ MSG_UI_SETTING_BLOCK_DETAIL_MENU_TITLE,
+ MSG_UI_SETTING_BLOCK_DETAIL_MENU_DATA,
+ MSG_UI_SETTING_BLOCK_DETAIL_MENU_MAX
+
+} MSG_UI_SETTING_BLOCK_DETAIL_MENU_E;
+
+
+/*============================================================================
+ FUNCTION DEFINE
+=============================================================================*/
+void msg_ui_setting_general_create_view(void *data, Evas_Object *obj, void *event_info);
+
+
+/*
+ * General Setting - Block Messsage
+ */
+void msg_ui_setting_block_message_back_btn_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_setting_block_message_exit_edit_mode(void *data);
+void msg_ui_setting_destroy_block_message(void *data);
+void msg_ui_setting_show_block_message(void *data);
+void msg_ui_setting_block_filter_update_view(void *data);
+void msg_ui_setting_general_block_message_main(void *data, Evas_Object *obj, void *event_info);
+
+
+#endif
diff --git a/setting/include/msg-ui-setting-main.h b/setting/include/msg-ui-setting-main.h
index 14f73e8..2dcaa7d 100755
--- a/setting/include/msg-ui-setting-main.h
+++ b/setting/include/msg-ui-setting-main.h
@@ -17,9 +17,6 @@
#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"
@@ -38,6 +35,11 @@
typedef enum {
MSG_UI_SETTING_MAIN_MENU_TEXT_MESSAGES,
+ MSG_UI_SETTING_MAIN_MENU_MULTIMEDIA_MESSAGES,
+ MSG_UI_SETTING_MAIN_MENU_SPAM_MESSAGES,
+ MSG_UI_SETTING_MAIN_MENU_CB_MESSAGES,
+ MSG_UI_SETTING_MAIN_MENU_SUB_TITLE,
+ MSG_UI_SETTING_MAIN_MENU_FONT_SIZE,
MSG_UI_SETTING_MAIN_MENU_MAX
@@ -55,9 +57,11 @@ 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_launch_spam_setting(PMSG_SETTING_DATA settingData);
void msg_ui_setting_create_main_view(PMSG_SETTING_DATA settingData);
+void msg_ui_setting_font_size_create_view(void *data, Evas_Object *obj, void *event_info);
#endif /* __DEF_MSG_UI_MAIN_SETTING_H__ */
diff --git a/setting/include/msg-ui-setting-mm-message.h b/setting/include/msg-ui-setting-mm-message.h
new file mode 100755
index 0000000..956bfd1
--- /dev/null
+++ b/setting/include/msg-ui-setting-mm-message.h
@@ -0,0 +1,76 @@
+/*
+ * 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_MM_MESSAGE_H__
+#define __DEF_MSG_UI_SETTING_MM_MESSAGE_H__
+
+
+#include "msg-ui-setting-main.h"
+
+
+#define MSG_UI_SETTING_MM_STYLE_FONT_VERY_SMALL 28
+#define MSG_UI_SETTING_MM_STYLE_FONT_SMALL 32
+#define MSG_UI_SETTING_MM_STYLE_FONT_NORMAL 44
+#define MSG_UI_SETTING_MM_STYLE_FONT_LARGE 56
+
+
+/*============================================================================
+ ENUMS
+=============================================================================*/
+
+typedef enum {
+ MSG_UI_SETTING_MM_MENU_RECEIVING_OPTION,
+ MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT,
+ MSG_UI_SETTING_MM_MENU_READ_REPORT,
+ MSG_UI_SETTING_MM_MENU_CREATE_MODE,
+ MSG_UI_SETTING_MM_MENU_MAX
+
+} MSG_UI_SETTING_MM_MENU_E;
+
+typedef enum {
+ MSG_UI_SETTING_MM_RECV_OPT_MENU_HOME,
+ MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN,
+ MSG_UI_SETTING_MM_RECV_OPT_MENU_MAX
+
+} MSG_UI_SETTING_MM_RECV_OPT_MENU_E;
+
+typedef enum {
+ MSG_UI_SETTING_MM_READ_REP_MENU_REQUEST,
+ MSG_UI_SETTING_MM_READ_REP_MENU_SEND,
+ MSG_UI_SETTING_MM_READ_REP_MENU_MAX
+
+} MSG_UI_SETTING_MM_READ_REP_MENU_E;
+
+
+/*============================================================================
+ FUNCTION DEFINE
+=============================================================================*/
+void msg_ui_setting_mm_create_view(void *data, Evas_Object *obj, void *event_info);
+
+/*
+ * Receiving Option API
+ */
+void msg_ui_setting_mm_recv_opt_main(void *data, Evas_Object *obj, void *event_info);
+
+/*
+ * Read Report API
+ */
+void msg_ui_setting_mm_read_rep_main(void *data, Evas_Object *obj, void *event_info);
+
+
+#endif
+
diff --git a/setting/include/msg-ui-setting-msg-service-wrapper.h b/setting/include/msg-ui-setting-msg-service-wrapper.h
index c330502..972dbbd 100755
--- a/setting/include/msg-ui-setting-msg-service-wrapper.h
+++ b/setting/include/msg-ui-setting-msg-service-wrapper.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __DEF_MSG_UI_SETTING_MSG_SERVICE_WRAPPER_H__
#define __DEF_MSG_UI_SETTING_MSG_SERVICE_WRAPPER_H__
diff --git a/setting/include/msg-ui-setting-text-message.h b/setting/include/msg-ui-setting-text-message.h
index cd63e3b..fa1d621 100755
--- a/setting/include/msg-ui-setting-text-message.h
+++ b/setting/include/msg-ui-setting-text-message.h
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#ifndef __DEF_MSG_UI_SETTING_TEXT_MESSAGE_H__
#define __DEF_MSG_UI_SETTING_TEXT_MESSAGE_H__
@@ -26,10 +27,18 @@
=============================================================================*/
typedef enum {
MSG_UI_SETTING_TEXT_MENU_REQ_DELIVERY_REPORT,
+ MSG_UI_SETTING_TEXT_MENU_SMSC,
MSG_UI_SETTING_TEXT_MENU_MAX
} MSG_UI_SETTING_TEXT_MENU_E;
+typedef enum {
+ MSG_UI_SETTING_SMSC_MENU_ADDRESS_TITLE,
+ MSG_UI_SETTING_SMSC_MENU_ADDRESS,
+ MSG_UI_SETTING_SMSC_MENU_MAX
+
+} MSG_UI_SETTING_SMSC_MENU_E;
+
/*============================================================================
FUNCTION DEFINE
@@ -37,5 +46,12 @@ typedef enum {
void msg_ui_setting_text_create_view(void *data, Evas_Object *obj, void *event_info);
+/*
+ * text message - service centre
+ */
+void msg_ui_setting_service_center_selected_main(void *data, int index);
+void msg_ui_setting_create_service_center_list(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
index d52c8ec..2968e33 100755
--- a/setting/include/msg-ui-setting-types.h
+++ b/setting/include/msg-ui-setting-types.h
@@ -14,22 +14,26 @@
* 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"
+#include <msg.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_FILTER_LIST 100
#define MAX_SMSC_LIST SMSC_LIST_MAX
#define MAX_SMSC_NAME_LEN SMSC_NAME_MAX
#define MAX_SMSC_ADDR_LEN SMSC_ADDR_MAX
+#define MAX_MY_CH_LIST CB_CHANNEL_MAX
+#define MAX_CH_NAME_LEN CB_CHANNEL_NAME_MAX
+#define MAX_CBLANG_COUNT MSG_CBLANG_TYPE_MAX
/*============================================================================
TYPES
@@ -41,6 +45,11 @@
typedef unsigned int MSG_UI_SETTING_TYPE_T;
+/**
+ * The values for this type SHOULD be in _MSG_UI_GENERAL_TYPE_E.
+ */
+typedef unsigned int MSG_UI_GENERAL_TYPE_T;
+
/*============================================================================
ENUMS
@@ -50,32 +59,139 @@ typedef unsigned int MSG_UI_SETTING_TYPE_T;
* This enum is used as the value of MSG_UI_SETTING_TYPE_T.
*/
enum _MSG_UI_SETTING_TYPE_E {
+ MSG_UI_SETTING_TYPE_GENERAL = MSG_GENERAL_OPT,
MSG_UI_SETTING_TYPE_SMS_SEND = MSG_SMS_SENDOPT,
+ MSG_UI_SETTING_TYPE_SMSC_LIST = MSG_SMSC_LIST,
+ MSG_UI_SETTING_TYPE_MMS_SEND = MSG_MMS_SENDOPT,
+ MSG_UI_SETTING_TYPE_MMS_RECEIVE = MSG_MMS_RECVOPT,
+ MSG_UI_SETTING_TYPE_MMS_CLASS = MSG_MMS_CLASSOPT,
+ MSG_UI_SETTING_TYPE_CBMSG = MSG_CBMSG_OPT,
};
+typedef enum {
+ MSG_UI_SETTING_BLOCK_FILTER_VIEW,
+ MSG_UI_SETTING_BLOCK_FILTER_DELETE_VIEW,
+ MSG_UI_SETTING_BLOCK_FILTER_DETAIL_VIEW,
+ MSG_UI_SETTING_BLOCK_LIST_VIEW,
+ MSG_UI_SETTING_BLOCK_LIST_DELETE_VIEW,
+
+} MSG_UI_SETTING_BLOCK_VIEW_MODE_E;
+
/*============================================================================
STRUCT DEFINE
=============================================================================*/
typedef struct {
+ Evas_Object *general_genlist;
+ Elm_Genlist_Item_Class general_itc;
+
+} MSG_UI_SETTING_GENERAL_S;
+
+typedef struct {
Evas_Object *text_genlist;
+ Elm_Genlist_Item_Class text_2line_itc;
Elm_Genlist_Item_Class text_1line_1icon_itc;
+
Evas_Object *req_delivery_rep_check;
+ Elm_Object_Item *service_centre_item;
+ Evas_Object *smsc_all_genlist;
+ Elm_Genlist_Item_Class text_1line_2icon_itc;
+ Evas_Object *service_centre_radio_group;
+ Evas_Object *service_centre_btn_reveal;
+
+ Evas_Object *smsc_genlist;
+ Elm_Genlist_Item_Class smsc_title_itc;
+ Elm_Genlist_Item_Class smsc_1icon_itc;
+
+ /* Service Center */
+ int center_index;
+ Evas_Object *smsc_addr_entry;
+
} MSG_UI_SETTING_TEXT_S;
+typedef struct {
+ Evas_Object *mm_genlist;
+ Elm_Genlist_Item_Class mm_itc;
+ Elm_Genlist_Item_Class mm_1line_1icon_itc;
+ Elm_Genlist_Item_Class mm_2line_1icon_itc;
+ Evas_Object *mm_delivery_report_check;
+
+ /* Creation mode */
+ Elm_Genlist_Item_Class mm_creation_mode_itc;
+ Elm_Object_Item *creation_mode_item;
+ Evas_Object *creation_radio_group;
+
+ /* Receiving Option */
+ Evas_Object *mm_recv_genlist;
+ Elm_Genlist_Item_Class mm_recv_2line_expand_itc;
+
+ Elm_Genlist_Item_Class mm_recv_home_network_itc;
+ Elm_Genlist_Item_Class mm_recv_foreign_network_itc;
+
+ Elm_Object_Item *mm_recv_home_network_item;
+ Evas_Object *mm_recv_home_network_radio_group;
+
+ Elm_Object_Item *mm_recv_foreign_network_item;
+ Evas_Object *mm_recv_foreign_network_radio_group;
+
+ /* Read report Menu */
+ Evas_Object *mm_read_rep_genlist;
+ Elm_Genlist_Item_Class mm_read_rep_1line_1icon_itc;
+ Evas_Object *mm_read_rep_request_check;
+ Evas_Object *mm_read_rep_send_check;
+
+} MSG_UI_SETTING_MM_S;
+
typedef struct _MSG_UI_SETTING_S {
MSG_UI_SETTING_TYPE_T type;
- MSG_SETTING_S sms_send_opt;
+ msg_struct_t setting_opt;
+ msg_struct_list_s *smsc_list;
} MSG_UI_SETTING_S;
+typedef struct _MSG_UI_SETTING_FILTER_S {
+ Evas_Object *block_layout;
+
+ msg_struct_list_s filterList;
+
+ Evas_Object *block_filter_nocontents;
+ Evas_Object *block_filter_box;
+
+ Elm_Object_Item *ctrl_btn[MAX_SETTING_CTRLBAR_BUTTON];
+ Elm_Object_Item *block_left_btn;
+ Elm_Object_Item *block_right_btn;
+
+ Evas_Object *block_ctrl_bar;
+
+ /* Filter list */
+ Evas_Object *block_filter_genlist;
+ Elm_Genlist_Item_Class block_filter_itc;
+
+ Evas_Object *block_filter_sel_all_layout;
+ Evas_Object *block_filter_chk_sel_all;
+ Eina_Bool block_filter_chk_sel_all_state;
+ Evas_Object *block_filter_chk[MAX_FILTER_LIST];
+ Eina_Bool block_filter_chk_state[MAX_FILTER_LIST];
+
+ /* Filter detail view. */
+ int block_filter_sel_index;
+ Evas_Object *block_filter_detail_layout;
+ Evas_Object *block_filter_detail_genlist;
+ Elm_Genlist_Item_Class block_filter_detail_title_itc;
+ Elm_Genlist_Item_Class block_filter_detail_1icon_itc;
+ Evas_Object *block_filter_detail_done_btn;
+ Evas_Object *block_filter_detail_entry_ly;
+ Evas_Object *block_filter_detail_entry;
+
+} MSG_UI_SETTING_FILTER_S;
+
typedef struct _MSG_SETTING_DATA {
- struct ui_gadget *ug;
+ ui_gadget_h ug;
struct ug_cbs cbs;
- struct ui_gadget *loaded_ug;
+ ui_gadget_h loaded_ug;
Evas_Object *layout_main;
Evas_Object *bg;
@@ -84,20 +200,28 @@ typedef struct _MSG_SETTING_DATA {
Evas_Object *selectioninfo;
Evas_Object *selectioninfo_layout;
- MSG_HANDLE_T msgHandle;
+ 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;
+ Evas_Object *cb_activate_check;
Elm_Genlist_Item_Class main_itc;
+ Elm_Genlist_Item_Class cb_msg_itc;
+ Elm_Genlist_Item_Class sub_title_itc;
+
+ MSG_UI_SETTING_FILTER_S block_msg;
+
+ Evas_Object *font_size_genlist;
+ Elm_Genlist_Item_Class font_size_itc;
+ Evas_Object *font_size_radio_group;
+ int font_size_index;
union {
+ MSG_UI_SETTING_GENERAL_S general_setting;
MSG_UI_SETTING_TEXT_S text_msg;
-
+ MSG_UI_SETTING_MM_S mm_msg;
} list;
} MSG_SETTING_DATA, *PMSG_SETTING_DATA;
diff --git a/setting/src/general/msg-ui-setting-general-block-message.c b/setting/src/general/msg-ui-setting-general-block-message.c
new file mode 100755
index 0000000..bc0784b
--- /dev/null
+++ b/setting/src/general/msg-ui-setting-general-block-message.c
@@ -0,0 +1,1129 @@
+/*
+ * 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-general-setting.h"
+
+
+/*============================================================================
+ STATIC FUNCTION DEFINE
+=============================================================================*/
+static void __msg_ui_setting_block_filter_detail_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_detail_entry_focus_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_detail_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_detail_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+static char *__msg_ui_setting_block_filter_detail_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_setting_block_filter_detail_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_setting_block_filter_create_detail_view(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+static void __msg_ui_setting_block_filter_detail_save(void *data);
+static void __msg_ui_setting_block_filter_detail_popup_yes_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_detail_popup_no_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_detail_done_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_detail_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_general_block_filter_detail_trans_finished(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_detail_main(void *data, int index);
+
+static char *__msg_ui_setting_block_filter_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_block_filter_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_block_filter_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_block_filter_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_create_block_filter_genlist(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+static void __msg_ui_setting_block_filter_check_select_all(void *data);
+static void __msg_ui_setting_block_filter_sel_all_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_sel_all_chk_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_delete_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_filter_delete_view_update_controlbar(void *data);
+static void __msg_ui_setting_block_filter_delete_view(void *data);
+static void __msg_ui_setting_init_block_message(void *data);
+static void __msg_ui_setting_block_message_delete_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_message_add_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_block_message_update_controlbar(void *data);
+
+
+/*============================================================================
+ FUNCTION IMPLEMENT
+=============================================================================*/
+
+/**********************************
+ *** Block filter detail view ***
+ **********************************/
+
+static void __msg_ui_setting_block_filter_detail_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ char *buf = NULL;
+
+ if (elm_object_focus_get(settingData->block_msg.block_filter_detail_entry_ly)) {
+ 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");
+ }
+
+ buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->block_msg.block_filter_detail_entry));
+
+ /* If input strings are composed of only space or empty, Done button should be disabled. */
+ if (!buf || strlen(g_strstrip(buf)) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "No value");
+ if (elm_object_disabled_get(settingData->block_msg.block_filter_detail_done_btn) == EINA_FALSE)
+ elm_object_disabled_set(settingData->block_msg.block_filter_detail_done_btn, EINA_TRUE);
+ } else {
+ if (elm_object_disabled_get(settingData->block_msg.block_filter_detail_done_btn) == EINA_TRUE)
+ elm_object_disabled_set(settingData->block_msg.block_filter_detail_done_btn, EINA_FALSE);
+ }
+
+ if (buf != NULL)
+ free(buf);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_block_filter_detail_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_block_filter_detail_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_block_filter_detail_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);
+}
+
+static char *__msg_ui_setting_block_filter_detail_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 (index == MSG_UI_SETTING_BLOCK_DETAIL_MENU_TITLE) {
+ return strdup(dgettext(MESSAGE_PKGNAME, "Word"));
+ } 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 Evas_Object *__msg_ui_setting_block_filter_detail_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int index = (int)data;
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+
+ int sel_index = settingData->block_msg.block_filter_sel_index;
+ char filter_val[MAX_FILTER_VALUE_LEN+1] = {0,};
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ch_index = %d", sel_index);
+
+ if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+ if (index == MSG_UI_SETTING_BLOCK_DETAIL_MENU_DATA) {
+ char *buf = NULL;
+ static Elm_Entry_Filter_Limit_Size block_filter_limit_filter_data;
+
+ Evas_Object *block_filter_ly;
+ Evas_Object *block_filter_entry;
+
+ block_filter_ly = elm_layout_add(obj);
+ elm_layout_theme_set(block_filter_ly, "layout", "editfield", "default");
+ elm_object_part_text_set(block_filter_ly, "elm.guidetext", dgettext("sys_string", "IDS_COM_BODY_TAP_TO_ADD_TEXT"));
+ settingData->block_msg.block_filter_detail_entry_ly = block_filter_ly;
+
+ block_filter_entry = elm_entry_add(block_filter_ly);
+ elm_entry_single_line_set(block_filter_entry, EINA_TRUE);
+ elm_entry_scrollable_set(block_filter_entry, EINA_TRUE);
+ elm_entry_autocapital_type_set(block_filter_entry, ELM_AUTOCAPITAL_TYPE_NONE);
+ elm_entry_input_panel_layout_set(block_filter_entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+ settingData->block_msg.block_filter_detail_entry = block_filter_entry;
+
+ evas_object_smart_callback_add(block_filter_entry, "changed", __msg_ui_setting_block_filter_detail_entry_changed_cb, (void *)settingData);
+ evas_object_smart_callback_add(block_filter_entry, "focused", __msg_ui_setting_block_filter_detail_entry_focus_cb, (void *)block_filter_ly);
+ evas_object_smart_callback_add(block_filter_entry, "unfocused", __msg_ui_setting_block_filter_detail_entry_unfocus_cb, (void *)block_filter_ly);
+ elm_object_signal_callback_add(block_filter_ly, "elm,eraser,clicked", "elm", __msg_ui_setting_block_filter_detail_eraser_clicked_cb, (void *)block_filter_entry);
+
+ /* Before giving focus to the entry object, the entry object should be shown. */
+ evas_object_show(block_filter_entry);
+ elm_object_part_content_set(block_filter_ly, "elm.swallow.content", block_filter_entry);
+
+ block_filter_limit_filter_data.max_char_count = 0;
+ block_filter_limit_filter_data.max_byte_count = MAX_FILTER_VALUE_LEN;
+ elm_entry_markup_filter_append(block_filter_entry, elm_entry_filter_limit_size, &block_filter_limit_filter_data);
+
+ /* Set data only in edit case. */
+ if (sel_index != MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) {
+ msg_get_str_value(settingData->block_msg.filterList.msg_struct_info[sel_index], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
+ if (strlen(filter_val) > 0) {
+ buf = elm_entry_utf8_to_markup(filter_val);
+ elm_entry_entry_set(block_filter_entry, buf);
+ if (buf != NULL) {
+ free(buf);
+ buf = NULL;
+ }
+ }
+ }
+
+ if (settingData->block_msg.block_filter_detail_entry != NULL)
+ elm_object_focus_set(settingData->block_msg.block_filter_detail_entry, EINA_TRUE);
+
+ return block_filter_ly;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Nothing to do.");
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static Evas_Object *__msg_ui_setting_block_filter_create_detail_view(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *block_filter_detail_genlist;
+
+ int index = 0;
+
+ block_filter_detail_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->block_msg.block_filter_detail_genlist = block_filter_detail_genlist;
+
+ settingData->block_msg.block_filter_detail_title_itc.item_style = "dialogue/title";
+ settingData->block_msg.block_filter_detail_title_itc.func.text_get = __msg_ui_setting_block_filter_detail_gl_text_get;
+ settingData->block_msg.block_filter_detail_title_itc.func.content_get = NULL;
+ settingData->block_msg.block_filter_detail_title_itc.func.state_get = NULL;
+ settingData->block_msg.block_filter_detail_title_itc.func.del = NULL;
+
+ settingData->block_msg.block_filter_detail_1icon_itc.item_style = "dialogue/1icon";
+ settingData->block_msg.block_filter_detail_1icon_itc.func.text_get = NULL;
+ settingData->block_msg.block_filter_detail_1icon_itc.func.content_get = __msg_ui_setting_block_filter_detail_gl_content_get;
+ settingData->block_msg.block_filter_detail_1icon_itc.func.state_get = NULL;
+ settingData->block_msg.block_filter_detail_1icon_itc.func.del = NULL;
+
+ elm_genlist_item_append(block_filter_detail_genlist, &settingData->block_msg.block_filter_detail_title_itc,
+ (void *)index, NULL, ELM_GENLIST_ITEM_NONE,
+ NULL, (void *)index);
+ index++;
+
+ elm_genlist_item_append(block_filter_detail_genlist, &settingData->block_msg.block_filter_detail_1icon_itc,
+ (void *)index, NULL, ELM_GENLIST_ITEM_NONE,
+ NULL, (void *)index);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return block_filter_detail_genlist;
+}
+
+static void __msg_ui_setting_block_filter_detail_save(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ char *buf = NULL;
+ int index;
+ msg_error_t err = MSG_SUCCESS;
+ int filter_id = 0;
+ char filter_val[MAX_FILTER_VALUE_LEN+1] = {0,};
+
+ msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
+ index = settingData->block_msg.block_filter_sel_index;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->block_msg.block_filter_detail_entry));
+
+ /* If input strings are composed of only space, it isn't saved. */
+ if (!buf || strlen(g_strstrip(buf)) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "No value");
+ goto block_filter_detail_exit;
+ }
+
+ /* Check whether value is changed or not. */
+ if (index != MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) {
+ err = msg_get_str_value(settingData->block_msg.filterList.msg_struct_info[index], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
+ if (strlen(filter_val) > 0) {
+ if (strcmp(filter_val, buf) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Value is not changed.");
+ goto block_filter_detail_exit;
+ }
+ }
+ }
+
+ memset(filter_val, 0x0, sizeof(filter_val));
+ strncpy(filter_val, buf, MAX_FILTER_VALUE_LEN);
+
+ err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_SUBJECT);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value(MSG_FILTER_TYPE_INT) is failed : err = %d", err);
+ goto block_filter_detail_exit;
+ }
+
+ err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value(MSG_FILTER_VALUE_STR) is failed : err = %d", err);
+ goto block_filter_detail_exit;
+ }
+
+ if (index == MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) {
+ err = msg_add_filter(settingData->msgHandle, filter);
+ if (err != MSG_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_add_filter() is failed : err = %d", err);
+ } else {
+ msg_get_int_value(settingData->block_msg.filterList.msg_struct_info[index], MSG_FILTER_ID_INT, &filter_id);
+ if (err != MSG_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_int_value() (filter_id) is failed : err = %d", err);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "filterID = %d", filter_id);
+ msg_set_int_value(filter, MSG_FILTER_ID_INT, filter_id);
+
+ err = msg_update_filter(settingData->msgHandle, filter);
+ if (err != MSG_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_update_filter() is failed : err = %d", err);
+ }
+
+ if (err == MSG_ERR_FILTER_DUPLICATED) {
+ msg_ui_setting_common_show_popup(settingData, dgettext(MESSAGE_PKGNAME, "Word is duplicated."));
+ }
+
+ msg_ui_setting_block_filter_update_view(settingData);
+
+block_filter_detail_exit:
+ if (buf)
+ free(buf);
+
+ if (filter)
+ msg_release_struct(&filter);
+
+ elm_naviframe_item_pop(settingData->navi_frame);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_block_filter_detail_popup_yes_btn_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_setting_block_filter_detail_save(settingData);
+}
+
+static void __msg_ui_setting_block_filter_detail_popup_no_btn_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;
+ }
+
+ elm_naviframe_item_pop(settingData->navi_frame);
+}
+
+static void __msg_ui_setting_block_filter_detail_done_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ Evas_Object *btn1;
+ Evas_Object *btn2;
+
+ /* Create a popup. */
+ 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, dgettext(MESSAGE_PKGNAME, "If added words are contained to received message from a person in my phonebook, the message will not be blocked. \n Continue?"));
+
+ btn1 = elm_button_add(settingData->popup);
+ elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_YES"));
+ elm_object_part_content_set(settingData->popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __msg_ui_setting_block_filter_detail_popup_yes_btn_cb, settingData);
+
+ btn2 = elm_button_add(settingData->popup);
+ elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_NO"));
+ elm_object_part_content_set(settingData->popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", __msg_ui_setting_block_filter_detail_popup_no_btn_cb, settingData);
+
+ evas_object_show(settingData->popup);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_block_filter_detail_cancel_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);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ elm_naviframe_item_pop(settingData->navi_frame);
+}
+
+static void __msg_ui_setting_general_block_filter_detail_trans_finished(void *data, Evas_Object *obj, void *event_info)
+{
+ /* Enable pushing the prev button. */
+ elm_naviframe_prev_btn_auto_pushed_set(obj, EINA_TRUE);
+
+ evas_object_smart_callback_del(obj, "transition,finished", \
+ __msg_ui_setting_general_block_filter_detail_trans_finished);
+}
+
+static void __msg_ui_setting_block_filter_detail_main(void *data, int index)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *block_filter_detail_layout;
+ Evas_Object *block_filter_detail_genlist;
+
+ Elm_Object_Item *navi_it;
+
+ char title[DEF_BUF_LEN_S] = {0, };
+
+ Evas_Object *title_left_btn;
+ Evas_Object *title_right_btn;
+
+ settingData->block_msg.block_filter_sel_index = index;
+
+ block_filter_detail_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ block_filter_detail_genlist = __msg_ui_setting_block_filter_create_detail_view(settingData->navi_frame, settingData);
+ elm_object_part_content_set(block_filter_detail_layout, "elm.swallow.content", block_filter_detail_genlist);
+
+ if (index == MSG_UI_SETTING_BLOCKED_DETAIL_CREATE)
+ strncpy(title, dgettext(MESSAGE_PKGNAME, "Add words"), sizeof(title)-1);
+ else
+ strncpy(title, dgettext(MESSAGE_PKGNAME, "Edit words"), sizeof(title)-1);
+
+ /* Disable pushing the prev button automatically. */
+ elm_naviframe_prev_btn_auto_pushed_set(settingData->navi_frame, EINA_FALSE);
+ evas_object_smart_callback_add(settingData->navi_frame, "transition,finished", \
+ __msg_ui_setting_general_block_filter_detail_trans_finished, NULL);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, title, NULL, NULL, block_filter_detail_layout, NULL);
+
+ title_left_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \
+ dgettext("sys_string", "IDS_COM_SK_DONE"), \
+ __msg_ui_setting_block_filter_detail_done_btn_cb, (void *)settingData);
+ elm_object_item_part_content_set(navi_it, "title_left_btn", title_left_btn);
+ settingData->block_msg.block_filter_detail_done_btn = title_left_btn;
+
+ title_right_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \
+ dgettext("sys_string", "IDS_COM_SK_CANCEL"), \
+ __msg_ui_setting_block_filter_detail_cancel_btn_cb, (void *)settingData);
+ elm_object_item_part_content_set(navi_it, "title_right_btn", title_right_btn);
+
+ if (index == MSG_UI_SETTING_BLOCKED_DETAIL_CREATE)
+ elm_object_disabled_set(title_left_btn, EINA_TRUE);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+/********************************
+ *** Block filter main view ***
+ ********************************/
+
+static char *__msg_ui_setting_block_filter_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int index = (int)data;
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ msg_error_t err = MSG_SUCCESS;
+ char filter_val[MAX_FILTER_VALUE_LEN] = {0,};
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
+ err = msg_get_str_value(settingData->block_msg.filterList.msg_struct_info[index], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
+ if (strlen(filter_val) > 0)
+ return strdup(filter_val);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_setting_block_filter_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;
+ int i = 0;
+ int count = 0;
+ int total_cnt = 0;
+
+ total_cnt = settingData->block_msg.filterList.nCount;
+
+ for (i = 0; i < total_cnt; i++) {
+ if (settingData->block_msg.block_filter_chk_state[i] == EINA_TRUE)
+ count++;
+ }
+
+ if (count == total_cnt) {
+ if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_TRUE) {
+ settingData->block_msg.block_filter_chk_sel_all_state = EINA_TRUE;
+ elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state);
+ }
+ } else {
+ if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_FALSE) {
+ settingData->block_msg.block_filter_chk_sel_all_state = EINA_FALSE;
+ elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state);
+ }
+ }
+
+ if (count == 0) {
+ msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, NULL, settingData);
+ } else {
+ char str[DEF_BUF_LEN_S] = {0, };
+
+ snprintf(str, sizeof(str), dgettext("sys_string", "IDS_COM_BODY_PD_SELECTED"), count);
+ msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, str, settingData);
+ }
+
+ if (count == 0)
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE);
+ else
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *__msg_ui_setting_block_filter_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 (elm_genlist_decorate_mode_get(obj)) {
+ if (!strcmp(part, "elm.edit.icon.1")) {
+ check = elm_check_add(obj);
+ elm_check_state_pointer_set(check, &settingData->block_msg.block_filter_chk_state[index]);
+
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ evas_object_smart_callback_add(check, "changed", __msg_ui_setting_block_filter_gl_check_clicked_cb, settingData);
+
+ return check;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_setting_block_filter_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");
+
+ int i = 0;
+ int count = 0;
+ int total_cnt = 0;
+
+ total_cnt = settingData->block_msg.filterList.nCount;
+
+ elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+
+ if (elm_genlist_decorate_mode_get(obj)) {
+ settingData->block_msg.block_filter_chk_state[index] = !settingData->block_msg.block_filter_chk_state[index];
+
+ for (i = 0; i < total_cnt; i++) {
+ if (settingData->block_msg.block_filter_chk_state[i] == EINA_TRUE)
+ count++;
+ }
+
+ if (count == total_cnt) {
+ if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_TRUE) {
+ settingData->block_msg.block_filter_chk_sel_all_state = EINA_TRUE;
+ elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state);
+ }
+ } else {
+ if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_FALSE) {
+ settingData->block_msg.block_filter_chk_sel_all_state = EINA_FALSE;
+ elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state);
+ }
+ }
+
+ elm_genlist_item_fields_update((Elm_Object_Item *)event_info, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
+
+ if (count == 0) {
+ msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, NULL, settingData);
+ } else {
+ char str[DEF_BUF_LEN_S] = {0, };
+
+ snprintf(str, sizeof(str), dgettext("sys_string", "IDS_COM_BODY_PD_SELECTED"), count);
+ msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, str, settingData);
+ }
+
+ if (count == 0)
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE);
+ else
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE);
+
+ } else {
+ __msg_ui_setting_block_filter_detail_main(settingData, index);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *__msg_ui_setting_create_block_filter_genlist(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *block_filter_genlist;
+
+ int index = 0;
+ int total_cnt = 0;
+
+ total_cnt = settingData->block_msg.filterList.nCount;
+
+ block_filter_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->block_msg.block_filter_genlist = block_filter_genlist;
+
+ msg_ui_setting_common_append_genlist_separator(block_filter_genlist, settingData);
+
+ settingData->block_msg.block_filter_itc.item_style = "dialogue/1text";
+ settingData->block_msg.block_filter_itc.func.text_get = __msg_ui_setting_block_filter_gl_text_get;
+ settingData->block_msg.block_filter_itc.func.content_get = __msg_ui_setting_block_filter_gl_content_get;
+ settingData->block_msg.block_filter_itc.func.state_get = NULL;
+ settingData->block_msg.block_filter_itc.func.del = NULL;
+ settingData->block_msg.block_filter_itc.decorate_all_item_style = "dialogue/edit";
+
+ for (index = 0; index < total_cnt; index++) {
+ elm_genlist_item_append(block_filter_genlist, &settingData->block_msg.block_filter_itc, (void *)index,
+ NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_setting_block_filter_gl_sel, (void *)index);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return block_filter_genlist;
+}
+
+static void __msg_ui_setting_block_filter_check_select_all(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Eina_Bool sel_all_state = EINA_FALSE;
+ int i = 0;
+ int total_cnt = 0;
+
+ Elm_Object_Item *it;
+
+ total_cnt = settingData->block_msg.filterList.nCount;
+
+ sel_all_state = settingData->block_msg.block_filter_chk_sel_all_state;
+
+ for (i = 0; i < total_cnt; i++) {
+ settingData->block_msg.block_filter_chk_state[i] = sel_all_state;
+ }
+
+ /* Update all realized items. */
+ it = elm_genlist_first_item_get(settingData->block_msg.block_filter_genlist);
+ for (i = 0; i < total_cnt; i++) {
+ elm_genlist_item_fields_update(it, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
+ it = elm_genlist_item_next_get(it);
+ }
+
+ if (sel_all_state == EINA_TRUE) {
+ char str[DEF_BUF_LEN_S] = {0, };
+
+ snprintf(str, sizeof(str), dgettext("sys_string", "IDS_COM_BODY_PD_SELECTED"), total_cnt);
+ msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, str, settingData);
+ } else {
+ msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, NULL, settingData);
+ }
+
+ if (sel_all_state == EINA_TRUE)
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE);
+ else
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE);
+}
+
+static void __msg_ui_setting_block_filter_sel_all_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ settingData->block_msg.block_filter_chk_sel_all_state = !settingData->block_msg.block_filter_chk_sel_all_state;
+ elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state);
+
+ __msg_ui_setting_block_filter_check_select_all(settingData);
+}
+
+static void __msg_ui_setting_block_filter_sel_all_chk_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sel_all_chk_state = [%d]", settingData->block_msg.block_filter_chk_sel_all_state);
+
+ __msg_ui_setting_block_filter_check_select_all(data);
+}
+
+static void __msg_ui_setting_block_filter_cancel_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;
+
+ /* Cancel block filter deletion. */
+ msg_ui_setting_block_message_exit_edit_mode(settingData);
+
+}
+
+static void __msg_ui_setting_block_filter_delete_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;
+
+ int i = 0;
+ int total_cnt = 0;
+ int filter_id = 0;
+ msg_error_t err = MSG_SUCCESS;
+
+ total_cnt = settingData->block_msg.filterList.nCount;
+
+ /* Delete selected filter item. */
+ for (i = 0; i < total_cnt; i++) {
+ if (settingData->block_msg.block_filter_chk_state[i] == EINA_TRUE) {
+ err = msg_get_int_value(settingData->block_msg.filterList.msg_struct_info[i], MSG_FILTER_ID_INT, &filter_id);
+ msg_delete_filter(settingData->msgHandle, (msg_filter_id_t)filter_id);
+ }
+ }
+
+ msg_ui_setting_block_message_exit_edit_mode(settingData);
+
+}
+
+static void __msg_ui_setting_block_filter_delete_view_update_controlbar(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+ Elm_Object_Item *ctrl_btn[MAX_SETTING_CTRLBAR_BUTTON];
+ int i = 0;
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ for (i = 0; i < MAX_SETTING_CTRLBAR_BUTTON; i++) {
+ if (settingData->block_msg.ctrl_btn[i] != NULL) {
+ elm_object_item_del(settingData->block_msg.ctrl_btn[i]);
+ settingData->block_msg.ctrl_btn[i] = NULL;
+ }
+ }
+
+ ctrl_btn[0] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \
+ MSG_CONTROLBAR_ICON_DELETE, NULL, \
+ __msg_ui_setting_block_filter_delete_btn_clicked_cb, \
+ (void *)settingData);
+ settingData->block_msg.ctrl_btn[0] = ctrl_btn[0];
+
+ ctrl_btn[1] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL);
+ settingData->block_msg.ctrl_btn[1] = ctrl_btn[1];
+ elm_object_item_disabled_set(ctrl_btn[1], EINA_TRUE);
+
+ ctrl_btn[2] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL);
+ settingData->block_msg.ctrl_btn[2] = ctrl_btn[2];
+ elm_object_item_disabled_set(ctrl_btn[2], EINA_TRUE);
+
+ ctrl_btn[3] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \
+ MSG_CONTROLBAR_ICON_CANCEL, NULL, \
+ __msg_ui_setting_block_filter_cancel_btn_clicked_cb, \
+ (void *)settingData);
+ settingData->block_msg.ctrl_btn[3] = ctrl_btn[3];
+
+}
+
+static void __msg_ui_setting_block_filter_delete_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *filter_layout_sel_all;
+ Evas_Object *filter_check_sel_all;
+
+ Elm_Object_Item *it = NULL;
+
+ if (elm_genlist_decorate_mode_get(settingData->block_msg.block_filter_genlist)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid state : block_filter_genlist is in edit mode!!");
+ return;
+ }
+
+ /* Disable back_button */
+ Elm_Object_Item *navi_it = elm_naviframe_top_item_get(settingData->navi_frame);
+ elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
+
+ __msg_ui_setting_block_filter_delete_view_update_controlbar(settingData);
+
+ /* Remove dialogue separator. */
+ it = elm_genlist_first_item_get(settingData->block_msg.block_filter_genlist);
+ if (it)
+ elm_object_item_del(it);
+
+ /* Append 'Select All' layout. */
+ filter_layout_sel_all = elm_layout_add(settingData->block_msg.block_filter_box);
+ settingData->block_msg.block_filter_sel_all_layout = filter_layout_sel_all;
+ elm_layout_theme_set(filter_layout_sel_all, "genlist", "item", "select_all/default");
+ evas_object_size_hint_weight_set(filter_layout_sel_all, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+ evas_object_size_hint_align_set(filter_layout_sel_all, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_event_callback_add(filter_layout_sel_all, EVAS_CALLBACK_MOUSE_DOWN, __msg_ui_setting_block_filter_sel_all_mouse_down_cb, settingData);
+
+ filter_check_sel_all = elm_check_add(filter_layout_sel_all);
+ settingData->block_msg.block_filter_chk_sel_all = filter_check_sel_all;
+ elm_check_state_pointer_set(filter_check_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state);
+ evas_object_smart_callback_add(filter_check_sel_all, "changed", __msg_ui_setting_block_filter_sel_all_chk_changed_cb, settingData);
+ evas_object_propagate_events_set(filter_check_sel_all, EINA_FALSE);
+ elm_object_part_content_set(filter_layout_sel_all, "elm.icon", filter_check_sel_all);
+
+ elm_object_part_text_set(filter_layout_sel_all, "elm.text", dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
+ elm_box_pack_start(settingData->block_msg.block_filter_box, filter_layout_sel_all);
+ evas_object_show(filter_layout_sel_all);
+
+ elm_genlist_decorate_mode_set(settingData->block_msg.block_filter_genlist, EINA_TRUE);
+ elm_genlist_select_mode_set(settingData->block_msg.block_filter_genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+
+ /* Default state of "Delete" button is disable. */
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE);
+}
+
+static void __msg_ui_setting_init_block_message(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ int i = 0;
+ int total_cnt = 0;
+ msg_error_t err = MSG_SUCCESS;
+
+ msg_release_list_struct(&settingData->block_msg.filterList);
+ err = msg_get_filter_list(settingData->msgHandle, &(settingData->block_msg.filterList));
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_filter_list() fail - err [%d]", err);
+ return;
+ }
+
+ total_cnt = settingData->block_msg.filterList.nCount;
+
+ settingData->block_msg.block_filter_chk_sel_all_state = EINA_FALSE;
+
+ for (i = 0; i < total_cnt; i++)
+ settingData->block_msg.block_filter_chk_state[i] = EINA_FALSE;
+}
+
+void msg_ui_setting_block_message_back_btn_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;
+
+ elm_naviframe_item_pop(settingData->navi_frame);
+
+ msg_release_list_struct(&settingData->block_msg.filterList);
+ memset(&settingData->block_msg, 0x0, sizeof(MSG_UI_SETTING_FILTER_S));
+}
+
+void msg_ui_setting_block_message_exit_edit_mode(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 (!elm_genlist_decorate_mode_get(settingData->block_msg.block_filter_genlist)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Block filter list isn't in edit mode!!");
+ return;
+ }
+
+ /* Create back button. */
+ msg_ui_setting_common_create_back_btn(settingData->navi_frame, \
+ msg_ui_setting_block_message_back_btn_cb, settingData);
+
+ /*************************/
+ /* Update option header. */
+ /*************************/
+ __msg_ui_setting_block_message_update_controlbar(settingData);
+
+ /* Unset edit mode */
+ elm_genlist_decorate_mode_set(settingData->block_msg.block_filter_genlist, EINA_FALSE);
+ elm_genlist_select_mode_set(settingData->block_msg.block_filter_genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
+
+ /* Update view. */
+ msg_ui_setting_block_filter_update_view(settingData);
+
+}
+
+static void __msg_ui_setting_block_message_delete_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;
+
+ /* Go to block filter delete view. */
+ __msg_ui_setting_block_filter_delete_view(settingData);
+
+}
+
+static void __msg_ui_setting_block_message_add_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;
+
+ /* Go to detail view. */
+ __msg_ui_setting_block_filter_detail_main(settingData, MSG_UI_SETTING_BLOCKED_DETAIL_CREATE);
+
+}
+
+void msg_ui_setting_destroy_block_message(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;
+
+ msg_ui_setting_common_destroy_selectioninfo(settingData);
+
+ /* Remove 'Select All' layout. */
+ if (settingData->block_msg.block_filter_sel_all_layout) {
+ elm_box_unpack(settingData->block_msg.block_filter_box, settingData->block_msg.block_filter_sel_all_layout);
+ evas_object_del(settingData->block_msg.block_filter_sel_all_layout);
+ settingData->block_msg.block_filter_sel_all_layout = NULL;
+ }
+
+ if (settingData->block_msg.block_filter_genlist) {
+ evas_object_del(settingData->block_msg.block_filter_genlist);
+ settingData->block_msg.block_filter_genlist = NULL;
+ }
+
+ if (settingData->block_msg.block_filter_box) {
+ evas_object_del(settingData->block_msg.block_filter_box);
+ settingData->block_msg.block_filter_box = NULL;
+ }
+
+ if (settingData->block_msg.block_filter_nocontents) {
+ evas_object_del(settingData->block_msg.block_filter_nocontents);
+ settingData->block_msg.block_filter_nocontents = NULL;
+ }
+
+}
+
+void msg_ui_setting_show_block_message(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;
+
+ Evas_Object *block_filter_box;
+ Evas_Object *block_filter_nocontents;
+ Evas_Object *block_filter_list;
+
+ if (settingData->block_msg.filterList.nCount == 0) {
+ block_filter_nocontents = msg_ui_setting_common_create_no_content_view(settingData->block_msg.block_layout, NULL);
+ settingData->block_msg.block_filter_nocontents = block_filter_nocontents;
+ elm_object_part_content_set(settingData->block_msg.block_layout, "elm.swallow.content", block_filter_nocontents);
+ } else {
+ block_filter_box = elm_box_add(settingData->navi_frame);
+ settingData->block_msg.block_filter_box = block_filter_box;
+ evas_object_size_hint_weight_set(block_filter_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(block_filter_box);
+ elm_object_part_content_set(settingData->block_msg.block_layout, "elm.swallow.content", block_filter_box);
+
+ block_filter_list = __msg_ui_setting_create_block_filter_genlist(settingData->navi_frame, settingData);
+ elm_box_pack_end(block_filter_box, block_filter_list);
+ evas_object_show(block_filter_list);
+ }
+}
+
+static void __msg_ui_setting_block_message_update_controlbar(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL");
+
+ Elm_Object_Item *ctrl_btn[MAX_SETTING_CTRLBAR_BUTTON];
+ int i = 0;
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ for (i = 0; i < MAX_SETTING_CTRLBAR_BUTTON; i++) {
+ if (settingData->block_msg.ctrl_btn[i] != NULL) {
+ elm_object_item_del(settingData->block_msg.ctrl_btn[i]);
+ settingData->block_msg.ctrl_btn[i] = NULL;
+ }
+ }
+
+ ctrl_btn[0] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \
+ MSG_CONTROLBAR_ICON_DELETE, NULL, \
+ __msg_ui_setting_block_message_delete_btn_clicked_cb, \
+ (void *)settingData);
+ settingData->block_msg.ctrl_btn[0] = ctrl_btn[0];
+
+ /* Add NULL button */
+ ctrl_btn[1] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL);
+ settingData->block_msg.ctrl_btn[1] = ctrl_btn[1];
+ elm_object_item_disabled_set(ctrl_btn[1], EINA_TRUE);
+
+ ctrl_btn[2] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \
+ MSG_CONTROLBAR_ICON_CREATE, NULL, \
+ __msg_ui_setting_block_message_add_btn_clicked_cb, \
+ (void *)settingData);
+ settingData->block_msg.ctrl_btn[2] = ctrl_btn[2];
+
+ /* Add NULL button */
+ ctrl_btn[3] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL);
+ settingData->block_msg.ctrl_btn[3] = ctrl_btn[3];
+ elm_object_item_disabled_set(ctrl_btn[3], EINA_TRUE);
+
+}
+
+void msg_ui_setting_block_filter_update_view(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;
+
+ msg_ui_setting_destroy_block_message(settingData);
+
+ __msg_ui_setting_init_block_message(settingData);
+
+ msg_ui_setting_show_block_message(settingData);
+
+ __msg_ui_setting_block_message_update_controlbar(settingData);
+
+ if (settingData->block_msg.filterList.nCount == 0) {
+ /* If no item exist in block filter, delete button should be disabled. */
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE);
+ } else {
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE);
+ }
+}
+
+void msg_ui_setting_general_block_message_main(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;
+
+ Evas_Object *block_layout;
+ Elm_Object_Item *navi_it;
+
+ bool filter_set = EINA_FALSE;
+
+ Evas_Object *ctrl_bar;
+
+ /* Init block message data. */
+ __msg_ui_setting_init_block_message(settingData);
+
+ block_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+ settingData->block_msg.block_layout = block_layout;
+
+ /* Block should be always enabled. */
+ msg_get_filter_operation(settingData->msgHandle, (bool *)&filter_set);
+ if (filter_set == EINA_FALSE) {
+ if (msg_set_filter_operation(settingData->msgHandle, EINA_TRUE) == MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Block is enabled !!");
+ }
+ else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_filter_operation() is failed !!");
+ }
+ }
+
+ msg_ui_setting_show_block_message(settingData);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "Blocked word"), NULL, NULL, block_layout, NULL);
+
+ msg_ui_setting_common_create_back_btn(settingData->navi_frame, \
+ msg_ui_setting_block_message_back_btn_cb, settingData);
+
+ ctrl_bar = msg_ui_setting_common_create_controlbar(settingData->navi_frame);
+ settingData->block_msg.block_ctrl_bar = ctrl_bar;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, ctrl_bar == NULL, "ctrl_bar is NULL !!");
+
+ __msg_ui_setting_block_message_update_controlbar(settingData);
+
+ elm_object_item_part_content_set(navi_it, "controlbar", ctrl_bar);
+
+ /* If no item exist in block filter, delete button should be disabled. */
+ if (settingData->block_msg.filterList.nCount == 0)
+ elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE);
+}
diff --git a/setting/src/general/msg-ui-setting-general-setting.c b/setting/src/general/msg-ui-setting-general-setting.c
new file mode 100755
index 0000000..6828b44
--- /dev/null
+++ b/setting/src/general/msg-ui-setting-general-setting.c
@@ -0,0 +1,243 @@
+/*
+ * 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-general-setting.h"
+
+
+static struct _msg_ui_setting_mixed_list_item general_menu_its[] = {
+ { 1, "Numbers to reject", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "Blocked word", msg_ui_setting_general_block_message_main, ELM_GENLIST_ITEM_NONE },
+ /* do not delete below */
+ { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+
+/*============================================================================
+ STATIC FUNCTION DEFINE
+=============================================================================*/
+static char *__msg_ui_setting_general_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_general_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
+static void __msg_ui_setting_general_destroy_cb(ui_gadget_h ug, void *priv);
+static void __msg_ui_setting_general_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_general_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+static void __msg_ui_setting_general_back_btn_cb(void *data, Evas_Object *obj, void *event_info);
+
+
+/*============================================================================
+ FUNCTION IMPLEMENT
+=============================================================================*/
+
+static char *
+__msg_ui_setting_general_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 (general_menu_its[index].name) {
+ if (strstr(general_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", general_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, general_menu_its[index].name));
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_general_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !priv);
+
+ Evas_Object *base;
+
+ base = ug_get_layout(ug);
+
+ if (!base)
+ 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:
+ default:
+ break;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void
+__msg_ui_setting_general_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !priv);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA) priv;
+
+ settingData->loaded_ug = ug;
+
+ if (settingData->loaded_ug) {
+ ug_destroy(settingData->loaded_ug);
+ settingData->loaded_ug = NULL;
+ }
+
+ evas_object_show(settingData->layout_main);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void
+__msg_ui_setting_general_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_GENERAL_MENU_NUMBERS_TO_REJECT) {
+ settingData->cbs.layout_cb = __msg_ui_setting_general_layout_cb;
+ settingData->cbs.result_cb = NULL;
+ settingData->cbs.destroy_cb = __msg_ui_setting_general_destroy_cb;
+ settingData->cbs.priv = (void *)settingData;
+
+ if (settingData->loaded_ug != NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "other ug already exist");
+ return;
+ }
+
+ /* Call auto reject list UG. */
+ service_h svc_handle;
+ service_error_e scv_error = service_create(&svc_handle);
+
+ if (scv_error == SERVICE_ERROR_NONE) {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_AUTO_REJECT_LIST);
+ settingData->loaded_ug = ug_create(settingData->ug, CALL_SETTING_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &settingData->cbs);
+ service_destroy(svc_handle);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed!!");
+ return;
+ }
+ } else {
+ if (general_menu_its[index].func != NULL)
+ general_menu_its[index].func(settingData, obj, event_info);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *
+__msg_ui_setting_general_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *general_genlist;
+ int index = 0;
+
+ general_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->list.general_setting.general_genlist = general_genlist;
+
+ msg_ui_setting_common_append_genlist_separator(general_genlist, settingData);
+
+ settingData->list.general_setting.general_itc.item_style = "dialogue/1text";
+ settingData->list.general_setting.general_itc.func.text_get = __msg_ui_setting_general_gl_text_get;
+ settingData->list.general_setting.general_itc.func.content_get = NULL;
+ settingData->list.general_setting.general_itc.func.state_get = NULL;
+ settingData->list.general_setting.general_itc.func.del = NULL;
+
+ for (index = 0; general_menu_its[index].name; index++) {
+ elm_genlist_item_append(general_genlist, &settingData->list.general_setting.general_itc, (void *)index,
+ NULL, general_menu_its[index].type, __msg_ui_setting_general_gl_sel, (void *)index);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return general_genlist;
+}
+
+static void __msg_ui_setting_general_back_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ elm_naviframe_item_pop(settingData->navi_frame);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_general_create_view(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;
+
+ Evas_Object *general_layout;
+ Evas_Object *general_genlist;
+ Evas_Object *l_button;
+ Elm_Object_Item *navi_it;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_GENERAL;
+ msg_ui_setting_msg_get_config(settingData);
+
+ /* Initialize global variable. */
+ memset(&settingData->list.general_setting, 0x0, sizeof(settingData->list.general_setting));
+
+ if (obj == NULL) {
+ /* Change background color from transparent to group_list. */
+ elm_object_style_set(settingData->bg, "group_list");
+ }
+
+ general_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ general_genlist = __msg_ui_setting_general_create_menu(settingData->navi_frame, settingData);
+ elm_object_part_content_set(general_layout, "elm.swallow.content", general_genlist);
+
+ /* Create Left Button */
+ l_button = elm_button_add(settingData->navi_frame);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"), l_button, NULL, general_layout, NULL);
+
+ /* Style set should be called after elm_naviframe_item_push(). */
+ elm_object_style_set(l_button, "naviframe/back_btn/default");
+ if (obj == NULL)
+ evas_object_smart_callback_add(l_button, "clicked", msg_ui_setting_quit_cb, (void *)settingData);
+ else
+ evas_object_smart_callback_add(l_button, "clicked", __msg_ui_setting_general_back_btn_cb, (void *)settingData);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+}
diff --git a/setting/src/main/msg-ui-setting-callback.c b/setting/src/main/msg-ui-setting-callback.c
index b54db78..4f279b2 100755
--- a/setting/src/main/msg-ui-setting-callback.c
+++ b/setting/src/main/msg-ui-setting-callback.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#include "msg-ui-setting-main.h"
@@ -26,6 +27,33 @@ void msg_ui_setting_text_msg_cb(void *data, Evas_Object *obj, void *event_info)
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
+void msg_ui_setting_mm_msg_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ msg_ui_setting_mm_create_view(data, obj, event_info);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_spam_msg_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ msg_ui_setting_general_create_view(data, obj, event_info);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_setting_font_size_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ msg_ui_setting_font_size_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);
diff --git a/setting/src/main/msg-ui-setting-common-util.c b/setting/src/main/msg-ui-setting-common-util.c
index 7bd217d..4d6bc53 100755
--- a/setting/src/main/msg-ui-setting-common-util.c
+++ b/setting/src/main/msg-ui-setting-common-util.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#include "msg-ui-setting-main.h"
#include "msg-ui-setting-common-util.h"
@@ -201,6 +202,7 @@ Evas_Object *msg_ui_setting_common_create_genlist(Evas_Object *parent)
Evas_Object *genlist;
genlist = elm_genlist_add(parent);
+ elm_object_style_set(genlist, "dialogue");
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);
diff --git a/setting/src/main/msg-ui-setting-font-size.c b/setting/src/main/msg-ui-setting-font-size.c
new file mode 100755
index 0000000..c288c79
--- /dev/null
+++ b/setting/src/main/msg-ui-setting-font-size.c
@@ -0,0 +1,240 @@
+/*
+ * 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_mixed_list_item font_size_menu_its[] = {
+ { 1, "Follow system font size", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "Huge", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_LARGE", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_SMALL", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_TINY", NULL, ELM_GENLIST_ITEM_NONE },
+ /* do not delete below */
+ { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+
+/*============================================================================
+ STATIC FUNCTION DEFINE
+=============================================================================*/
+static char *__msg_ui_setting_font_size_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_save_font_size(void *data);
+static void __msg_ui_setting_font_size_radio_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_font_size_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_font_size_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_font_size_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+
+
+/*============================================================================
+ FUNCTION IMPLEMENT
+=============================================================================*/
+
+static char *
+__msg_ui_setting_font_size_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")) {
+ char tmp_str[DEF_BUF_LEN_S] = {0, };
+ char font_size_string[DEF_BUF_LEN_S] = {0, };
+ int font_size = 0;
+
+ if (font_size_menu_its[index].name) {
+ if (strstr(font_size_menu_its[index].name, "IDS_COM") != NULL)
+ strncpy(tmp_str, dgettext("sys_string", font_size_menu_its[index].name), sizeof(tmp_str)-1);
+ else
+ strncpy(tmp_str, dgettext(MESSAGE_PKGNAME, font_size_menu_its[index].name), sizeof(tmp_str)-1);
+
+ switch(index) {
+ case MSG_APP_FONT_SIZE_INDEX_HUGE :
+ font_size = MSG_APP_FONT_SIZE_HUGE;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_LARGE :
+ font_size = MSG_APP_FONT_SIZE_LARGE;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_NORMAL :
+ font_size = MSG_APP_FONT_SIZE_NORMAL;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_SMALL :
+ font_size = MSG_APP_FONT_SIZE_SMALL;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_TINY :
+ font_size = MSG_APP_FONT_SIZE_TINY;
+ break;
+ case MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT :
+ default :
+ break;
+ }
+
+ if (font_size > 0) {
+ snprintf(font_size_string, sizeof(font_size_string), "<font_size=%d>%s</font_size>", font_size, tmp_str);
+ return strdup(font_size_string);
+ } else {
+ return strdup(tmp_str);
+ }
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_save_font_size(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ int selection;
+ MSG_BOOL ret = FALSE;
+
+ selection = elm_radio_value_get(settingData->font_size_radio_group);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection);
+
+ /* Save selected value. */
+ ret = msg_common_set_font_size(selection);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ret is %d", (int)ret);
+}
+
+static void
+__msg_ui_setting_font_size_radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ __msg_ui_setting_save_font_size(settingData);
+}
+
+static Evas_Object *
+__msg_ui_setting_font_size_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int index = (int)data;
+ Evas_Object *radio;
+ 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")) {
+ radio = elm_radio_add(obj);
+ elm_radio_state_value_set(radio, index);
+ evas_object_propagate_events_set(radio, EINA_FALSE);
+ evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_font_size_radio_cb, (void *)settingData);
+
+ if (index == 0)
+ settingData->font_size_radio_group = radio;
+ else
+ elm_radio_group_add(radio, settingData->font_size_radio_group);
+
+ /* Set font size current value */
+ if (index == settingData->font_size_index)
+ elm_radio_value_set(settingData->font_size_radio_group, settingData->font_size_index);
+
+ return radio;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_font_size_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);
+
+ /* Change radio selection. */
+ elm_radio_value_set(settingData->font_size_radio_group, index);
+
+ __msg_ui_setting_save_font_size((void *)settingData);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *
+__msg_ui_setting_font_size_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *font_size_genlist;
+ int index = 0;
+
+ font_size_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->font_size_genlist = font_size_genlist;
+
+ msg_ui_setting_common_append_genlist_separator(font_size_genlist, settingData);
+
+ // elm_object_theme_set(font_size_genlist, settingData->th);
+
+ settingData->font_size_itc.item_style = "dialogue/1text.1icon.6";
+ settingData->font_size_itc.func.text_get = __msg_ui_setting_font_size_gl_text_get;
+ settingData->font_size_itc.func.content_get = __msg_ui_setting_font_size_gl_content_get;
+ settingData->font_size_itc.func.state_get = NULL;
+ settingData->font_size_itc.func.del = NULL;
+
+ for (index = 0; font_size_menu_its[index].name; index++) {
+ elm_genlist_item_append(font_size_genlist, &settingData->font_size_itc, (void *)index,
+ NULL, font_size_menu_its[index].type, __msg_ui_setting_font_size_gl_sel, (void *)index);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return font_size_genlist;
+}
+
+void msg_ui_setting_font_size_create_view(void *data, Evas_Object *obj, void *event_info)
+{
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *font_size_layout;
+ Evas_Object *font_size_genlist;
+ Elm_Object_Item *navi_it;
+
+ MSG_BOOL ret = FALSE;
+ int font_size = 0;
+
+ /* Initialize global variable. */
+ ret = msg_common_get_font_size(&settingData->font_size_index, &font_size);
+ if (ret == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret is FALSE");
+ settingData->font_size_index = MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT;
+ }
+
+ font_size_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ font_size_genlist = __msg_ui_setting_font_size_create_menu(settingData->navi_frame, settingData);
+ elm_object_part_content_set(font_size_layout, "elm.swallow.content", font_size_genlist);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"), NULL, NULL, font_size_layout, NULL);
+
+}
diff --git a/setting/src/main/msg-ui-setting-gadget.c b/setting/src/main/msg-ui-setting-gadget.c
index 4e40389..b768614 100755
--- a/setting/src/main/msg-ui-setting-gadget.c
+++ b/setting/src/main/msg-ui-setting-gadget.c
@@ -30,15 +30,14 @@ 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_on_create(ui_gadget_h ug, enum ug_mode mode, service_h data, void *priv);
+static void __msg_ui_setting_on_start(ui_gadget_h ug, service_h data, void *priv);
+static void __msg_ui_setting_on_pause(ui_gadget_h ug, service_h data, void *priv);
+static void __msg_ui_setting_on_resume(ui_gadget_h ug, service_h data, void *priv);
+static void __msg_ui_setting_on_destroy(ui_gadget_h ug, service_h data, void *priv);
+static void __msg_ui_setting_on_message(ui_gadget_h ug, service_h msg, service_h data, void *priv);
+static void __msg_ui_setting_on_event(ui_gadget_h ug, enum ug_event event, service_h data, void *priv);
+static void __msg_ui_setting_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h data, void *priv);
static void __msg_ui_setting_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
{
@@ -134,7 +133,7 @@ static Evas_Object *__msg_ui_setting_create_frameview(Evas_Object *parent, void
return base;
}
-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_create(ui_gadget_h ug, enum ug_mode mode, service_h data, void *priv)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -167,18 +166,14 @@ static void *__msg_ui_setting_on_create(struct ui_gadget *ug, enum ug_mode mode,
return ugd->layout_main;
}
-static void __msg_ui_setting_on_start(struct ui_gadget *ug, bundle *data, void *priv)
+static void __msg_ui_setting_on_start(ui_gadget_h ug, service_h 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;
- }
+ msg_error_t err = MSG_SUCCESS;
+ msg_handle_t msgHandle;
+ char *svc_value = NULL;
/*Set Message Handler*/
err = msg_open_msg_handle(&msgHandle);
@@ -190,35 +185,36 @@ static void __msg_ui_setting_on_start(struct ui_gadget *ug, bundle *data, void *
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 (data != NULL)
+ service_get_extra_data(data, MSG_BUNDLE_KEY_TYPE, &svc_value);
- if (ugd->layout_main)
- msg_ui_setting_launch(ugd);
- else
+ if (ugd->layout_main) {
+ if (svc_value != NULL && strcmp(svc_value, MSG_BUNDLE_VALUE_SPAM_SETTING) == 0)
+ msg_ui_setting_launch_spam_setting(ugd);
+ else
+ 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)
+static void __msg_ui_setting_on_pause(ui_gadget_h ug, service_h 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)
+static void __msg_ui_setting_on_resume(ui_gadget_h ug, service_h 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)
+static void __msg_ui_setting_on_destroy(ui_gadget_h ug, service_h data, void *priv)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
PMSG_SETTING_DATA ugd;
- MSG_ERROR_T err = MSG_SUCCESS;
+ msg_error_t err = MSG_SUCCESS;
if (!ug || !priv)
return;
@@ -242,12 +238,12 @@ static void __msg_ui_setting_on_destroy(struct ui_gadget *ug, bundle *data, void
}
-static void __msg_ui_setting_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv)
+static void __msg_ui_setting_on_message(ui_gadget_h ug, service_h msg, service_h 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)
+static void __msg_ui_setting_on_event(ui_gadget_h ug, enum ug_event event, service_h data, void *priv)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -265,22 +261,22 @@ static void __msg_ui_setting_on_event(struct ui_gadget *ug, enum ug_event event,
break;
case UG_EVENT_LANG_CHANGE:
break;
+ case UG_EVENT_ROTATE_PORTRAIT:
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE:
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+ 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)
+static void __msg_ui_setting_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h data, void *priv)
{
D_ENTER;
D_LEAVE;
@@ -342,7 +338,7 @@ UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
}
-UG_MODULE_API int setting_plugin_reset(bundle *data, void *priv)
+UG_MODULE_API int setting_plugin_reset(service_h data, void *priv)
{
/* To Do : Reset message settings. */
diff --git a/setting/src/main/msg-ui-setting-main.c b/setting/src/main/msg-ui-setting-main.c
index 1d99403..78b9f25 100755
--- a/setting/src/main/msg-ui-setting-main.c
+++ b/setting/src/main/msg-ui-setting-main.c
@@ -14,17 +14,26 @@
* 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 },
+ { "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE", msg_ui_setting_mm_msg_cb },
+ { "IDS_MSGF_BODY_SPAM_MESSAGES", msg_ui_setting_spam_msg_cb },
+ { "IDS_MSGF_BODY_BROADCASTMESSAGES", NULL },
+ { "IDS_COM_BODY_DISPLAY", NULL },
+ { "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE", msg_ui_setting_font_size_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_save_cb_activation(void *data);
+static void __msg_ui_setting_main_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_main_gl_content_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);
@@ -51,6 +60,74 @@ __msg_ui_setting_main_gl_text_get(void *data, Evas_Object *obj, const char *part
}
static void
+__msg_ui_setting_main_save_cb_activation(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->cb_activate_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_CBMSG;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_CB_RECEIVE_BOOL, set_val);
+ msg_ui_setting_msg_set_config(settingData);
+}
+
+static void
+__msg_ui_setting_main_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;
+
+ __msg_ui_setting_main_save_cb_activation(settingData);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *
+__msg_ui_setting_main_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();
+ bool bReceive = false;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+ check = elm_check_add(obj);
+ settingData->cb_activate_check = check;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_CBMSG;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_CB_RECEIVE_BOOL, &bReceive);
+
+ if (bReceive == 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_main_gl_check_clicked_cb, settingData);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ return check;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ 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);
@@ -63,8 +140,20 @@ __msg_ui_setting_main_gl_sel(void *data, Evas_Object *obj, void *event_info)
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);
+ if (index == MSG_UI_SETTING_MAIN_MENU_CB_MESSAGES) {
+ Eina_Bool set_val = EINA_FALSE;
+
+ set_val = elm_check_state_get(settingData->cb_activate_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ elm_check_state_set(settingData->cb_activate_check, !set_val);
+
+ __msg_ui_setting_main_save_cb_activation((void *)settingData);
+
+ } else {
+ if (main_menu_its[index].func != NULL)
+ main_menu_its[index].func(settingData, obj, event_info);
+ }
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
@@ -88,9 +177,29 @@ __msg_ui_setting_create_main_menu(Evas_Object *parent, PMSG_SETTING_DATA setting
settingData->main_itc.func.state_get = NULL;
settingData->main_itc.func.del = NULL;
+ settingData->cb_msg_itc.item_style = "dialogue/1text.1icon";
+ settingData->cb_msg_itc.func.text_get = __msg_ui_setting_main_gl_text_get;
+ settingData->cb_msg_itc.func.content_get = __msg_ui_setting_main_gl_content_get;
+ settingData->cb_msg_itc.func.state_get = NULL;
+ settingData->cb_msg_itc.func.del = NULL;
+
+ settingData->sub_title_itc.item_style = "dialogue/title";
+ settingData->sub_title_itc.func.text_get = __msg_ui_setting_main_gl_text_get;
+ settingData->sub_title_itc.func.content_get = NULL;
+ settingData->sub_title_itc.func.state_get = NULL;
+ settingData->sub_title_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);
+ if (index == MSG_UI_SETTING_MAIN_MENU_CB_MESSAGES) {
+ elm_genlist_item_append(main_genlist, &settingData->cb_msg_itc, (void *)index, NULL,
+ ELM_GENLIST_ITEM_NONE, __msg_ui_setting_main_gl_sel, (void *)index);
+ } else if (index == MSG_UI_SETTING_MAIN_MENU_SUB_TITLE) {
+ elm_genlist_item_append(main_genlist, &settingData->sub_title_itc, (void *)index, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, (void *)index);
+ } else {
+ 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);
@@ -134,6 +243,10 @@ void msg_ui_setting_create_main_view(PMSG_SETTING_DATA settingData)
Evas_Object *l_button;
+ /* Get CB activation setting. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_CBMSG;
+ msg_ui_setting_msg_get_config(settingData);
+
/* Change background color from transparent to group_list. */
elm_object_style_set(settingData->bg, "group_list");
@@ -187,3 +300,18 @@ Evas_Object *msg_ui_setting_create_layout_main(Evas_Object *parent)
return layout;
}
+
+void msg_ui_setting_launch_spam_setting(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_general_create_view(settingData, NULL, NULL);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
diff --git a/setting/src/main/msg-ui-setting-msg-service-wrapper.c b/setting/src/main/msg-ui-setting-msg-service-wrapper.c
index 73a8823..5b1e0c1 100755
--- a/setting/src/main/msg-ui-setting-msg-service-wrapper.c
+++ b/setting/src/main/msg-ui-setting-msg-service-wrapper.c
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
#include "msg-ui-setting-msg-service-wrapper.h"
@@ -21,21 +22,33 @@ 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;
+ msg_error_t err = MSG_SUCCESS;
switch (settingData->msg_setting.type) {
+ case MSG_UI_SETTING_TYPE_GENERAL:
+ err = msg_set_general_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
case MSG_UI_SETTING_TYPE_SMS_SEND:
- setting_option = settingData->msg_setting.sms_send_opt;
- setting_option.type = MSG_SMS_SENDOPT;
+ err = msg_set_sms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_SMSC_LIST:
+ err = msg_set_smsc_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_MMS_SEND:
+ err = msg_set_mms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_MMS_RECEIVE:
+ err = msg_set_mms_recv_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_CBMSG:
+ err = msg_set_cb_opt(settingData->msgHandle, settingData->msg_setting.setting_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_set_config(settingData->msgHandle, &setting_option);
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
MSG_UI_RETVM_IF(MSG_UI_LEVEL_ASSERT, err != MSG_SUCCESS, -1, "[FAIL] msg_set_config of MSG FW : err %d \n", err);
@@ -48,23 +61,38 @@ 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;
+ msg_error_t err = MSG_SUCCESS;
switch (settingData->msg_setting.type) {
+ case MSG_UI_SETTING_TYPE_GENERAL:
+ settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_GENERAL_OPT);
+ err = msg_get_general_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
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;
+ settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_SMS_SEND_OPT);
+ err = msg_get_sms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_SMSC_LIST:
+ settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_SMSC_OPT);
+ err = msg_get_smsc_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_MMS_SEND:
+ settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT);
+ err = msg_get_mms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_MMS_RECEIVE:
+ settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_MMS_RECV_OPT);
+ err = msg_get_mms_recv_opt(settingData->msgHandle, settingData->msg_setting.setting_opt);
+ break;
+ case MSG_UI_SETTING_TYPE_CBMSG:
+ settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_CB_OPT);
+ err = msg_get_cb_opt(settingData->msgHandle, settingData->msg_setting.setting_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/multimedia/msg-ui-setting-mm-message.c b/setting/src/multimedia/msg-ui-setting-mm-message.c
new file mode 100755
index 0000000..40e1707
--- /dev/null
+++ b/setting/src/multimedia/msg-ui-setting-mm-message.c
@@ -0,0 +1,734 @@
+/*
+ * 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-mm-message.h"
+
+
+static struct _msg_ui_setting_mixed_list_item mm_menu_its[] = {
+ { 1, "IDS_MSGF_BODY_RECEIVINGOPTIONS", msg_ui_setting_mm_recv_opt_main, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_DELIVERY_REPORT", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_READ_REPORT", msg_ui_setting_mm_read_rep_main, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_MMSCREATIONMODE", NULL, ELM_GENLIST_ITEM_TREE },
+ /* do not delete below */
+ { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+static struct _msg_ui_setting_mixed_list_item mm_creation_mode_menu_its[] = {
+ { 2, "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE", NULL, ELM_GENLIST_ITEM_NONE },
+ { 2, "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING", NULL, ELM_GENLIST_ITEM_NONE },
+ { 2, "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED", NULL, ELM_GENLIST_ITEM_NONE },
+ /* do not delete below */
+ { 2, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+static struct _msg_ui_setting_mixed_list_item mm_read_rep_menu_its[] = {
+ { 1, "IDS_MSGF_BODY_REQUEST_READ_REPORT", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "IDS_MSGF_BODY_SEND_READ_REPORT", NULL, ELM_GENLIST_ITEM_NONE },
+ /* do not delete below */
+ { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+
+/*============================================================================
+ STATIC FUNCTION DEFINE
+=============================================================================*/
+static void __msg_ui_setting_mm_save_creation_mode(void *data);
+static char *__msg_ui_setting_mm_creation_mode_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_creation_mode_radio_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_creation_mode_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_creation_mode_gl_sel(void *data, Evas_Object *obj, void *event_info);
+
+static char *__msg_ui_setting_mm_read_rep_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_save_read_rep_request(void *data);
+static void __msg_ui_setting_mm_save_read_rep_send(void *data);
+static void __msg_ui_setting_mm_read_rep_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_read_rep_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_read_rep_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_read_rep_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+
+static char *__msg_ui_setting_mm_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_save_delivery_rep(void *data);
+static void __msg_ui_setting_mm_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_mm_gl_exp(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_mm_gl_con(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+
+
+/*============================================================================
+ FUNCTION IMPLEMENT
+=============================================================================*/
+
+/**************************
+ *** Create mode menu ***
+ **************************/
+
+static void __msg_ui_setting_mm_save_creation_mode(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ int selection;
+ msg_error_t err = MSG_SUCCESS;
+
+ selection = elm_radio_value_get(settingData->list.mm_msg.creation_radio_group);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection);
+
+ /* Save selected value. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ if (selection == 1)
+ msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, MSG_CREATION_MODE_WARNING);
+ else if (selection == 2)
+ msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, MSG_CREATION_MODE_RESTRICTED);
+ else
+ msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, MSG_CREATION_MODE_FREE);
+
+ err = msg_ui_setting_msg_set_config(settingData);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(creation_mode) is %d", err);
+}
+
+static char *__msg_ui_setting_mm_creation_mode_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") || !strcmp(part, "elm.text.1")) {
+ if (mm_creation_mode_menu_its[index].name) {
+ if (strstr(mm_creation_mode_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", mm_creation_mode_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[index].name));
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_setting_mm_creation_mode_radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ __msg_ui_setting_mm_save_creation_mode(data);
+
+ elm_genlist_item_update(settingData->list.mm_msg.creation_mode_item);
+}
+
+static Evas_Object *__msg_ui_setting_mm_creation_mode_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *radio;
+
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ int index = (int)data;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+ radio = elm_radio_add(obj);
+ elm_radio_state_value_set(radio, index);
+ evas_object_propagate_events_set(radio, EINA_FALSE);
+ evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_mm_creation_mode_radio_cb, (void *)settingData);
+
+ if (index == 0)
+ settingData->list.mm_msg.creation_radio_group = radio;
+ else
+ elm_radio_group_add(radio, settingData->list.mm_msg.creation_radio_group);
+
+ return radio;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_setting_mm_creation_mode_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = NULL;
+ int index = (int)data;
+
+ settingData = msg_ui_setting_get_data();
+ 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);
+
+ /* Change radio selection. */
+ elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, index);
+
+ __msg_ui_setting_mm_save_creation_mode((void *)settingData);
+
+ elm_genlist_item_update(settingData->list.mm_msg.creation_mode_item);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return;
+}
+
+/**************************
+ *** Read Report menu ***
+ **************************/
+
+static char *__msg_ui_setting_mm_read_rep_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 (mm_menu_its[index].name) {
+ if (strstr(mm_read_rep_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", mm_read_rep_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_read_rep_menu_its[index].name));
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_setting_mm_save_read_rep_request(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ Eina_Bool set_val = EINA_FALSE;
+
+ set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_request_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ /* Set requesting read report in sending option. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, set_val);
+ msg_ui_setting_msg_set_config(settingData);
+}
+
+static void __msg_ui_setting_mm_save_read_rep_send(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ Eina_Bool set_val = EINA_FALSE;
+
+ set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_send_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ /* Set sending read report in receiving option. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_READ_REPORT_BOOL, set_val);
+ msg_ui_setting_msg_set_config(settingData);
+}
+
+static void __msg_ui_setting_mm_read_rep_gl_check_clicked_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);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ if (obj == settingData->list.mm_msg.mm_read_rep_request_check)
+ __msg_ui_setting_mm_save_read_rep_request(settingData);
+ else if (obj == settingData->list.mm_msg.mm_read_rep_send_check)
+ __msg_ui_setting_mm_save_read_rep_send(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_mm_read_rep_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();
+ bool bReadValue = false;
+
+ 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_MM_READ_REP_MENU_REQUEST) {
+ check = elm_check_add(obj);
+ settingData->list.mm_msg.mm_read_rep_request_check = check;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &bReadValue);
+ if (bReadValue == 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_mm_read_rep_gl_check_clicked_cb, settingData);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ return check;
+ } else if (index == MSG_UI_SETTING_MM_READ_REP_MENU_SEND) {
+ check = elm_check_add(obj);
+ settingData->list.mm_msg.mm_read_rep_send_check = check;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_READ_REPORT_BOOL, &bReadValue);
+ if (bReadValue == 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_mm_read_rep_gl_check_clicked_cb, settingData);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ 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_mm_read_rep_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_MM_READ_REP_MENU_REQUEST) {
+ Eina_Bool set_val = EINA_FALSE;
+
+ set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_request_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ elm_check_state_set(settingData->list.mm_msg.mm_read_rep_request_check, !set_val);
+
+ __msg_ui_setting_mm_save_read_rep_request((void *)settingData);
+ } else if (index == MSG_UI_SETTING_MM_READ_REP_MENU_SEND) {
+ Eina_Bool set_val = EINA_FALSE;
+
+ set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_send_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ elm_check_state_set(settingData->list.mm_msg.mm_read_rep_send_check, !set_val);
+
+ __msg_ui_setting_mm_save_read_rep_send((void *)settingData);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *__msg_ui_setting_mm_read_rep_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !settingData, NULL);
+
+ Evas_Object *mm_read_rep_genlist;
+
+ int index = 0;
+
+ mm_read_rep_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->list.mm_msg.mm_read_rep_genlist = mm_read_rep_genlist;
+
+ msg_ui_setting_common_append_genlist_separator(mm_read_rep_genlist, settingData);
+
+ settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.item_style = "dialogue/1text.1icon";
+ settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.text_get = __msg_ui_setting_mm_read_rep_gl_text_get;
+ settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.content_get = __msg_ui_setting_mm_read_rep_gl_content_get;
+ settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.del = NULL;
+
+ for (index = 0; mm_read_rep_menu_its[index].name; index++) {
+ if (index == MSG_UI_SETTING_MM_READ_REP_MENU_REQUEST ||
+ index == MSG_UI_SETTING_MM_READ_REP_MENU_SEND) {
+ elm_genlist_item_append(mm_read_rep_genlist, &settingData->list.mm_msg.mm_read_rep_1line_1icon_itc,
+ (void *)index, NULL, mm_read_rep_menu_its[index].type,
+ __msg_ui_setting_mm_read_rep_gl_sel, (void *)index);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index);
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return mm_read_rep_genlist;
+}
+
+void msg_ui_setting_mm_read_rep_main(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *read_rep_layout;
+ Evas_Object *mm_read_rep_genlist;
+ Elm_Object_Item *navi_it;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+
+ read_rep_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ mm_read_rep_genlist = __msg_ui_setting_mm_read_rep_create_view(settingData->navi_frame, settingData);
+ elm_object_part_content_set(read_rep_layout, "elm.swallow.content", mm_read_rep_genlist);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_READ_REPORT"), NULL, NULL, read_rep_layout, NULL);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+/*********************************
+ *** Multimedia message menu ***
+ *********************************/
+
+static char *__msg_ui_setting_mm_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int index = (int)data;
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ int creationMode = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
+ if (mm_menu_its[index].name) {
+ if (strstr(mm_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", mm_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_menu_its[index].name));
+ }
+ } else if (!strcmp(part, "elm.text.sub") || !strcmp(part, "elm.text.2")) {
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, &creationMode);
+ if (creationMode == MSG_CREATION_MODE_FREE)
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[0].name));
+ else if (creationMode == MSG_CREATION_MODE_WARNING)
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[1].name));
+ else if (creationMode == MSG_CREATION_MODE_RESTRICTED)
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[2].name));
+ else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid mode = %d", creationMode);
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_setting_mm_save_delivery_rep(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ Eina_Bool set_val = EINA_FALSE;
+
+ set_val = elm_check_state_get(settingData->list.mm_msg.mm_delivery_report_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ /* Set requesting delivery report in sending option. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_DELIVERY_REPORT_BOOL, set_val);
+ msg_ui_setting_msg_set_config(settingData);
+
+ /* Set sending delivery report in receiving option. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_DELIVERY_REPORT_BOOL, set_val);
+ msg_ui_setting_msg_set_config(settingData);
+}
+
+static void __msg_ui_setting_mm_gl_check_clicked_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);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ if (obj == settingData->list.mm_msg.mm_delivery_report_check)
+ __msg_ui_setting_mm_save_delivery_rep(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_mm_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();
+ bool bReadReply = false;
+
+ 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_MM_MENU_DELIVERY_REPORT) {
+ check = elm_check_add(obj);
+ settingData->list.mm_msg.mm_delivery_report_check = check;
+
+ /* We decide delivery report setting based on sending option setting. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &bReadReply);
+ if (bReadReply == 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_mm_gl_check_clicked_cb, settingData);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ 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_mm_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;
+ Eina_Bool expand_state = EINA_FALSE;
+
+ 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_MM_MENU_CREATE_MODE) {
+ expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.creation_mode_item);
+ if (expand_state == EINA_FALSE)
+ elm_genlist_item_expanded_set(settingData->list.mm_msg.creation_mode_item, EINA_TRUE);
+ else
+ elm_genlist_item_expanded_set(settingData->list.mm_msg.creation_mode_item, EINA_FALSE);
+ } else if (index == MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT) {
+ Eina_Bool set_val = EINA_FALSE;
+
+ set_val = elm_check_state_get(settingData->list.mm_msg.mm_delivery_report_check);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val);
+
+ elm_check_state_set(settingData->list.mm_msg.mm_delivery_report_check, !set_val);
+
+ __msg_ui_setting_mm_save_delivery_rep((void *)settingData);
+ } else {
+ if (mm_menu_its[index].func != NULL) {
+ mm_menu_its[index].func(settingData, obj, event_info);
+
+ /* If expandable genlist item is expanded, it should be contracted.
+ * Because, wrong radio button is selected when it is back from other sub menu.
+ */
+ expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.creation_mode_item);
+ if (expand_state == EINA_TRUE)
+ elm_genlist_item_expanded_set(settingData->list.mm_msg.creation_mode_item, EINA_FALSE);
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_setting_mm_gl_exp(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Elm_Object_Item *it = event_info;
+ int index = 0;
+ int depth = 0;
+ int creationMode = 0;
+
+ depth = elm_genlist_item_expanded_depth_get(it);
+
+ if (depth == 0) {
+ settingData->list.mm_msg.mm_creation_mode_itc.item_style = "dialogue/1text.1icon.2/expandable2";
+ settingData->list.mm_msg.mm_creation_mode_itc.func.text_get = __msg_ui_setting_mm_creation_mode_gl_text_get;
+ settingData->list.mm_msg.mm_creation_mode_itc.func.content_get = __msg_ui_setting_mm_creation_mode_gl_content_get;
+ settingData->list.mm_msg.mm_creation_mode_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_creation_mode_itc.func.del = NULL;
+
+ for (index = 0; mm_creation_mode_menu_its[index].name; index++) {
+ elm_genlist_item_append(settingData->list.mm_msg.mm_genlist,
+ &settingData->list.mm_msg.mm_creation_mode_itc,
+ (void *)index, it, mm_creation_mode_menu_its[index].type,
+ __msg_ui_setting_mm_creation_mode_gl_sel, (void *)index);
+ }
+
+ if (settingData->list.mm_msg.creation_radio_group) {
+ /* Set creation mode current value */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, &creationMode);
+ if (creationMode == MSG_CREATION_MODE_WARNING)
+ elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, 1);
+ else if (creationMode == MSG_CREATION_MODE_RESTRICTED)
+ elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, 2);
+ else
+ elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, 0);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ }
+ }
+}
+
+static void __msg_ui_setting_mm_gl_con(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Elm_Object_Item *item = event_info;
+ elm_genlist_item_subitems_clear(item);
+}
+
+static Evas_Object *__msg_ui_setting_mm_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *mm_genlist;
+ Elm_Object_Item *it = NULL;
+
+ int index = 0;
+
+ mm_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->list.mm_msg.mm_genlist = mm_genlist;
+
+ msg_ui_setting_common_append_genlist_separator(mm_genlist, settingData);
+
+ settingData->list.mm_msg.mm_itc.item_style = "dialogue/1text";
+ settingData->list.mm_msg.mm_itc.func.text_get = __msg_ui_setting_mm_gl_text_get;
+ settingData->list.mm_msg.mm_itc.func.content_get = NULL;
+ settingData->list.mm_msg.mm_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_itc.func.del = NULL;
+
+ settingData->list.mm_msg.mm_1line_1icon_itc.item_style = "dialogue/1text.1icon";
+ settingData->list.mm_msg.mm_1line_1icon_itc.func.text_get = __msg_ui_setting_mm_gl_text_get;
+ settingData->list.mm_msg.mm_1line_1icon_itc.func.content_get = __msg_ui_setting_mm_gl_content_get;
+ settingData->list.mm_msg.mm_1line_1icon_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_1line_1icon_itc.func.del = NULL;
+
+ settingData->list.mm_msg.mm_2line_1icon_itc.item_style = "dialogue/2text.3/expandable";
+ settingData->list.mm_msg.mm_2line_1icon_itc.func.text_get = __msg_ui_setting_mm_gl_text_get;
+ settingData->list.mm_msg.mm_2line_1icon_itc.func.content_get = NULL;
+ settingData->list.mm_msg.mm_2line_1icon_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_2line_1icon_itc.func.del = NULL;
+
+ for (index = 0; mm_menu_its[index].name; index++) {
+ if (index == MSG_UI_SETTING_MM_MENU_CREATE_MODE) {
+ /* In case of creation mode. */
+ it = elm_genlist_item_append(mm_genlist, &settingData->list.mm_msg.mm_2line_1icon_itc,
+ (void *)index, NULL, mm_menu_its[index].type,
+ __msg_ui_setting_mm_gl_sel, (void *)index);
+ settingData->list.mm_msg.creation_mode_item = it;
+ } else if (index == MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT) {
+ elm_genlist_item_append(mm_genlist, &settingData->list.mm_msg.mm_1line_1icon_itc, (void *)index,
+ NULL, mm_menu_its[index].type, __msg_ui_setting_mm_gl_sel, (void *)index);
+ } else {
+ elm_genlist_item_append(mm_genlist, &settingData->list.mm_msg.mm_itc, (void *)index,
+ NULL, mm_menu_its[index].type, __msg_ui_setting_mm_gl_sel, (void *)index);
+ }
+ }
+
+ evas_object_smart_callback_add(mm_genlist, "expanded", __msg_ui_setting_mm_gl_exp, settingData);
+ evas_object_smart_callback_add(mm_genlist, "contracted", __msg_ui_setting_mm_gl_con, settingData);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return mm_genlist;
+}
+
+void msg_ui_setting_mm_create_view(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *mm_layout;
+ Evas_Object *mm_genlist;
+ Elm_Object_Item *navi_it;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+
+ /* Initialize global variable. */
+ memset(&settingData->list.mm_msg, 0x0, sizeof(settingData->list.mm_msg));
+
+ mm_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ mm_genlist = __msg_ui_setting_mm_create_menu(settingData->navi_frame, settingData);
+ elm_object_part_content_set(mm_layout, "elm.swallow.content", mm_genlist);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"), NULL, NULL, mm_layout, NULL);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
diff --git a/setting/src/multimedia/msg-ui-setting-mm-recv-option.c b/setting/src/multimedia/msg-ui-setting-mm-recv-option.c
new file mode 100755
index 0000000..379cc69
--- /dev/null
+++ b/setting/src/multimedia/msg-ui-setting-mm-recv-option.c
@@ -0,0 +1,638 @@
+/*
+ * 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-mm-message.h"
+
+
+static struct _msg_ui_setting_mixed_list_item mm_recv_menu_its[] = {
+ { 1, "IDS_MSGF_OPT_HOME_NETWORK", NULL, ELM_GENLIST_ITEM_TREE },
+ { 1, "IDS_MSGF_OPT_ROAM_NETWORK", NULL, ELM_GENLIST_ITEM_TREE },
+ /* do not delete below */
+ { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+static struct _msg_ui_setting_mixed_list_item mm_recv_home_network_menu_its[] = {
+ { 2, "IDS_MSGF_BODY_AUTODOWNLOAD", NULL, ELM_GENLIST_ITEM_NONE },
+ { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL", NULL, ELM_GENLIST_ITEM_NONE },
+ { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT", NULL, ELM_GENLIST_ITEM_NONE },
+ /* do not delete below */
+ { 2, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+static struct _msg_ui_setting_mixed_list_item mm_recv_foreign_network_menu_its[] = {
+ { 2, "IDS_MSGF_BODY_AUTODOWNLOAD", NULL, ELM_GENLIST_ITEM_NONE },
+ { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL", NULL, ELM_GENLIST_ITEM_NONE },
+ { 2, "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED", NULL, ELM_GENLIST_ITEM_NONE },
+ { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT", NULL, ELM_GENLIST_ITEM_NONE },
+ /* do not delete below */
+ { 2, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+
+/*============================================================================
+ STATIC FUNCTION DEFINE
+=============================================================================*/
+static void __msg_ui_setting_mm_recv_save_home_network(void *data);
+static char *__msg_ui_setting_mm_recv_home_network_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_recv_home_network_radio_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_recv_home_network_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_recv_home_network_gl_sel(void *data, Evas_Object *obj, void *event_info);
+
+static void __msg_ui_setting_mm_recv_save_foreign_network(void *data);
+static char *__msg_ui_setting_mm_recv_foreign_network_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_recv_foreign_network_radio_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_recv_foreign_network_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_recv_foreign_network_gl_sel(void *data, Evas_Object *obj, void *event_info);
+
+static char *__msg_ui_setting_mm_recv_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_mm_recv_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_mm_recv_gl_exp(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_mm_recv_gl_con(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_mm_recv_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+
+
+/*============================================================================
+ FUNCTION IMPLEMENT
+=============================================================================*/
+
+/**********************
+ *** Home network ***
+ **********************/
+
+static void
+__msg_ui_setting_mm_recv_save_home_network(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ int selection = 0;
+ int set_val = 0;
+ msg_error_t err = MSG_SUCCESS;
+
+ selection = elm_radio_value_get(settingData->list.mm_msg.mm_recv_home_network_radio_group);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection);
+
+ switch (selection) {
+ case 0:
+ set_val = MSG_HOME_AUTO_DOWNLOAD;
+ break;
+
+ case 1:
+ set_val = MSG_HOME_MANUAL;
+ break;
+
+ case 2:
+ set_val = MSG_HOME_REJECT;
+ break;
+
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid selection = %d", selection);
+ set_val = MSG_HOME_AUTO_DOWNLOAD;
+ break;
+ }
+
+ /* Save selected value. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, set_val);
+ err = msg_ui_setting_msg_set_config(settingData);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(home network) is %d", err);
+
+}
+
+static char *
+__msg_ui_setting_mm_recv_home_network_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") || !strcmp(part, "elm.text.1")) {
+ if (mm_recv_home_network_menu_its[index].name) {
+ if (strstr(mm_recv_home_network_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", mm_recv_home_network_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[index].name));
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_mm_recv_home_network_radio_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);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ __msg_ui_setting_mm_recv_save_home_network(data);
+
+ elm_genlist_item_update(settingData->list.mm_msg.mm_recv_home_network_item);
+}
+
+static Evas_Object *
+__msg_ui_setting_mm_recv_home_network_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *radio;
+
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ int index = (int)data;
+ int retrieveType = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+ radio = elm_radio_add(obj);
+ elm_radio_state_value_set(radio, index);
+ evas_object_propagate_events_set(radio, EINA_FALSE);
+ evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_mm_recv_home_network_radio_cb, (void *)settingData);
+
+ if (index == 0)
+ settingData->list.mm_msg.mm_recv_home_network_radio_group = radio;
+ else
+ elm_radio_group_add(radio, settingData->list.mm_msg.mm_recv_home_network_radio_group);
+
+ /* When user contract expanded genlist item, genlist is updated.
+ * In this case, radio button is set to first item.
+ * Therefore, we should check and set radio value when last item is redrawn.
+ */
+ if (index == 2) {
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, &retrieveType);
+ if (retrieveType == MSG_HOME_MANUAL)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 1);
+ else if (retrieveType == MSG_HOME_REJECT)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 2);
+ else
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 0);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ }
+
+ return radio;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_mm_recv_home_network_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = NULL;
+ int index = (int)data;
+
+ settingData = msg_ui_setting_get_data();
+ 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);
+
+ /* Change radio selection. */
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, index);
+
+ __msg_ui_setting_mm_recv_save_home_network((void *)settingData);
+
+ elm_genlist_item_update(settingData->list.mm_msg.mm_recv_home_network_item);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return;
+}
+
+
+/*************************
+ *** Foreign network ***
+ *************************/
+
+static void
+__msg_ui_setting_mm_recv_save_foreign_network(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ int selection;
+ msg_error_t err = MSG_SUCCESS;
+
+ selection = elm_radio_value_get(settingData->list.mm_msg.mm_recv_foreign_network_radio_group);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection);
+
+ /* Save selected value. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, selection);
+ err = msg_ui_setting_msg_set_config(settingData);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(Foreign network) is %d", err);
+
+}
+
+static char *
+__msg_ui_setting_mm_recv_foreign_network_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") || !strcmp(part, "elm.text.1")) {
+ if (mm_recv_foreign_network_menu_its[index].name) {
+ if (strstr(mm_recv_foreign_network_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", mm_recv_foreign_network_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[index].name));
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_mm_recv_foreign_network_radio_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);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ __msg_ui_setting_mm_recv_save_foreign_network(data);
+
+ elm_genlist_item_update(settingData->list.mm_msg.mm_recv_foreign_network_item);
+}
+
+static Evas_Object *
+__msg_ui_setting_mm_recv_foreign_network_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *radio;
+
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ int index = (int)data;
+ int retrieveType = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+ radio = elm_radio_add(obj);
+ elm_radio_state_value_set(radio, index);
+ evas_object_propagate_events_set(radio, EINA_FALSE);
+ evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_mm_recv_foreign_network_radio_cb, (void *)settingData);
+
+ if (index == 0)
+ settingData->list.mm_msg.mm_recv_foreign_network_radio_group = radio;
+ else
+ elm_radio_group_add(radio, settingData->list.mm_msg.mm_recv_foreign_network_radio_group);
+
+ /* When user contract expanded genlist item, genlist is updated.
+ * In this case, radio button is set to first item.
+ * Therefore, we should check and set radio value when last item is redrawn.
+ */
+ if (index == 3) {
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, &retrieveType);
+ if (retrieveType == MSG_ABROAD_MANUAL)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 1);
+ else if (retrieveType == MSG_ABROAD_RESTRICTED)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 2);
+ else if (retrieveType == MSG_ABROAD_REJECT)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 3);
+ else
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 0);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ }
+
+ return radio;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_mm_recv_foreign_network_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = NULL;
+ int index = (int)data;
+
+ settingData = msg_ui_setting_get_data();
+ 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);
+
+ /* Change radio selection. */
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, index);
+
+ __msg_ui_setting_mm_recv_save_foreign_network((void *)settingData);
+
+ elm_genlist_item_update(settingData->list.mm_msg.mm_recv_foreign_network_item);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return;
+}
+
+
+/************************************
+ *** Receiving option main menu ***
+ ************************************/
+
+static char *
+__msg_ui_setting_mm_recv_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int index = (int)data;
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ int set_val = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
+ if (mm_recv_menu_its[index].name) {
+ if (strstr(mm_recv_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", mm_recv_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_menu_its[index].name));
+ }
+ } else if (!strcmp(part, "elm.text.sub") || !strcmp(part, "elm.text.2")) {
+ if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_HOME) {
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, &set_val);
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ switch (set_val) {
+ case MSG_HOME_AUTO_DOWNLOAD:
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[0].name));
+ break;
+
+ case MSG_HOME_MANUAL:
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[1].name));
+ break;
+
+ case MSG_HOME_REJECT:
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[2].name));
+ break;
+
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid value = %d", set_val);
+ break;
+ }
+ } else if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN) {
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, &set_val);
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ switch (set_val) {
+ case MSG_ABROAD_AUTO_DOWNLOAD:
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[0].name));
+ break;
+
+ case MSG_ABROAD_MANUAL:
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[1].name));
+ break;
+
+ case MSG_ABROAD_RESTRICTED:
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[2].name));
+ break;
+
+ case MSG_ABROAD_REJECT:
+ return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[3].name));
+ break;
+
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid value = %d", set_val);
+ break;
+ }
+ } 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_mm_recv_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;
+ Eina_Bool expand_state = EINA_FALSE;
+
+ 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_MM_RECV_OPT_MENU_HOME) {
+ expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.mm_recv_home_network_item);
+ if (expand_state == EINA_FALSE)
+ elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_home_network_item, EINA_TRUE);
+ else
+ elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_home_network_item, EINA_FALSE);
+ } else if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN) {
+ expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.mm_recv_foreign_network_item);
+ if (expand_state == EINA_FALSE)
+ elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_foreign_network_item, EINA_TRUE);
+ else
+ elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_foreign_network_item, EINA_FALSE);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void
+__msg_ui_setting_mm_recv_gl_exp(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Elm_Object_Item *it = event_info;
+ int index = 0;
+ int depth = 0;
+ int retrieveType = 0;
+
+ depth = elm_genlist_item_expanded_depth_get(it);
+
+ if (depth == 0) {
+ if (it == settingData->list.mm_msg.mm_recv_home_network_item) {
+ settingData->list.mm_msg.mm_recv_home_network_itc.item_style = "dialogue/1text.1icon.2/expandable2";
+ settingData->list.mm_msg.mm_recv_home_network_itc.func.text_get = __msg_ui_setting_mm_recv_home_network_gl_text_get;
+ settingData->list.mm_msg.mm_recv_home_network_itc.func.content_get = __msg_ui_setting_mm_recv_home_network_gl_content_get;
+ settingData->list.mm_msg.mm_recv_home_network_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_recv_home_network_itc.func.del = NULL;
+
+ for (index = 0; mm_recv_home_network_menu_its[index].name; index++) {
+ elm_genlist_item_append(settingData->list.mm_msg.mm_recv_genlist,
+ &settingData->list.mm_msg.mm_recv_home_network_itc,
+ (void *)index, it, mm_recv_home_network_menu_its[index].type,
+ __msg_ui_setting_mm_recv_home_network_gl_sel, (void *)index);
+ }
+
+ if (settingData->list.mm_msg.mm_recv_home_network_radio_group) {
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, &retrieveType);
+
+ if (retrieveType == MSG_HOME_MANUAL)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 1);
+ else if (retrieveType == MSG_HOME_REJECT)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 2);
+ else
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 0);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ }
+ } else if (it == settingData->list.mm_msg.mm_recv_foreign_network_item) {
+ settingData->list.mm_msg.mm_recv_foreign_network_itc.item_style = "dialogue/1text.1icon.2/expandable2";
+ settingData->list.mm_msg.mm_recv_foreign_network_itc.func.text_get = __msg_ui_setting_mm_recv_foreign_network_gl_text_get;
+ settingData->list.mm_msg.mm_recv_foreign_network_itc.func.content_get = __msg_ui_setting_mm_recv_foreign_network_gl_content_get;
+ settingData->list.mm_msg.mm_recv_foreign_network_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_recv_foreign_network_itc.func.del = NULL;
+
+ for (index = 0; mm_recv_foreign_network_menu_its[index].name; index++) {
+ elm_genlist_item_append(settingData->list.mm_msg.mm_recv_genlist,
+ &settingData->list.mm_msg.mm_recv_foreign_network_itc,
+ (void *)index, it, mm_recv_foreign_network_menu_its[index].type,
+ __msg_ui_setting_mm_recv_foreign_network_gl_sel, (void *)index);
+ }
+
+ if (settingData->list.mm_msg.mm_recv_foreign_network_radio_group) {
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, &retrieveType);
+
+ if (retrieveType == MSG_ABROAD_MANUAL)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 1);
+ else if (retrieveType == MSG_ABROAD_RESTRICTED)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 2);
+ else if (retrieveType == MSG_ABROAD_REJECT)
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 3);
+ else
+ elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 0);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid it = 0x%x", it);
+ }
+ }
+}
+
+static void
+__msg_ui_setting_mm_recv_gl_con(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Elm_Object_Item *item = event_info;
+ elm_genlist_item_subitems_clear(item);
+}
+
+static Evas_Object *
+__msg_ui_setting_mm_recv_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !settingData, NULL);
+
+ Evas_Object *mm_recv_genlist;
+ Elm_Object_Item *it = NULL;
+
+ int index = 0;
+
+ mm_recv_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->list.mm_msg.mm_recv_genlist = mm_recv_genlist;
+
+ msg_ui_setting_common_append_genlist_separator(mm_recv_genlist, settingData);
+
+ settingData->list.mm_msg.mm_recv_2line_expand_itc.item_style = "dialogue/2text.3/expandable";
+ settingData->list.mm_msg.mm_recv_2line_expand_itc.func.text_get = __msg_ui_setting_mm_recv_gl_text_get;
+ settingData->list.mm_msg.mm_recv_2line_expand_itc.func.content_get = NULL;
+ settingData->list.mm_msg.mm_recv_2line_expand_itc.func.state_get = NULL;
+ settingData->list.mm_msg.mm_recv_2line_expand_itc.func.del = NULL;
+
+ for (index = 0; mm_recv_menu_its[index].name; index++) {
+ if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_HOME) {
+ it = elm_genlist_item_append(mm_recv_genlist, &settingData->list.mm_msg.mm_recv_2line_expand_itc,
+ (void *)index, NULL, mm_recv_menu_its[index].type,
+ __msg_ui_setting_mm_recv_gl_sel, (void *)index);
+ settingData->list.mm_msg.mm_recv_home_network_item = it;
+ } else if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN) {
+ it = elm_genlist_item_append(mm_recv_genlist, &settingData->list.mm_msg.mm_recv_2line_expand_itc,
+ (void *)index, NULL, mm_recv_menu_its[index].type,
+ __msg_ui_setting_mm_recv_gl_sel, (void *)index);
+ settingData->list.mm_msg.mm_recv_foreign_network_item = it;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index);
+ }
+ }
+
+ evas_object_smart_callback_add(mm_recv_genlist, "expanded", __msg_ui_setting_mm_recv_gl_exp, settingData);
+ evas_object_smart_callback_add(mm_recv_genlist, "contracted", __msg_ui_setting_mm_recv_gl_con, settingData);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return mm_recv_genlist;
+}
+
+void msg_ui_setting_mm_recv_opt_main(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *recv_layout;
+ Evas_Object *mm_recv_genlist;
+ Elm_Object_Item *navi_it;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE;
+ msg_ui_setting_msg_get_config(settingData);
+
+ recv_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ mm_recv_genlist = __msg_ui_setting_mm_recv_create_view(settingData->navi_frame, settingData);
+ elm_object_part_content_set(recv_layout, "elm.swallow.content", mm_recv_genlist);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_RECEIVINGOPTIONS"), NULL, NULL, recv_layout, NULL);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
diff --git a/setting/src/text/msg-ui-setting-text-message.c b/setting/src/text/msg-ui-setting-text-message.c
index 4d48d0b..44c9eef 100755
--- a/setting/src/text/msg-ui-setting-text-message.c
+++ b/setting/src/text/msg-ui-setting-text-message.c
@@ -14,12 +14,14 @@
* 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 },
+ { 1, "IDS_MSGF_BODY_SERVICECENTRE", msg_ui_setting_create_service_center_list, ELM_GENLIST_ITEM_NONE },
/* do not delete below */
{ 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
};
@@ -50,6 +52,9 @@ __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;
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+
+ msg_error_t err = MSG_SUCCESS;
MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
@@ -60,6 +65,22 @@ __msg_ui_setting_text_gl_text_get(void *data, Evas_Object *obj, const char *part
else
return strdup(dgettext(MESSAGE_PKGNAME, text_menu_its[index].name));
}
+ } else if (!strcmp(part, "elm.text.sub") || !strcmp(part, "elm.text.2")) {
+ if (index == MSG_UI_SETTING_TEXT_MENU_SMSC) {
+ char smsc_name[MAX_SMSC_NAME_LEN + 1] = {0, };
+ int cur_index = 0;
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST;
+ msg_ui_setting_msg_get_config(settingData);
+ err = msg_get_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, &cur_index);
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_ui_setting_text_gl_text_get is %d", err);
+
+ snprintf(smsc_name, sizeof(smsc_name), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CENTRE_PD"), cur_index+1);
+ return strdup(smsc_name);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %s", index);
+ }
} else {
MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
}
@@ -79,8 +100,8 @@ __msg_ui_setting_text_save_req_delivery_report(void *data)
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_get_config(settingData);
+ msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_SMS_SENDOPT_DELIVERY_REPORT_BOOL, set_val);
msg_ui_setting_msg_set_config(settingData);
}
@@ -107,6 +128,7 @@ __msg_ui_setting_text_gl_content_get(void *data, Evas_Object *obj, const char *p
int index = (int)data;
Evas_Object *check;
PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ bool bReport = false;
MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
@@ -115,7 +137,11 @@ __msg_ui_setting_text_gl_content_get(void *data, Evas_Object *obj, const char *p
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)
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMS_SEND;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_SMS_SENDOPT_DELIVERY_REPORT_BOOL, &bReport);
+
+ if (bReport == true)
elm_check_state_set(check, EINA_TRUE);
else
elm_check_state_set(check, EINA_FALSE);
@@ -158,6 +184,9 @@ __msg_ui_setting_text_gl_sel(void *data, Evas_Object *obj, void *event_info)
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 if (index == MSG_UI_SETTING_TEXT_MENU_SMSC) {
+ if (text_menu_its[index].func != NULL)
+ text_menu_its[index].func(settingData, obj, event_info);
} else {
MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid data : index = %d", index);
}
@@ -171,6 +200,7 @@ __msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA setting
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
Evas_Object *text_genlist;
+ Elm_Object_Item *it = NULL;
int index = 0;
@@ -179,6 +209,12 @@ __msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA setting
msg_ui_setting_common_append_genlist_separator(text_genlist, settingData);
+ settingData->list.text_msg.text_2line_itc.item_style = "dialogue/2text.3";
+ settingData->list.text_msg.text_2line_itc.func.text_get = __msg_ui_setting_text_gl_text_get;
+ settingData->list.text_msg.text_2line_itc.func.content_get = NULL;
+ settingData->list.text_msg.text_2line_itc.func.state_get = NULL;
+ settingData->list.text_msg.text_2line_itc.func.del = NULL;
+
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;
@@ -186,8 +222,15 @@ __msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA setting
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);
+ if (index == MSG_UI_SETTING_TEXT_MENU_SMSC) {
+ it = elm_genlist_item_append(text_genlist, &settingData->list.text_msg.text_2line_itc,
+ (void *)index, NULL, text_menu_its[index].type,
+ __msg_ui_setting_text_gl_sel, (void *)index);
+ settingData->list.text_msg.service_centre_item = it;
+ } else {
+ 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);
@@ -203,9 +246,6 @@ void msg_ui_setting_text_create_view(void *data, Evas_Object *obj, void *event_i
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));
diff --git a/setting/src/text/msg-ui-setting-text-service-center.c b/setting/src/text/msg-ui-setting-text-service-center.c
new file mode 100755
index 0000000..29584b8
--- /dev/null
+++ b/setting/src/text/msg-ui-setting-text-service-center.c
@@ -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-setting-text-message.h"
+
+
+static struct _msg_ui_setting_mixed_list_item smsc_menu_its[] = {
+ { 1, "IDS_MSGF_BODY_PUSHADDRESS", NULL, ELM_GENLIST_ITEM_NONE },
+ { 1, "Editfield", NULL, ELM_GENLIST_ITEM_NONE },
+ /* do not delete below */
+ { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE }
+};
+
+
+/*============================================================================
+ STATIC FUNCTION DEFINE
+=============================================================================*/
+static char *__msg_ui_setting_smsc_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_setting_smsc_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_setting_text_create_smsc_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData);
+static Eina_Bool __msg_ui_setting_smsc_is_changed(void *data);
+static void __msg_ui_setting_smsc_done_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_smsc_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info);
+
+static void __msg_ui_setting_text_save_service_centre(void *data);
+static char *__msg_ui_setting_text_service_centre_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_text_service_centre_radio_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_setting_text_service_centre_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_setting_text_service_centre_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_setting_text_service_centre_gl_sel(void *data, Evas_Object *obj, void *event_info);
+
+
+/*============================================================================
+ FUNCTION IMPLEMENT
+=============================================================================*/
+
+/******************
+ *** SMSC menu ***
+ *******************/
+
+static void
+__msg_ui_setting_smsc_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_smsc_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");
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void
+__msg_ui_setting_smsc_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *layout = (Evas_Object *)data;
+
+ elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void
+__msg_ui_setting_smsc_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);
+}
+
+static char *
+__msg_ui_setting_smsc_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 (smsc_menu_its[index].name) {
+ if (strstr(smsc_menu_its[index].name, "IDS_COM") != NULL)
+ return strdup(dgettext("sys_string", smsc_menu_its[index].name));
+ else
+ return strdup(dgettext(MESSAGE_PKGNAME, smsc_menu_its[index].name));
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static Evas_Object *
+__msg_ui_setting_smsc_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int index = (int)data;
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+
+ int center_index = settingData->list.text_msg.center_index;
+
+ 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_SMSC_MENU_ADDRESS) {
+ Evas_Object *smsc_addr_ly;
+ Evas_Object *smsc_addr_entry;
+ char *buf = NULL;
+ char address[SMSC_NAME_MAX+1] = {0,};
+
+ static Elm_Entry_Filter_Limit_Size smsc_addr_limit_filter_data;
+ static Elm_Entry_Filter_Accept_Set smsc_addr_accept_filter_data;
+
+ smsc_addr_ly = elm_layout_add(obj);
+ elm_layout_theme_set(smsc_addr_ly, "layout", "editfield", "default");
+
+ smsc_addr_entry = elm_entry_add(smsc_addr_ly);
+ elm_entry_single_line_set(smsc_addr_entry, EINA_TRUE);
+ elm_entry_autocapital_type_set(smsc_addr_entry, ELM_AUTOCAPITAL_TYPE_NONE);
+ elm_entry_input_panel_layout_set(smsc_addr_entry, ELM_INPUT_PANEL_LAYOUT_PHONENUMBER);
+ settingData->list.text_msg.smsc_addr_entry = smsc_addr_entry;
+
+ evas_object_smart_callback_add(smsc_addr_entry, "changed", __msg_ui_setting_smsc_entry_changed_cb, (void *)smsc_addr_ly);
+ evas_object_smart_callback_add(smsc_addr_entry, "focused", __msg_ui_setting_smsc_entry_focus_cb, (void *)smsc_addr_ly);
+ evas_object_smart_callback_add(smsc_addr_entry, "unfocused", __msg_ui_setting_smsc_entry_unfocus_cb, (void *)smsc_addr_ly);
+ elm_object_signal_callback_add(smsc_addr_ly, "elm,eraser,clicked", "elm", __msg_ui_setting_smsc_eraser_clicked_cb, (void *)smsc_addr_entry);
+
+ /* Before giving focus to the entry object, the entry object should be shown. */
+ evas_object_show(smsc_addr_entry);
+ elm_object_part_content_set(smsc_addr_ly, "elm.swallow.content", smsc_addr_entry);
+
+ smsc_addr_limit_filter_data.max_char_count = 0;
+ smsc_addr_limit_filter_data.max_byte_count = MAX_SMSC_ADDR_LEN;
+ elm_entry_markup_filter_append(smsc_addr_entry, elm_entry_filter_limit_size, &smsc_addr_limit_filter_data);
+
+ /* If '*', '#', 'P' are inputted, it will be ignored. */
+ smsc_addr_accept_filter_data.accepted = "+0123456789";
+ smsc_addr_accept_filter_data.rejected = NULL;
+ elm_entry_markup_filter_append(smsc_addr_entry, elm_entry_filter_accept_set, &smsc_addr_accept_filter_data);
+ elm_entry_cnp_mode_set(smsc_addr_entry, ELM_CNP_MODE_PLAINTEXT);
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list));
+ msg_get_str_value(settingData->msg_setting.smsc_list->msg_struct_info[center_index], MSG_SMSC_ADDR_STR, address, SMSC_ADDR_MAX);
+ if (strlen(address) > 0) {
+ buf = elm_entry_utf8_to_markup(address);
+ elm_entry_entry_set(smsc_addr_entry, buf);
+
+ if (buf != NULL)
+ free(buf);
+ }
+
+ if (settingData->list.text_msg.smsc_addr_entry != NULL)
+ elm_object_focus_set(settingData->list.text_msg.smsc_addr_entry, EINA_TRUE);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ return smsc_addr_ly;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Nothing to do.");
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static Evas_Object *
+__msg_ui_setting_text_create_smsc_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !settingData, NULL);
+
+ Evas_Object *smsc_genlist;
+ int index = 0;
+
+ smsc_genlist = msg_ui_setting_common_create_genlist(parent);
+ settingData->list.text_msg.smsc_genlist = smsc_genlist;
+
+ settingData->list.text_msg.smsc_title_itc.item_style = "dialogue/title";
+ settingData->list.text_msg.smsc_title_itc.func.text_get = __msg_ui_setting_smsc_gl_text_get;
+ settingData->list.text_msg.smsc_title_itc.func.content_get = NULL;
+ settingData->list.text_msg.smsc_title_itc.func.state_get = NULL;
+ settingData->list.text_msg.smsc_title_itc.func.del = NULL;
+
+ settingData->list.text_msg.smsc_1icon_itc.item_style = "dialogue/1icon";
+ settingData->list.text_msg.smsc_1icon_itc.func.text_get = NULL;
+ settingData->list.text_msg.smsc_1icon_itc.func.content_get = __msg_ui_setting_smsc_gl_content_get;
+ settingData->list.text_msg.smsc_1icon_itc.func.state_get = NULL;
+ settingData->list.text_msg.smsc_1icon_itc.func.del = NULL;
+
+ for (index = 0; smsc_menu_its[index].name; index++) {
+ if (index == MSG_UI_SETTING_SMSC_MENU_ADDRESS_TITLE) {
+ elm_genlist_item_append(smsc_genlist, &settingData->list.text_msg.smsc_title_itc,
+ (void *)index, NULL, smsc_menu_its[index].type,
+ NULL, (void *)index);
+ } else if (index == MSG_UI_SETTING_SMSC_MENU_ADDRESS) {
+ elm_genlist_item_append(smsc_genlist, &settingData->list.text_msg.smsc_1icon_itc,
+ (void *)index, NULL, smsc_menu_its[index].type,
+ NULL, (void *)index);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index);
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return smsc_genlist;
+}
+
+static Eina_Bool
+__msg_ui_setting_smsc_is_changed(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ char *addr_buf = NULL;
+ int index = 0;
+ char address[SMSC_NAME_MAX+1] = {0,};
+
+ index = settingData->list.text_msg.center_index;
+
+ addr_buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->list.text_msg.smsc_addr_entry));
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list));
+ msg_get_str_value(settingData->msg_setting.smsc_list->msg_struct_info[index], MSG_SMSC_ADDR_STR, address, SMSC_ADDR_MAX);
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ /* It will check whether value is changed or not. */
+ if (addr_buf != NULL) {
+ if (strcmp(addr_buf, address) != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is different.");
+ return EINA_TRUE;
+ }
+ }
+
+ return EINA_FALSE;
+}
+
+static void
+__msg_ui_setting_smsc_done_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);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ char *addr_buf = NULL;
+ int index, ret;
+ char address[SMSC_NAME_MAX+1] = {0,};
+
+ index = settingData->list.text_msg.center_index;
+
+ addr_buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->list.text_msg.smsc_addr_entry));
+ if (!addr_buf || strlen(addr_buf) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "No value");
+ goto smsc_exit;
+ }
+
+ if (__msg_ui_setting_smsc_is_changed(settingData) != EINA_TRUE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Nothing is changed.");
+ goto smsc_exit;
+ }
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list));
+ msg_get_str_value(settingData->msg_setting.smsc_list->msg_struct_info[index], MSG_SMSC_ADDR_STR, address, SMSC_ADDR_MAX);
+
+ strncpy(address, addr_buf, SMSC_ADDR_MAX);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMSC Addr = %s", address);
+
+ ret = msg_ui_setting_msg_set_config(settingData);
+
+ if (ret == 0) {
+ /* Update smsc_all_genlist */
+ elm_genlist_realized_items_update(settingData->list.text_msg.smsc_all_genlist);
+
+ /* Update text message genlist. */
+ elm_genlist_item_update(settingData->list.text_msg.service_centre_item);
+ }
+
+smsc_exit:
+ if (addr_buf != NULL)
+ free(addr_buf);
+
+ elm_naviframe_item_pop(settingData->navi_frame);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void
+__msg_ui_setting_smsc_cancel_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);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ elm_naviframe_item_pop(settingData->navi_frame);
+}
+
+void msg_ui_setting_service_center_selected_main(void *data, int index)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *center_layout;
+ Evas_Object *smsc_genlist;
+ Evas_Object *title_left_btn;
+ Evas_Object *title_right_btn;
+
+ Elm_Object_Item *navi_it;
+
+ char title[DEF_BUF_LEN_S] = {0, };
+
+ settingData->list.text_msg.center_index = index;
+
+ center_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ smsc_genlist = __msg_ui_setting_text_create_smsc_menu(settingData->navi_frame, settingData);
+ elm_object_part_content_set(center_layout, "elm.swallow.content", smsc_genlist);
+
+ snprintf(title, sizeof(title), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CENTRE_PD"), index+1);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, title, NULL, NULL, center_layout, NULL);
+
+ /* Create title button. */
+ title_left_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \
+ dgettext("sys_string", "IDS_COM_SK_DONE"), \
+ __msg_ui_setting_smsc_done_btn_cb, settingData);
+ elm_object_item_part_content_set(navi_it, "title_left_btn", title_left_btn);
+
+ title_right_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \
+ dgettext("sys_string", "IDS_COM_SK_CANCEL"), \
+ __msg_ui_setting_smsc_cancel_btn_cb, settingData);
+ elm_object_item_part_content_set(navi_it, "title_right_btn", title_right_btn);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+/***********************
+ *** Service centre list ***
+ ***********************/
+
+static void
+__msg_ui_setting_text_save_service_centre(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+ int selection;
+ msg_error_t err = MSG_SUCCESS;
+
+ selection = elm_radio_value_get(settingData->list.text_msg.service_centre_radio_group);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection);
+
+ /* Save selected value. */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_set_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, selection);
+
+ err = msg_ui_setting_msg_set_config(settingData);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(service centre) is %d", err);
+
+}
+
+static char *
+__msg_ui_setting_text_service_centre_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int index = (int)data;
+ char smsc_name[MAX_SMSC_NAME_LEN + 1] = {0, };
+
+ if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
+ snprintf(smsc_name, sizeof(smsc_name), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CENTRE_PD"), index+1);
+ return strdup(smsc_name);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_text_service_centre_radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ __msg_ui_setting_text_save_service_centre(data);
+
+ elm_genlist_item_update(settingData->list.text_msg.service_centre_item);
+}
+
+static void
+__msg_ui_setting_text_service_centre_btn_clicked_cb(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_setting_service_center_selected_main(settingData, index);
+
+}
+
+static Evas_Object *
+__msg_ui_setting_text_service_centre_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *radio;
+ Evas_Object *button;
+
+ PMSG_SETTING_DATA settingData = msg_ui_setting_get_data();
+ int index = (int)data;
+ int selected = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.icon.1")) {
+ radio = elm_radio_add(obj);
+ elm_radio_state_value_set(radio, index);
+ evas_object_propagate_events_set(radio, EINA_FALSE);
+ evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_text_service_centre_radio_cb, (void *)settingData);
+
+ if (index == 0)
+ settingData->list.text_msg.service_centre_radio_group = radio;
+ else
+ elm_radio_group_add(radio, settingData->list.text_msg.service_centre_radio_group);
+
+ /* Radio value should be updated when user back from service centre setting.
+ * If it is omitted, radio will be set to first item.
+ */
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, &selected);
+ if (index == selected)
+ elm_radio_value_set(settingData->list.text_msg.service_centre_radio_group, index);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ return radio;
+ } else if (!strcmp(part, "elm.icon.2")) {
+ button = elm_button_add(obj);
+ settingData->list.text_msg.service_centre_btn_reveal = button;
+ elm_object_style_set(button, "reveal");
+
+ evas_object_propagate_events_set(button, EINA_FALSE);
+ evas_object_smart_callback_add(button, "clicked", __msg_ui_setting_text_service_centre_btn_clicked_cb, (void *)index);
+ return button;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ }
+
+ return NULL;
+}
+
+static void
+__msg_ui_setting_text_service_centre_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_SETTING_DATA settingData = NULL;
+ int index = (int)data;
+
+ settingData = msg_ui_setting_get_data();
+ 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);
+
+ /* Change radio selection. */
+ elm_radio_value_set(settingData->list.text_msg.service_centre_radio_group, index);
+
+ __msg_ui_setting_text_save_service_centre((void *)settingData);
+
+ elm_genlist_item_update(settingData->list.text_msg.service_centre_item);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return;
+}
+
+
+void msg_ui_setting_create_service_center_list(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data;
+
+ Evas_Object *smsc_layout;
+ Evas_Object *smsc_all_genlist;
+
+ Elm_Object_Item *navi_it;
+
+ int smsc_cnt;
+ int selected_smsc;
+
+ int index = 0;
+
+ /* SIM status check */
+ if(msg_common_is_sim_inserted() == FALSE) {
+ msg_ui_setting_common_show_notify(settingData, dgettext(MESSAGE_PKGNAME, "SIM not inserted"));
+ return;
+ }
+
+ smsc_layout = msg_ui_setting_common_create_layout(settingData->navi_frame);
+
+ smsc_all_genlist = msg_ui_setting_common_create_genlist(smsc_layout);
+ settingData->list.text_msg.smsc_all_genlist = smsc_all_genlist;
+ elm_object_part_content_set(smsc_layout, "elm.swallow.content", smsc_all_genlist);
+
+ msg_ui_setting_common_append_genlist_separator(smsc_all_genlist, settingData);
+
+ settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST;
+ msg_ui_setting_msg_get_config(settingData);
+ msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list));
+ msg_get_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, &selected_smsc);
+ smsc_cnt = settingData->msg_setting.smsc_list->nCount;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smsc_cnt = %d, selected_smsc = %d", smsc_cnt, selected_smsc);
+
+ if (smsc_cnt <= 0 || smsc_cnt > MAX_SMSC_LIST)
+ smsc_cnt = MAX_SMSC_LIST;
+
+ settingData->list.text_msg.text_1line_2icon_itc.item_style = "dialogue/1text.2icon";
+ settingData->list.text_msg.text_1line_2icon_itc.func.text_get = __msg_ui_setting_text_service_centre_gl_text_get;
+ settingData->list.text_msg.text_1line_2icon_itc.func.content_get = __msg_ui_setting_text_service_centre_gl_content_get;
+ settingData->list.text_msg.text_1line_2icon_itc.func.state_get = NULL;
+ settingData->list.text_msg.text_1line_2icon_itc.func.del = NULL;
+
+ for (index = 0; index < smsc_cnt; index++) {
+ elm_genlist_item_append(settingData->list.text_msg.smsc_all_genlist,
+ &settingData->list.text_msg.text_1line_2icon_itc,
+ (void *)index, NULL, ELM_GENLIST_ITEM_NONE,
+ __msg_ui_setting_text_service_centre_gl_sel, (void *)index);
+ }
+
+ elm_radio_value_set(settingData->list.text_msg.service_centre_radio_group, selected_smsc);
+
+ navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SERVICECENTRE"), NULL, NULL, smsc_layout, NULL);
+
+ msg_release_struct(&(settingData->msg_setting.setting_opt));
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
diff --git a/thread/include/msg-ui-thread-main.h b/thread/include/msg-ui-thread-main.h
index b37a8e4..1245b02 100755
--- a/thread/include/msg-ui-thread-main.h
+++ b/thread/include/msg-ui-thread-main.h
@@ -18,19 +18,16 @@
#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 <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
#include <libintl.h>
#include <bundle.h>
-#include <appcore-efl.h>
#include <Ecore.h>
#include <Ecore_IMF.h>
#include <Elementary.h>
+#include <aul.h>
#include <ui-gadget-module.h>
#include <utilX.h>
#include <time.h>
@@ -42,151 +39,247 @@
#define MSG_THREAD_THEME EDJDIR"/thread_genlist.edj"
#define MSG_THREAD_CONTROLBAR_ITEM_NUM (4)
+#define MSG_THREAD_DELETE_NOTI_TIME 1.5
+#define MSG_THREAD_LIST_MAX_COUNT 10
+#define MSG_THREAD_LIST_LAUNCH_LOAD_MAX_CNT 20
+
+
+typedef struct _MSG_THREAD_LIST_DATA MSG_THREAD_LIST_DATA, *PMSG_THREAD_LIST_DATA;
+typedef struct _MSG_APP_THREAD_DATA_S MSG_APP_THREAD_DATA_S, *PMSG_APP_THREAD_DATA_S;
+typedef struct _MSG_APP_THREAD_MSG_DATA_S MSG_APP_THREAD_MSG_DATA_S, *PMSG_APP_THREAD_MSG_DATA_S;
+typedef struct _MSG_APP_THREAD_DATELINE_DATA_S MSG_APP_THREAD_DATELINE_DATA_S, *PMSG_APP_THREAD_DATELINE_DATA_S;
+typedef struct _THREAD_MORE_VIEW_DATA THREAD_MORE_VIEW_DATA, *PTHREAD_MORE_VIEW_DATA;
typedef enum {
THREAD_NORMAL_VIEW = 0,
- THREAD_EDIT_VIEW,
+ THREAD_EDIT_VIEW, /** Edit viw mode*/
THREAD_UNLOAD_VIEW, /* when it calls other gadgets or views. */
} ThreadViewMode;
typedef enum {
+ THREAD_NORMAL_LIST_TYPE, /** Normal converstaion THREAD list */
+ THREAD_SPAM_LIST_TYPE, /** <More - spam messages list> */
+ THREAD_SIM_LIST_TYPE, /** <More -Sim messages list> */
+ THREAD_CBMSG_LIST_TYPE, /** <More -CB Message list> */
+ THREAD_DRAFT_LIST_TYPE, /** <More -Draft Message list> */
+ THREAD_LOCKED_LIST_TYPE, /** <More -Locked Message list> */
+ THREAD_SCHEDULED_LIST_TYPE, /** <More -Scheduled Message list> */
+} ThreadMsgListType;
+
+typedef enum {
+ THREAD_LIST_APP_DATA_THREAD = 0,
+ THREAD_LIST_APP_DATA_MSG,
+} ThreadMsgListAppDataType;
+
+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 enum {
+ THREAD_ITC_EMPTY = 0,
+ THREAD_ITC_SEARCH,
+ THREAD_ITC_SEARCH_UNREAD,
+ THREAD_ITC_BLANK,
+ THREAD_ITC_POPUP,
+ THREAD_ITC_DATE,
+} ThreadItcType;
+
+
+enum {
+ THREAD_ROTATE_ANGLE_PORTRAIT = 0,
+ THREAD_ROTATE_ANGLE_PORTRAIT_UPSIDEDOWN = 180,
+ THREAD_ROTATE_ANGLE_LANDSCAPE = 270,
+ THREAD_ROTATE_ANGLE_LANDSCAPE_UPSIDEDOWN = 90,
+ THREAD_ROTATE_ANGLE_UNKNOWN = -1,
+};
typedef struct _MSG_THREAD_DATA {
- Elm_Theme *th;
+ msg_handle_t msgHandle;
+ int app_state;
+
+ Elm_Theme *th;
Evas_Object *win_main;
Evas_Object *navi_frame;
+
+ Elm_Genlist_Item_Class itc_empty;
+ Elm_Genlist_Item_Class itc_search;
+ Elm_Genlist_Item_Class itc_search_unread;
+ Elm_Genlist_Item_Class itc_blank;
+ Elm_Genlist_Item_Class itc_popup;
+ Elm_Genlist_Item_Class itc_date;
+
+ char *time_12h_ptn;
+ char *time_24h_ptn;
+ char *date_ptn;
+ msg_time_format time_fmt;
+ char locale[DEF_BUF_LEN];
+ int noti_fd;
+
+ bool isRotate; /* Rotation state */
+ bool isIncomingMsg; /* Check there is new incoming message when it back from edit mode to normal. */
+
+ PMSG_THREAD_LIST_DATA list_data[MSG_THREAD_LIST_MAX_COUNT];
+
+} MSG_THREAD_DATA, *PMSG_THREAD_DATA;
+
+typedef struct _MSG_THREAD_LIST_DATA {
+
+ Evas_Object *genlist;
Evas_Object *conform;
- Elm_Object_Item *nf_it;
- Evas_Object *toolbar;
Evas_Object *content_ly;
Evas_Object *noc_ly;
- Evas_Object *sel_all_ly;
+ Elm_Object_Item *nf_it; //title, control bar naviframe item
+ Evas_Object *toolbar;
+ Elm_Object_Item *toolbar_item[MSG_THREAD_CONTROLBAR_ITEM_NUM];
Evas_Object *back_btn;
+ Evas_Object *searchbar;
+ Ecore_Timer *search_timer;
- Evas_Object *sel_all_box;
- Eina_Bool sel_all_checked;
+ Elm_Genlist_Item_Class itc_default;
+ Elm_Genlist_Item_Class itc_unread;
- Ecore_IMF_Context *imf_ctx;
+ ThreadViewMode view_mode;
+ ThreadMsgListType list_type;
+ ThreadMsgListAppDataType app_data_type;
+ ThreadSearchMode search_mode;
- Elm_Object_Item *toolbar_item[MSG_THREAD_CONTROLBAR_ITEM_NUM];
+ Elm_Object_Item *sel_gen_item;
+ int sel_thread_id;
+ int sel_msg_id;
- Evas_Object *genlist;
- Evas_Object *noc;
+ struct ug_cbs cbs;
+ ui_gadget_h loaded_ug;
- Evas_Object *searchbar;
+ Evas_Object *select_info; //%d item selected
+ Evas_Object *delete_info; //deleted
+ Evas_Object *selectioninfo_layout;
- Evas_Object *tickernoti;
- Ecore_Timer *e_timer;
+ Evas_Object *sel_all_ly;
+ Evas_Object *sel_all_box;
+ Eina_Bool sel_all_checked;
+ Eina_List *chk_list;
+ Ecore_Thread *del_thread;
+ int del_index;
+ int item_cnt;
+ int check_cnt;
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;
+ Ecore_Idler *launch_idler;
+ int loaded_cnt;
+} _MSG_THREAD_LIST_DATA;
+
+typedef struct _MSG_APP_THREAD_DATA_S {
+ msg_thread_id_t thread_id;
+ char thread_name[DEF_THREAD_NAME_LEN+1];
+ char thread_data[DEF_BUF_LEN_S+1];
+ time_t *thread_time;
+ msg_direction_type_t direction;
+ int unread_cnt;
+ int sms_cnt;
+ int mms_cnt;
+ int msg_type;
- Elm_Object_Item *sel_gen_item;
- int sel_thread_id;
+ Evas_Object *chk;
+ Eina_Bool is_check;
+} _MSG_APP_THREAD_DATA_S;
- Ecore_Thread *del_thread;
+typedef struct _MSG_APP_THREAD_MSG_DATA_S {
+ int msg_id;
+ int msg_type;
+ bool is_read;
+ msg_contact_id_t contact_id;
- bundle *msg_b;
+ char display_name[MAX_DISPLAY_NAME_LEN];
+ char address[MAX_ADDRESS_VAL_LEN+1];
+ char msg_body[MAX_MSG_TEXT_LEN+1];
+ time_t *msg_time;
- char *time_12h_ptn;
- char *time_24h_ptn;
- char *date_ptn;
- msg_time_format time_fmt;
- char locale[DEF_BUF_LEN];
- int noti_fd;
+ Evas_Object *chk;
+ Eina_Bool is_check;
+} _MSG_APP_THREAD_MSG_DATA_S;
- Eina_List *chk_list;
- int del_index;
- int thread_cnt;
- int check_cnt;
+typedef struct _MSG_APP_THREAD_DATELINE_DATA_S {
+ Elm_Object_Item *date_it;
+ time_t *thread_time;
+ int subitem_cnt;
+} _MSG_APP_THREAD_DATELINE_DATA_S;
- 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"
+
+PMSG_THREAD_DATA msg_ui_thread_get_data(void);
+msg_handle_t msg_ui_thread_get_data_handle(void);
+Elm_Genlist_Item_Class* msg_ui_thread_get_itc_type(ThreadItcType type);
+
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);
+PMSG_THREAD_LIST_DATA msg_ui_thread_create_thread_list_data(ThreadMsgListType list_type, ThreadMsgListAppDataType app_data_type);
+void msg_ui_thread_destroy_thread_list_data(PMSG_THREAD_LIST_DATA pListData);
+PMSG_THREAD_LIST_DATA msg_ui_thread_get_default_list(void);
+PMSG_THREAD_LIST_DATA msg_ui_thread_get_current_list(void);
+PMSG_THREAD_LIST_DATA msg_ui_thread_get_prev_list(PMSG_THREAD_LIST_DATA pListData);
-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_load_thread_view(void *data, service_h service);
+void msg_ui_thread_load_message_box(int list_type);
+void msg_ui_thread_reset_thread_view(void *data, service_h service);
+void msg_ui_thread_rotation_set(void *data, int rot);
-void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData);
+void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData, PMSG_THREAD_LIST_DATA pListData);
+Evas_Object *msg_ui_thread_create_content_layout(Evas_Object *parent);
+Evas_Object *msg_ui_thread_create_nocontent_layout(Evas_Object *parent);
+Evas_Object *msg_ui_thread_create_layout_main(PMSG_THREAD_DATA pData);
+Evas_Object *msg_ui_thread_create_genlist(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData);
+Evas_Object *msg_ui_thread_create_searchbar_layout(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData);
-PMSG_THREAD_DATA msg_ui_thread_get_data(void);
-void msg_ui_thread_add_navi_controlbar_item(PMSG_THREAD_DATA pData);
+void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData);
+Evas_Object *msg_ui_thread_create_toolbar(Evas_Object *parent);
+void msg_ui_thread_set_navi_controlbar_item(PMSG_THREAD_LIST_DATA pListData);
/* 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_set_thread_data(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_DATA_S thread_data, msg_struct_t msgThreadInfo);
+void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_MSG_DATA_S msg_data, msg_struct_t msgInfo);
+char *msg_ui_thread_msg_gl_text_get(void *data, Evas_Object *obj, const char *part);
+char *msg_ui_thread_search_msg_gl_text_get(void *data, Evas_Object *obj, const char *part);
+Evas_Object *msg_ui_thread_msg_gl_content_get(void *data, Evas_Object *obj, const char *part);
+void msg_ui_thread_msg_gl_del(void *data, Evas_Object *obj);
+void msg_ui_thread_msg_gl_sel(void *data, Evas_Object *obj, void *event_info);
+char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part);
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);
+char *msg_ui_thread_date_gl_text_get(void *data, Evas_Object *obj, const char *part);
+void msg_ui_thread_date_gl_del(void *data, Evas_Object *obj);
+PMSG_APP_THREAD_DATELINE_DATA_S msg_ui_thread_list_insert_dateline(PMSG_THREAD_LIST_DATA pListData, time_t* cur_time, time_t* prev_time);
+void msg_ui_thread_list_load(PMSG_THREAD_LIST_DATA pListData, Eina_Bool bLaunch);
+void msg_ui_thread_list_update(PMSG_THREAD_LIST_DATA pListData);
+void msg_ui_thread_list_item_update(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id);
+void msg_ui_thread_list_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id);
+
+void msg_ui_thread_msg_list_load(PMSG_THREAD_LIST_DATA pListData, int listType);
+void msg_ui_thread_list_msg_list_update(PMSG_THREAD_LIST_DATA pListData);
+void msg_ui_thread_list_msg_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id);
+void msg_ui_thread_list_msg_item_update(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id);
+Eina_Bool msg_ui_thread_search_msg_list_load(void *data);
+
+void msg_ui_thread_common_style_set(PMSG_THREAD_DATA pData);
+void msg_ui_thread_genlist_style_set(PMSG_THREAD_LIST_DATA pListData);
/* 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_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t storageChangeType, msg_id_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_checkbox_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_thread_ctlbar_spam_setting_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_ctlbar_message_box_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);
@@ -197,24 +290,36 @@ void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void
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_sweep_btn_cb(void *data, Evas_Object *obj, void *event_info);
void msg_ui_thread_timezone_change_cb(void *data);
+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 UTILS */
+int msg_ui_thread_launch_voice_call(const char *call_num);
+int msg_ui_thread_launch_video_call(const char *call_num);
+void msg_ui_thread_launch_spam_setting(PMSG_THREAD_LIST_DATA pListData);
+void msg_ui_thread_launch_viewer_ug(PMSG_THREAD_LIST_DATA pListData, int nMsgId);
+void msg_ui_thread_launch_msg_detail_view(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_MSG_DATA_S item_data);
+
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_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data, service_h svc_handle);
+void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_LIST_DATA pListData);
+void msg_ui_thread_show_normal_mode(PMSG_THREAD_LIST_DATA pListData);
+void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_LIST_DATA pListData, int thread_id);
+void msg_ui_thread_select_item_by_msg_id(PMSG_THREAD_LIST_DATA pListData, int msg_id);
+void msg_ui_thread_show_notify(PMSG_THREAD_LIST_DATA pListData, const char *msg);
+void msg_ui_thread_show_del_popup(PMSG_THREAD_LIST_DATA pListData, const char *msg);
+Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_LIST_DATA pListData, int count);
+void msg_ui_thread_show_select_info(PMSG_THREAD_LIST_DATA pListData);
+void msg_ui_thread_show_deleted_info(PMSG_THREAD_LIST_DATA pListData);
void msg_ui_thread_set_app_state(int app_state);
int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData);
+const char *msg_ui_thread_make_search_result_string(const char *string, char *searchword, bool *result);
+void msg_ui_thread_make_time_string(time_t *msg_t, char *buf, int buf_len);
+
#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
index 3a2dc7d..0e408a8 100755
--- a/thread/src/msg-ui-thread-callback.c
+++ b/thread/src/msg-ui-thread-callback.c
@@ -14,139 +14,199 @@
* limitations under the License.
*/
+
#include "msg-ui-thread-main.h"
-static Eina_Bool _search_list_load(void *data);
+static void __msg_ui_thread_insert_and_select_gen_item(PMSG_THREAD_LIST_DATA pListData);
+static void __msg_ui_thread_add_navi_select_all_ly(PMSG_THREAD_LIST_DATA pListData);
+static void __msg_ui_thread_sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
+static void __msg_ui_thread_del_finish(PMSG_THREAD_LIST_DATA pListData);
+static void __msg_ui_thread_del_thread_fn(void *data, Ecore_Thread *thread);
+static void __msg_ui_thread_del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data);
+static Eina_Bool __msg_ui_thread_searchbar_entry_timer_cb(void *data);
+
+static void __msg_ui_thread_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_thread_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_thread_addr_select_popup(PMSG_THREAD_LIST_DATA pListData, const char *title, int thread_id);
+void __msg_ui_thread_popup_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_thread_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_thread_popup_gl_del(void *data, Evas_Object *obj);
+static char *__msg_ui_thread_popup_gl_text_get(void *data, Evas_Object *obj, const char *part);
-static void _sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+void msg_ui_thread_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t type, msg_id_list_s *pMsgIdList, void *user_param)
{
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();
-}
+ int i = 0;
+ if (!user_param || !pMsgIdList)
+ return;
-static void __add_navi_edit_controlbar(PMSG_THREAD_DATA pData)
-{
- MSG_UI_ENTER();
+ PMSG_THREAD_DATA pData = user_param;
+ PMSG_THREAD_LIST_DATA pListData = NULL;
- if (!pData)
+ if (msg_ui_thread_get_app_state(pData) == MSG_UI_STATE_DESTROY)
return;
- int i;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "type is %d", type);
- for (i = 0; i < MSG_THREAD_CONTROLBAR_ITEM_NUM; i++) {
- if (pData->toolbar_item[i])
- elm_object_item_del(pData->toolbar_item[i]);
+ for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) {
+ if (pData->list_data[i] != NULL)
+ pListData = pData->list_data[i];
+ else
+ break;
+
+ if (type == MSG_STORAGE_CHANGE_CONTACT) {
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD)
+ msg_ui_thread_list_update(pListData);
+ else
+ msg_ui_thread_list_msg_list_update(pListData);
+ } else if (type == MSG_STORAGE_CHANGE_INSERT) {
+ if (pListData->view_mode == THREAD_EDIT_VIEW) {
+ pData->isIncomingMsg = true;
+ D_MSG("Current mode is EDIT.");
+ return;
+ }
+ __msg_ui_thread_insert_and_select_gen_item(pListData);
+ } else if (type == MSG_STORAGE_CHANGE_DELETE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete count is %d", pMsgIdList->nCount);
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) {
+ for (i = 0; i < pMsgIdList->nCount; i++) {
+ msg_ui_thread_list_msg_item_delete(pListData, pMsgIdList->msgIdList[i]);
+ }
+ }
+ } else if (type == MSG_STORAGE_CHANGE_UPDATE) {
+ for (i = 0; i < pMsgIdList->nCount; i++) {
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ msg_error_t err = MSG_SUCCESS;
+
+ err = msg_get_message(pData->msgHandle, pMsgIdList->msgIdList[i], msgInfo, sendOpt);
+
+ if (err != MSG_SUCCESS) {
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ msg_folder_id_t folder_id = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, (int *)&folder_id);
+
+ if (folder_id != MSG_SPAMBOX_ID) {
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
+ int thread_id = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+ msg_ui_thread_list_item_update(pListData, thread_id);
+ } else {
+ int msg_id = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msg_id);
+ msg_ui_thread_list_msg_item_update(pListData, msg_id);
+ }
+ }
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ }
+ }
}
- 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)
+static void __msg_ui_thread_insert_and_select_gen_item(PMSG_THREAD_LIST_DATA pListData)
{
- 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);
+ MSG_UI_ENTER();
- 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);
+ int sel_thread_id = 0, sel_msg_id = 0;
- 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"));
+ if (pListData->sel_gen_item) {
+ sel_thread_id = pListData->sel_thread_id;
+ sel_msg_id = pListData->sel_msg_id;
}
- 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);
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) {
+ msg_ui_thread_search_msg_list_load(pListData);
+ msg_ui_thread_select_item_by_msg_id(pListData, sel_msg_id);
+ } else {
+ msg_ui_thread_list_load(pListData, FALSE);
+ msg_ui_thread_select_item_by_thread_id(pListData, sel_thread_id);
+ }
+ MSG_UI_LEAVE();
}
-static void _del_finish(PMSG_THREAD_DATA ThreadData)
+ 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);
- if (ThreadData->popup) {
- evas_object_del(ThreadData->popup);
- ThreadData->popup = NULL;
- }
-
- ThreadData->del_thread = NULL;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pListData->del_thread);
- msg_ui_thread_show_normal_mode(ThreadData);
- msg_ui_thread_list_load(ThreadData);
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ }
+ pListData->popup = msg_ui_thread_show_notify_with_progressbar(pListData, pListData->check_cnt);
+ pListData->del_thread = ecore_thread_feedback_run(__msg_ui_thread_del_thread_fn, __msg_ui_thread_del_thread_feedback_fn, NULL, NULL, (void *)pListData, EINA_TRUE);
}
-static void _del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data)
+static void __msg_ui_thread_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;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_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);
+ if (pListData->progressbar) {
+ snprintf(buf, sizeof(buf), "%d/%d %s", pListData->del_index+1, pListData->check_cnt, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+ elm_object_text_set(pListData->progresslabel, buf);
+ elm_progressbar_value_set(pListData->progressbar, (double)(pListData->del_index+1)/pListData->check_cnt);
}
} else {
- msg_ui_thread_show_notify(ThreadData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
- _del_finish(ThreadData);
+
+ /** __msg_ui_thread_del_finish function contains evas_object_del(thread_data->popup), */
+ /** so, call __msg_ui_thread_del_finish() first, after that make "unable to delete" popup */
+ __msg_ui_thread_del_finish(pListData);
+ msg_ui_thread_show_notify(pListData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
return;
}
- if (ThreadData->del_index + 1 == ThreadData->check_cnt)
- _del_finish(ThreadData);
- else
- ThreadData->del_index++;
+ if (pListData->del_index + 1 == pListData->check_cnt) {
+ msg_ui_thread_show_deleted_info(pListData);
+ __msg_ui_thread_del_finish(pListData);
+ } else {
+ pListData->del_index++;
+ }
if (ret)
free(ret);
-
}
-static void _del_thread_fn(void *data, Ecore_Thread *thread)
+static void __msg_ui_thread_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;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Eina_List *list;
- Eina_List *l;
- PMSG_APP_THREAD_DATA_S item_data = NULL;
+ void* item_data = NULL;
- EINA_LIST_FOREACH(ThreadData->chk_list, l, item_data) {
+ EINA_LIST_FOREACH(pListData->chk_list, list, item_data) {
int *ret = calloc(1, sizeof(int));
if (item_data) {
- *ret = msg_delete_thread_message_list(ThreadData->msgHandle, item_data->threadId);
-
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) {
+ PMSG_APP_THREAD_DATA_S data = (PMSG_APP_THREAD_DATA_S)item_data;
+ *ret = msg_delete_thread_message_list(msg_ui_thread_get_data_handle(), data->thread_id);
+ } else {
+ PMSG_APP_THREAD_MSG_DATA_S data = (PMSG_APP_THREAD_MSG_DATA_S)item_data;
+ *ret = msg_delete_message(msg_ui_thread_get_data_handle(), data->msg_id);
+ }
ecore_thread_feedback(thread, (void *)ret);
if (*ret != MSG_SUCCESS)
@@ -157,136 +217,235 @@ static void _del_thread_fn(void *data, Ecore_Thread *thread)
return;
}
}
+}
+
+static void __msg_ui_thread_del_finish(PMSG_THREAD_LIST_DATA pListData)
+{
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ }
+
+ pListData->del_thread = NULL;
+ msg_ui_thread_show_normal_mode(pListData);
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE)
+ msg_ui_thread_list_load(pListData, FALSE);
+ else
+ msg_ui_thread_msg_list_load(pListData, pListData->list_type);
}
-static void _insert_and_select_gen_item(PMSG_THREAD_DATA ThreadData)
+void msg_ui_thread_ctlbar_checkbox_cb(void *data, Evas_Object *obj, void *event_info)
{
- int sel_thread_id = 0;
+ MSG_UI_ENTER();
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
- if (ThreadData->sel_gen_item)
- sel_thread_id = ThreadData->sel_thread_id;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Elm_Object_Item* it_sweep = NULL;
+ char buf[DEF_BUF_LEN_S] = {0};
+
+ pListData->view_mode = THREAD_EDIT_VIEW;
+ pListData->check_cnt = 0;
+ pListData->del_index = 0;
+
+ elm_object_item_part_content_unset(pListData->nf_it, "prev_btn");
+ if (pListData->back_btn) {
+ evas_object_del(pListData->back_btn);
+ pListData->back_btn = NULL;
+ }
+
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
- if (ThreadData->search_mode == THREAD_SEARCH_ON)
- _search_list_load(ThreadData);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ elm_genlist_item_update(it_sweep);
+ }
+
+ elm_genlist_decorate_mode_set(pListData->genlist, EINA_TRUE);
+ elm_genlist_select_mode_set(pListData->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+
+ if (pListData->list_type == THREAD_LOCKED_LIST_TYPE || pListData->list_type == THREAD_SIM_LIST_TYPE || pListData->list_type == THREAD_SCHEDULED_LIST_TYPE)
+ snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_SK_EDIT"));
else
- msg_ui_thread_list_load(ThreadData);
+ snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_SK_DELETE"));
+
+ elm_object_item_text_set(pListData->nf_it, buf);
- msg_ui_thread_select_item_by_thread_id(ThreadData, sel_thread_id);
+ msg_ui_thread_set_navi_controlbar_item(pListData);
+ __msg_ui_thread_add_navi_select_all_ly(pListData);
+ MSG_UI_LEAVE();
}
-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)
+static void __msg_ui_thread_add_navi_select_all_ly(PMSG_THREAD_LIST_DATA pListData)
{
- MSG_UI_ENTER();
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
- if (!user_param || !pMsgIdList)
+ if (!pListData) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT,"[ASSERT] pListData is NULL");
return;
+ }
- PMSG_THREAD_DATA ThreadData = user_param;
- if (msg_ui_thread_get_app_state(ThreadData) == MSG_UI_STATE_DESTROY)
- return;
+ if (!pListData->sel_all_ly) {
+ pListData->sel_all_ly = elm_layout_add(pData->navi_frame);
+ elm_layout_theme_set(pListData->sel_all_ly, "genlist", "item", "select_all/default");
+ evas_object_size_hint_weight_set(pListData->sel_all_ly, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+ evas_object_size_hint_align_set(pListData->sel_all_ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_event_callback_add(pListData->sel_all_ly, EVAS_CALLBACK_MOUSE_DOWN, __msg_ui_thread_sel_all_ly_mouse_down_cb, pListData);
+
+ pListData->sel_all_box = elm_check_add(pListData->sel_all_ly);
+ elm_check_state_pointer_set(pListData->sel_all_box, &pListData->sel_all_checked);
+ evas_object_propagate_events_set(pListData->sel_all_box, EINA_FALSE);
+ evas_object_smart_callback_add(pListData->sel_all_box, "changed", msg_ui_thread_sel_all_clicked_cb, pListData);
+ evas_object_show(pListData->sel_all_box);
+
+ elm_object_part_content_set(pListData->sel_all_ly, "elm.icon", pListData->sel_all_box);
+ elm_object_part_text_set(pListData->sel_all_ly, "elm.text", dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
+ }
- 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;
+ evas_object_show(pListData->sel_all_ly);
+ elm_object_part_content_unset(pListData->content_ly, "sel_all");
+ evas_object_hide(pListData->searchbar);
+ elm_object_part_content_set(pListData->content_ly, "sel_all", pListData->sel_all_ly);
+}
- 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;
+static void __msg_ui_thread_sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER();
- err = msg_get_message(ThreadData->msgHandle, pMsgIdList->msgIdList[i], msg, &sendOpt);
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
- if (err != MSG_SUCCESS) {
- msg_release_message(&msg);
- return;
- }
+ pListData->sel_all_checked = !pListData->sel_all_checked;
+ elm_check_state_pointer_set(pListData->sel_all_box, &pListData->sel_all_checked);
- msg_ui_thread_list_item_update(ThreadData, msg_get_ith_thread_id(msg, 0));
+ msg_ui_thread_sel_all_clicked_cb(pListData, NULL, NULL);
- msg_release_message(&msg);
- }
+ MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_ctlbar_spam_setting_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Elm_Object_Item* it_sweep = NULL;
+
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
}
- MSG_UI_LEAVE();
+ msg_ui_thread_launch_spam_setting(pListData);
}
-void msg_ui_thread_ctlbar_del_cb(void *data, Evas_Object *obj, void *event_info)
+void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info)
{
- D_ENTER;
+ MSG_UI_ENTER();
MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
-
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Elm_Object_Item* it_sweep = NULL;
+ service_h svc_handle = NULL;
- MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pData->del_thread);
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ return;
+ }
- if (pData->popup) {
- evas_object_del(pData->popup);
- pData->popup = NULL;
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
}
- pData->popup = msg_ui_thread_show_notify_with_progressbar(pData, pData->check_cnt);
+ if (msg_ui_load_composer_ug(svc_handle) == MSG_UI_RET_ERR)
+ D_MSG("Failed to load composer ug");
- pData->del_thread = ecore_thread_feedback_run(_del_thread_fn, _del_thread_feedback_fn, NULL, NULL, (void *)pData, EINA_TRUE);
+ service_destroy(svc_handle);
+ MSG_UI_LEAVE();
}
-void msg_ui_thread_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info)
+void msg_ui_thread_ctlbar_message_box_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;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Elm_Object_Item* it_sweep = NULL;
- char buf[DEF_BUF_LEN_S] = {0};
- pData->viewmode = THREAD_EDIT_VIEW;
- pData->check_cnt = 0;
- pData->del_index = 0;
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ }
+
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+
+ // Create pop-up ( Spam / SIM (it will be extended) )
+ Evas_Object *ctx_popup = NULL;
+ ctx_popup = elm_ctxpopup_add(pListData->content_ly);
+ evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_thread_ctxpopup_dismissed_cb, pListData);
- elm_genlist_decorate_mode_set(pData->genlist, EINA_TRUE);
- elm_genlist_select_mode_set(pData->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"), NULL, __msg_ui_thread_ctxpopup_clicked_cb, pListData);
+ elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES"), NULL, __msg_ui_thread_ctxpopup_clicked_cb, pListData);
+ elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"), NULL, __msg_ui_thread_ctxpopup_clicked_cb, pListData);
- 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);
+ // move ctx popup
+ Evas_Coord x, y, w, h;
+ evas_object_geometry_get(pListData->toolbar, &x, &y, &w, &h);
+ evas_object_move(ctx_popup, ((w-x)*5)/6 , y);
+ evas_object_show(ctx_popup);
- __add_navi_edit_controlbar(pData);
- __add_navi_select_all_ly(pData);
+ pListData->popup = ctx_popup;
- 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();
+}
+
+static void __msg_ui_thread_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER();
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
}
MSG_UI_LEAVE();
}
-void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info)
+static void __msg_ui_thread_ctxpopup_clicked_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();
+ ThreadMsgListType list_type = THREAD_NORMAL_LIST_TYPE;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
- if (!b)
- return;
+ const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info);
- if (msg_ui_load_composer_ug(b) == MSG_UI_RET_ERR)
- D_MSG("Failed to load composer ug");
+ if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES")) == 0) {
+ list_type = THREAD_SPAM_LIST_TYPE;
+ } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES")) == 0) {
+ list_type = THREAD_SIM_LIST_TYPE;
+ } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES")) == 0) {
+ list_type = THREAD_CBMSG_LIST_TYPE;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ERROR] invalid list type");
+ return;
+ }
- bundle_free(b);
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ }
+ msg_ui_thread_load_message_box(list_type);
MSG_UI_LEAVE();
}
@@ -295,15 +454,18 @@ void msg_ui_thread_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_in
MSG_UI_ENTER();
MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
if (pData->isIncomingMsg == true) {
- msg_ui_thread_list_load(pData);
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG)
+ msg_ui_thread_msg_list_load(pListData, pListData->list_type);
+ else
+ msg_ui_thread_list_load(pListData, FALSE);
pData->isIncomingMsg = false;
}
- msg_ui_thread_show_normal_mode(pData);
-
+ msg_ui_thread_show_normal_mode(pListData);
MSG_UI_LEAVE();
}
@@ -311,33 +473,45 @@ void msg_ui_thread_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_
{
MSG_UI_ENTER();
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
- PMSG_APP_THREAD_DATA_S item_data = NULL;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
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);
+ void* item_data = NULL;
+
+ if (pListData->sel_all_checked) {
+ pListData->check_cnt = pListData->item_cnt;
+ } else {
+ pListData->check_cnt = 0;
+ pListData->chk_list = eina_list_free(pListData->chk_list);
}
- it = elm_genlist_first_item_get(pData->genlist);
+ it = elm_genlist_first_item_get(pListData->genlist);
while (it) {
+ if (elm_genlist_item_parent_get(it) == NULL) {
+ it = elm_genlist_item_next_get(it);
+ continue;
+ }
+
item_data = elm_object_item_data_get(it);
- if (item_data)
- item_data->isCheck = pData->sel_all_checked;
+ if (item_data) {
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
+ PMSG_APP_THREAD_DATA_S data = (PMSG_APP_THREAD_DATA_S)item_data;
+ data->is_check = pListData->sel_all_checked;
+ } else {
+ PMSG_APP_THREAD_MSG_DATA_S data = (PMSG_APP_THREAD_MSG_DATA_S)item_data;
+ data->is_check = pListData->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);
+ if (pListData->sel_all_checked && !eina_list_data_find(pListData->chk_list, item_data))
+ pListData->chk_list = eina_list_append(pListData->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);
+ elm_genlist_realized_items_update(pListData->genlist);
+ msg_ui_thread_show_select_info(pListData);
MSG_UI_LEAVE();
}
@@ -346,27 +520,35 @@ void msg_ui_thread_list_checked_cb(void *data, Evas_Object *obj, void *event_inf
{
MSG_UI_ENTER();
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
- PMSG_APP_THREAD_DATA_S item_data = NULL;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ void* item_data = NULL;
+ Eina_Bool is_check = EINA_FALSE;
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);
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
+ PMSG_APP_THREAD_DATA_S data = (PMSG_APP_THREAD_DATA_S)item_data;
+ is_check = data->is_check;
} else {
- pData->check_cnt--;
- pData->chk_list = eina_list_remove(pData->chk_list, item_data);
+ PMSG_APP_THREAD_MSG_DATA_S data = (PMSG_APP_THREAD_MSG_DATA_S)item_data;
+ is_check = data->is_check;
}
- 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);
+ if (is_check) {
+ pListData->check_cnt++;
+ if (!eina_list_data_find(pListData->chk_list, item_data))
+ pListData->chk_list = eina_list_append(pListData->chk_list, item_data);
+ } else {
+ pListData->check_cnt--;
+ pListData->chk_list = eina_list_remove(pListData->chk_list, item_data);
+ }
- msg_ui_thread_show_select_info(pData);
+ if (pListData->item_cnt == pListData->check_cnt)
+ elm_check_state_set(pListData->sel_all_box, EINA_TRUE);
+ else
+ elm_check_state_set(pListData->sel_all_box, EINA_FALSE);
+ msg_ui_thread_show_select_info(pListData);
MSG_UI_LEAVE();
}
@@ -377,192 +559,383 @@ void msg_ui_thread_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event
if (!data)
return;
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) {
+ elm_win_lower(pData->win_main);
+ } else {
+ PMSG_THREAD_LIST_DATA pPrevList = msg_ui_thread_get_prev_list(pListData);
- elm_win_lower(pData->win_main);
+ msg_ui_thread_set_navi_controlbar_item(pPrevList);
+ elm_naviframe_item_pop(pData->navi_frame);
+ elm_genlist_clear(pListData->genlist);
+ msg_ui_thread_destroy_thread_list_data(pListData);
+ }
MSG_UI_LEAVE();
}
-static Eina_Bool _search_list_load(void *data)
+void msg_ui_thread_searchbar_entry_focus_cb(void *data, Evas_Object *obj, void *event_info)
{
- MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !data, EINA_FALSE);
+ D_ENTER;
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !data, "[ASSERT] data is NULL");
- Evas_Object *entry = NULL;
- char *search_str = NULL;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Elm_Object_Item* it_sweep = 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;
+ pListData->search_mode = THREAD_SEARCH_ON;
+ elm_genlist_mode_set(pListData->genlist, ELM_LIST_COMPRESS);
- 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));
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
}
- MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str);
+ if (!elm_entry_is_empty(obj))
+ elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,show", "elm");
- err = msg_search_message_for_thread_view(pData->msgHandle, search_str, &search_list);
+ elm_object_signal_emit(pListData->searchbar, "elm,state,guidetext,hide", "elm");
+ elm_object_signal_emit(pListData->searchbar, "cancel,in", "");
- if (search_str)
- free(search_str);
+ evas_object_smart_callback_add(obj, "changed", msg_ui_thread_searchbar_entry_change_cb, pListData);
+ evas_object_smart_callback_add(obj, "preedit,changed", msg_ui_thread_searchbar_entry_change_cb, pListData);
+ D_LEAVE;
+}
- if (err != MSG_SUCCESS) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_search_message failed!!");
- msg_ui_thread_list_load(pData);
- return EINA_FALSE;
- }
+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;
- MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search result [ count = %d ] ", search_list.nCount);
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
- Evas_Object *swl_ly = elm_object_part_content_get(pData->content_ly, "thread_list");
+ elm_object_signal_emit(pListData->searchbar, "cancel,out", "");
+ elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,hide", "elm");
- 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 (elm_entry_is_empty(obj)) {
+ elm_object_signal_emit(pListData->searchbar, "elm,state,guidetext,show", "elm");
+ pListData->search_mode = THREAD_SEARCH_OFF;
+ elm_genlist_mode_set(pListData->genlist, ELM_LIST_SCROLL);
}
+ D_LEAVE;
+}
- if (search_list.nCount > 0) {
- elm_genlist_clear(pData->genlist);
+void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
- 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]);
+ if (!data)
+ return;
- 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);
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
- elm_genlist_item_append(pData->genlist, &pData->itc_empty, NULL, \
- NULL, ELM_GENLIST_ITEM_NONE, \
- msg_ui_thread_gl_empty_sel, NULL);
+ /* Make timer for check user's input */
+ if (pListData->search_timer) {
+ ecore_timer_del(pListData->search_timer);
+ pListData->search_timer = NULL;
}
- msg_release_thread_view_list(&search_list);
+ pListData->search_timer = ecore_timer_add(0.2, __msg_ui_thread_searchbar_entry_timer_cb, pListData);
- return EINA_FALSE;
+ if (elm_object_focus_get(obj)) {
+ if (elm_entry_is_empty(obj))
+ elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,hide", "elm");
+ else
+ elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,show", "elm");
+ }
+ D_LEAVE;
}
-void msg_ui_thread_searchbar_entry_focus_cb(void *data, Evas_Object *obj, void *event_info)
+static Eina_Bool __msg_ui_thread_searchbar_entry_timer_cb(void *data)
+{
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+
+ msg_ui_thread_search_msg_list_load(pListData);
+ pListData->search_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void msg_ui_thread_searchbar_cancel_click_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 (!data)
+ return;
- if (!elm_entry_is_empty(obj))
- elm_object_signal_emit(pData->searchbar, "elm,state,eraser,show", "elm");
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Evas_Object *entry = NULL;
- elm_object_signal_emit(pData->searchbar, "elm,state,guidetext,hide", "elm");
- elm_object_signal_emit(pData->searchbar, "cancel,in", "");
+ pListData->search_mode = THREAD_SEARCH_OFF;
+ elm_genlist_mode_set(pListData->genlist, ELM_LIST_SCROLL);
- evas_object_smart_callback_add(obj, "changed", msg_ui_thread_searchbar_entry_change_cb, data);
+ if (pListData->search_timer) {
+ ecore_timer_del(pListData->search_timer);
+ pListData->search_timer = NULL;
+ }
+
+ entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content");
+ elm_object_text_set(entry, "");
+
+ elm_object_focus_set(pListData->back_btn, EINA_TRUE);
+ evas_object_hide(obj);
+ elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", "");
+
+ if (pListData->list_type== THREAD_NORMAL_LIST_TYPE)
+ msg_ui_thread_list_load(pListData, FALSE);
+ else
+ msg_ui_thread_msg_list_load(pListData, pListData->list_type);
D_LEAVE;
}
-void msg_ui_thread_searchbar_entry_unfocus_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)
{
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");
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Evas_Object *entry = NULL;
- if (elm_entry_is_empty(obj)) {
- elm_object_signal_emit(pData->searchbar, "elm,state,guidetext,show", "elm");
- pData->search_mode = THREAD_SEARCH_OFF;
+ if (pListData->search_timer) {
+ ecore_timer_del(pListData->search_timer);
+ pListData->search_timer = NULL;
}
+ entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content");
+ elm_object_text_set(entry, "");
+
+ elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,hide", "elm");
+
D_LEAVE;
}
-void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void *event_info)
+void msg_ui_thread_sweep_btn_cb(void *data, Evas_Object *obj, void *event_info)
{
- D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !obj || !data);
- if (!data)
+ PMSG_THREAD_LIST_DATA pListData = data;
+ char address[DEF_THREAD_ADDR_LEN+1] = {0,};
+ Elm_Object_Item *it = NULL;
+
+ const char *label = elm_object_text_get(obj);
+
+ if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_SK_DELETE")) == 0) {
+ msg_ui_thread_show_del_popup(pListData, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DELETE_Q"));
return;
+ } else {
+ PMSG_APP_THREAD_DATA_S sel_peer_item = NULL;
+ sel_peer_item = (PMSG_APP_THREAD_DATA_S)evas_object_data_get(obj, "sel_peer_data");
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ msg_struct_list_s addrList;
- 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");
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_address_list(msg_ui_thread_get_data_handle(), sel_peer_item->thread_id, &addrList);
+
+ if (addrList.nCount == 1) {
+ char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,};
+
+ msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN);
+ strncpy(address, strNumber, DEF_THREAD_ADDR_LEN);
+
+ if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0)
+ msg_ui_thread_launch_voice_call(address);
+ else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0)
+ msg_ui_thread_launch_video_call(address);
+
+ } else if (addrList.nCount > 1) {
+ __msg_ui_thread_addr_select_popup(pListData, label, sel_peer_item->thread_id);
+ }
+
+ msg_release_list_struct(&addrList);
}
- _search_list_load(data);
+ it = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
- D_LEAVE;
+ if (it) {
+ elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
}
-void msg_ui_thread_searchbar_cancel_click_cb(void *data, Evas_Object *obj, void *event_info)
+static void __msg_ui_thread_addr_select_popup(PMSG_THREAD_LIST_DATA pListData, const char *title, int thread_id)
{
- D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pListData || !title);
+
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ Evas_Object *popup = NULL;
+ Evas_Object *genlist = NULL;
+ int i = 0;
+ msg_struct_list_s addrList;
+
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_address_list(pData->msgHandle, thread_id, &addrList);
+
+ /** create popup */
+ popup = elm_popup_add(pData->win_main);
+ if (!popup) {
+ D_EMSG("elm_popup_add returns NULL");
+ msg_release_list_struct(&addrList);
+ return;
+ }
- if (!data)
+ elm_object_style_set(popup, "menustyle");
+
+ /** create menu genlist */
+ genlist = elm_genlist_add(popup);
+ if (!genlist) {
+ D_EMSG("elm_genlist_add failed");
+ msg_release_list_struct(&addrList);
return;
+ }
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
- pData->search_mode = THREAD_SEARCH_OFF;
+ evas_object_data_set(genlist, "title", title);
+ memset(&pData->itc_popup, 0x00, sizeof(Elm_Genlist_Item_Class));
- Evas_Object *entry = NULL;
- entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content");
- elm_object_text_set(entry, "");
+ pData->itc_popup.item_style = "1text";
+ pData->itc_popup.func.text_get = __msg_ui_thread_popup_gl_text_get;
+ pData->itc_popup.func.content_get = NULL;
+ pData->itc_popup.func.state_get = NULL;
+ pData->itc_popup.func.del = __msg_ui_thread_popup_gl_del;
- evas_object_hide(obj);
+ /** append addresses to genlist */
+ for (i=0; i<addrList.nCount; i++) {
+ int contact_id = 0;
+ char strNumber[MAX_ADDRESS_VAL_LEN + 1] = {0,};
+ char strName[MAX_DISPLAY_NAME_LEN + 1] = {0,};
+ msg_struct_t addrInfo = msg_create_struct(MSG_STRUCT_ADDRESS_INFO);
- elm_object_focus_set(pData->back_btn, EINA_TRUE);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, MAX_ADDRESS_VAL_LEN);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, MAX_DISPLAY_NAME_LEN);
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
- msg_ui_thread_list_load(pData);
+ msg_set_int_value(addrInfo, MSG_ADDRESS_INFO_CONTACT_ID_INT, contact_id);
+ msg_set_str_value(addrInfo, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, MAX_ADDRESS_VAL_LEN);
+ msg_set_str_value(addrInfo, MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, MAX_DISPLAY_NAME_LEN);
- D_LEAVE;
+ elm_genlist_item_append(genlist, &pData->itc_popup, addrInfo, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_popup_gl_sel, pListData);
+ }
+
+ msg_release_list_struct(&addrList);
+
+ elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSG_HEADER_SELECT_RECIPIENT"));
+ elm_object_content_set(popup, genlist);
+
+ /** close button */
+ Evas_Object * btn1 = elm_button_add(popup);
+ elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
+ evas_object_smart_callback_add(btn1, "clicked", __msg_ui_thread_close_clicked_cb, pListData);
+
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_show(genlist);
+ evas_object_show(popup);
+
+ pListData->popup = popup;
}
-void msg_ui_thread_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+static char *__msg_ui_thread_popup_gl_text_get(void *data, Evas_Object *obj, const char *part)
{
D_ENTER;
+ msg_struct_t addr_info = (msg_struct_t)data;
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, NULL);
- if (!data)
- return;
+ char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,};
+ char strName[DEF_THREAD_NAME_LEN + 1] = {0,};
+ int contact_id = 0;
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN);
+ msg_get_str_value(addr_info, MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, DEF_THREAD_NAME_LEN);
+ msg_get_int_value(addr_info, MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
- Evas_Object *entry = NULL;
- entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content");
- elm_object_text_set(entry, "");
+ if (contact_id > 0 && strlen(strName) > 0) {
+ return strdup(strName);
+ } else {
+ if (strlen(strNumber) > 0)
+ return strdup(strNumber);
+ else
+ return strdup(dgettext("sys_string","IDS_COM_BODY_UNKNOWN"));
+ }
+}
- elm_object_signal_emit(pData->searchbar, "elm,state,eraser,hide", "elm");
+static void __msg_ui_thread_popup_gl_del(void *data, Evas_Object *obj)
+{
+ msg_struct_t del_data = (msg_struct_t)data;
- D_LEAVE;
+ if (del_data) {
+ msg_release_struct(&del_data);
+ del_data = NULL;
+ }
+}
+
+static void __msg_ui_thread_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ memset(&pData->itc_popup, 0x00, sizeof(Elm_Genlist_Item_Class));
+ }
+}
+
+void __msg_ui_thread_popup_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj || !event_info);
+
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ msg_struct_t addr_info = (msg_struct_t)elm_object_item_data_get(item);
+ char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,};
+
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ memset(&pData->itc_popup, 0x00, sizeof(Elm_Genlist_Item_Class));
+ }
+
+ char *title = (char *)evas_object_data_get(obj, "title");
+ if (!title) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] title is NULL");
+ return;
+ }
+
+ msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN);
+
+ if (strncmp(title, dgettext("sys_string", "IDS_COM_BODY_CALL"), strlen(title)) == 0)
+ msg_ui_thread_launch_voice_call(strNumber);
+ else if (strncmp(title, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), strlen(title)) == 0)
+ msg_ui_thread_launch_video_call(strNumber);
+ else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid title");
}
void msg_ui_thread_timezone_change_cb(void *data)
{
D_ENTER;
- PMSG_THREAD_DATA ThreadData = (PMSG_THREAD_DATA)data;
+ PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ PMSG_THREAD_LIST_DATA pListData = NULL;
char *timezone_id = NULL;
UChar utimezone_id[DEF_BUF_LEN] = {0,};
UErrorCode status = U_ZERO_ERROR;
+ int i = 0;
timezone_id = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
@@ -576,14 +949,58 @@ void msg_ui_thread_timezone_change_cb(void *data)
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);
+ msg_ui_thread_get_locale(pData);
+ msg_ui_thread_get_time_format(pData);
+ pData->time_12h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_12H);
+ pData->time_24h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_24H);
+ pData->date_ptn = msg_common_get_date_best_pattern(pData->locale, UDAT_YEAR_NUM_MONTH_DAY);
+
- elm_genlist_realized_items_update(ThreadData->genlist);
+ for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) {
+ if (pData->list_data[i] != NULL) {
+ pListData = pData->list_data[i];
+ elm_genlist_realized_items_update(pListData->genlist);
+ }
+ }
D_LEAVE;
}
+void msg_ui_thread_gl_mode_right(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER();
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !data || !event_info);
+
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pListData->view_mode != THREAD_NORMAL_VIEW);
+
+ Elm_Object_Item *it = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj);
+ if (it)
+ elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
+
+ if (pListData->search_mode == THREAD_SEARCH_OFF) {
+ elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_TRUE);
+ elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_NONE);
+ }
+
+ MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_gl_mode_left(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER();
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !data || !event_info);
+
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pListData->view_mode != THREAD_NORMAL_VIEW);
+
+ if (pListData->search_mode == THREAD_SEARCH_OFF) {
+ elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+
+ MSG_UI_LEAVE();
+}
+
diff --git a/thread/src/msg-ui-thread-list.c b/thread/src/msg-ui-thread-list.c
index ccaf24d..c904821 100755
--- a/thread/src/msg-ui-thread-list.c
+++ b/thread/src/msg-ui-thread-list.c
@@ -14,182 +14,293 @@
* limitations under the License.
*/
+#include "msg-ui-image-resource.h"
#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);
+static int __msg_ui_thread_init_genlist(PMSG_THREAD_LIST_DATA pListData);
+static char *__msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_thread_gl_del(void *data, Evas_Object *obj);
+static void __msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info);
+Eina_Bool __msg_ui_thread_msg_list_load_remain_item(void *data);
-int msg_ui_thread_init_genlist(PMSG_THREAD_DATA ThreadData)
+
+static int __msg_ui_thread_init_genlist(PMSG_THREAD_LIST_DATA pListData)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- if (ThreadData->genlist)
- elm_genlist_clear(ThreadData->genlist);
+ if (pListData->genlist)
+ elm_genlist_clear(pListData->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)
+void msg_ui_thread_set_thread_data(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_DATA_S thread_data, msg_struct_t msgThreadInfo)
{
if (thread_data == NULL || msgThreadInfo == NULL)
return;
- thread_data->threadId = msg_thread_view_get_thread_id(msgThreadInfo);
+ int thread_id = 0, unreadCnt = 0, msgType = 0, direction = 0, smsCnt = 0, mmsCnt = 0;
+ char name[DEF_THREAD_NAME_LEN+1] = {0,};
+ char threadData[DEF_BUF_LEN_S+1] = {0,};
- bzero(thread_data->threadAddr, sizeof(thread_data->threadAddr));
- strncpy(thread_data->threadAddr, msg_thread_view_get_address(msgThreadInfo), DEF_THREAD_ADDR_LEN);
+ msg_get_int_value(msgThreadInfo, MSG_THREAD_ID_INT, &thread_id);
+ thread_data->thread_id = thread_id;
- bzero(thread_data->threadName, sizeof(thread_data->threadName));
- strncpy(thread_data->threadName, msg_thread_view_get_name(msgThreadInfo), DEF_THREAD_NAME_LEN);
+ msg_get_str_value(msgThreadInfo, MSG_THREAD_NAME_STR, name, DEF_THREAD_NAME_LEN);
+ bzero(thread_data->thread_name, sizeof(thread_data->thread_name));
+ strncpy(thread_data->thread_name, name, 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);
+ msg_get_str_value(msgThreadInfo, MSG_THREAD_MSG_DATA_STR, threadData, DEF_BUF_LEN_S);
+ bzero(thread_data->thread_data, sizeof(thread_data->thread_data));
+ strncpy(thread_data->thread_data, threadData, DEF_BUF_LEN_S);
- if (thread_data->threadTime == NULL)
- thread_data->threadTime = (time_t *) calloc(1, sizeof(time_t));
+ if (thread_data->thread_time == NULL)
+ thread_data->thread_time = (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));
+ if (thread_data->thread_time) {
+ int msgTime = 0;
+ msg_get_int_value(msgThreadInfo, MSG_THREAD_MSG_TIME_INT, &msgTime);
+ bzero(thread_data->thread_time, sizeof(time_t));
+ memcpy(thread_data->thread_time, &msgTime, 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);
+ msg_get_int_value(msgThreadInfo, MSG_THREAD_MSG_TYPE_INT, &msgType);
+ thread_data->msg_type = msgType;
+ msg_get_int_value(msgThreadInfo, MSG_THREAD_MMS_COUNT_INT, &mmsCnt);
+ thread_data->mms_cnt = mmsCnt;
+ msg_get_int_value(msgThreadInfo, MSG_THREAD_SMS_COUNT_INT, &smsCnt);
+ thread_data->sms_cnt = smsCnt;
+ msg_get_int_value(msgThreadInfo, MSG_THREAD_DIRECTION_INT, &direction);
+ thread_data->direction = direction;
+
+ if (pListData && pListData->sel_thread_id == thread_data->thread_id) {
+ thread_data->unread_cnt = 0;
+ } else {
+ msg_get_int_value(msgThreadInfo, MSG_THREAD_UNREAD_COUNT_INT, &unreadCnt);
+ thread_data->unread_cnt = unreadCnt;
+ }
+}
- PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_MSG_DATA_S msg_data, msg_struct_t msgInfo)
+{
+ if (msg_data == NULL || msgInfo == NULL)
+ return;
+
+ int msgId = 0;
+ int msgType = 0;
+ bool read_status = 0;
+ msg_struct_list_s *addr_list = NULL;
+ char strNumber[DEF_THREAD_ADDR_LEN+1] = {0,};
+ char strName[DEF_THREAD_NAME_LEN+1] = {0,};
+ int contact_id = 0;
+
+ /* msg_id */
+ msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId);
+ msg_data->msg_id = msgId;
+ /* msg_type */
+ msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msgType);
+ msg_data->msg_type = msgType;
+ /* read status */
+ msg_get_bool_value(msgInfo, MSG_MESSAGE_READ_BOOL, &read_status);
+ msg_data->is_read = read_status;
+
+ /* contact ID, display name */
+ msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
+ msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN);
+ msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, DEF_THREAD_NAME_LEN);
+ msg_get_int_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
+
+ msg_data->contact_id = contact_id;
+
+ if (strlen(strName) > 0)
+ strncpy(msg_data->display_name, strName, sizeof(msg_data->display_name) -1);
+ else
+ strncpy(msg_data->display_name, "", sizeof(msg_data->display_name)-1);
- if (pData && pData->sel_thread_id == thread_data->threadId)
- thread_data->unreadCnt = 0;
+ if (strlen(strNumber) > 0)
+ strncpy(msg_data->address, strNumber, sizeof(msg_data->address)-1);
else
- thread_data->unreadCnt = msg_thread_view_get_unread_cnt(msgThreadInfo);
+ strncpy(msg_data->address, "", sizeof(msg_data->address)-1);
+
+ /*body*/
+ const char *pContent = NULL;
+ int msgSize = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize);
+ char msgText[msgSize + 1];
+ char subject[DEF_BUF_LEN_S+1] = {0,};
+ memset(msgText, 0, msgSize + 1);
+
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, msgText, msgSize);
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, subject, DEF_BUF_LEN_S);
+
+ if (msg_data->msg_type == MSG_TYPE_MMS_NOTI)
+ pContent = subject;
+ else
+ pContent = msgText;
+
+ if (strlen(pContent) > 0)
+ strncpy(msg_data->msg_body, pContent, sizeof(msg_data->msg_body)-1);
+ else
+ strncpy(msg_data->msg_body, "", sizeof(msg_data->msg_body)-1);
+
+ msg_data->msg_time = (time_t *)calloc(1, sizeof(time_t));
+ if (msg_data->msg_time != NULL) {
+ int msgTime = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &msgTime);
+ memcpy(msg_data->msg_time, &msgTime, sizeof(time_t));
+ }
}
-char *msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part)
+static 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);
+ char buf[DEF_BUF_LEN] = { 0, };
- 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, };
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL);
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"));
- }
+ if (item_data->thread_name[0] != '\0')
+ snprintf(buf, sizeof(buf), "%s", item_data->thread_name);
+ else
+ snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
} else if (g_strcmp0(part, "elm.text.2") == 0) {
+ msg_ui_thread_make_time_string(item_data->thread_time, buf, sizeof(buf));
+ } else if (g_strcmp0(part, "elm.text.3") == 0) {
int idx = 0;
char msg[DEF_BUF_LEN] = { 0, };
- if (item_data->threadData[0] != '\0') {
- strncpy(msg, item_data->threadData, sizeof(msg) - 1);
+ if (item_data->thread_data[0] != '\0') {
+ strncpy(msg, item_data->thread_data, 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 (item_data->msg_type >= MSG_TYPE_MMS && item_data->msg_type <= MSG_TYPE_MMS_NOTI)
+ snprintf(buf, sizeof(buf), "(%s)", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_NO_SUBJECT"));
}
-
- 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 if (g_strcmp0(part, "elm.text.4") == 0) {
+ if (item_data->unread_cnt > 0) {
+ if (item_data->unread_cnt > 999)
+ snprintf(buf, sizeof(buf), "...");
else
- snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
+ snprintf(buf, sizeof(buf), "%d", item_data->unread_cnt);
} 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"));
+ msg_struct_list_s draft_list;
+ msg_get_message_list(msg_ui_thread_get_data_handle(), MSG_DRAFT_ID, item_data->thread_id, 0, MSG_STORAGE_PHONE, &draft_list);
+
+ if (draft_list.nCount > 0)
+ snprintf(buf, sizeof(buf), "%s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_DRAFT_ABB"));
+
+ msg_release_list_struct(&draft_list);
}
}
return strdup(buf);
}
-Evas_Object *msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part)
+static 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);
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !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);
+ pListData = msg_ui_thread_get_current_list();
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pListData, NULL);
+
+ if (g_strcmp0(part, "elm.icon.1") == 0) {
+ if (item_data->msg_type == MSG_TYPE_SMS_CB) {
+ ic = elm_icon_add(obj);
+ elm_icon_file_set(ic, MSG_UI_THREAD_LIST_CB_ICON, NULL);
+ } else if (item_data->msg_type == MSG_TYPE_SMS_WAPPUSH) {
+ ic = elm_icon_add(obj);
+ elm_icon_file_set(ic, MSG_UI_THREAD_LIST_PUSH_ICON, NULL);
+ } else if (item_data->msg_type == MSG_TYPE_SMS_SYNCML) {
+ ic = elm_icon_add(obj);
+ elm_icon_file_set(ic, MSG_UI_THREAD_LIST_OTA_ICON, NULL);
+ }
+
+ if (ic) {
+ evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ evas_object_show(ic);
+ }
+ } else if (g_strcmp0(part, "elm.slide.swallow.1") == 0) {
+ int i = 0;
+ bool bNumExist = false;
+
+ ic = elm_button_add(obj);
+ elm_object_style_set(ic, "text_only/sweep");
+ elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_BODY_CALL"));
+ evas_object_data_set(ic, "sel_peer_data", (void *) item_data);
+ evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData);
+
+ msg_struct_list_s addrList;
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_address_list(msg_ui_thread_get_data_handle(), item_data->thread_id, &addrList);
+
+ for (i=0; i<addrList.nCount; i++) {
+ int addressType = 0;
+
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, &addressType);
+ if (addressType == MSG_ADDRESS_TYPE_PLMN) {
+ bNumExist = true;
+ break;
+ }
}
+
+ msg_release_list_struct(&addrList);
+
+ if (bNumExist == false)
+ elm_object_disabled_set(ic, EINA_TRUE);
+ } else if (g_strcmp0(part, "elm.slide.swallow.2") == 0) {
+ int i = 0;
+ bool bNumExist = false;
+
+ ic = elm_button_add(obj);
+ elm_object_style_set(ic, "text_only/sweep");
+ elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_SK_VIDEO_CALL"));
+ evas_object_data_set(ic, "sel_peer_data", (void *) item_data);
+ evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData);
+
+ msg_struct_list_s addrList;
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_address_list(msg_ui_thread_get_data_handle(), item_data->thread_id, &addrList);
+
+ for (i=0; i<addrList.nCount; i++) {
+ int addressType = 0;
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, &addressType);
+ if (addressType == MSG_ADDRESS_TYPE_PLMN) {
+ bNumExist = true;
+ break;
+ }
+ }
+
+ msg_release_list_struct(&addrList);
+
+ if (bNumExist == false)
+ elm_object_disabled_set(ic, EINA_TRUE);
+ } else if (g_strcmp0(part, "elm.slide.swallow.3") == 0) {
+ ic = elm_button_add(obj);
+ elm_object_style_set(ic, "sweep/delete");
+ elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_SK_DELETE"));
+ evas_object_data_set(ic, "sel_peer_data", (void *) item_data);
+ evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData);
}
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);
+ elm_check_state_pointer_set(ic, &item_data->is_check);
evas_object_data_set(ic, "item_data", item_data);
- evas_object_smart_callback_add(ic, "changed", msg_ui_thread_list_checked_cb, pData);
+ evas_object_smart_callback_add(ic, "changed", msg_ui_thread_list_checked_cb, pListData);
item_data->chk = ic;
}
}
@@ -197,71 +308,349 @@ Evas_Object *msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const ch
return ic;
}
-void msg_ui_thread_gl_del(void *data, Evas_Object *obj)
+static 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;
+ if (del_data->thread_time) {
+ free(del_data->thread_time);
+ del_data->thread_time = NULL;
}
free(del_data);
del_data = NULL;
}
}
-char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part)
+static void __msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info)
{
- char buf[DEF_BUF_LEN] = { '0', };
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA) data;
+ Elm_Object_Item *item = NULL;
+ Elm_Object_Item* it_sweep = NULL;
+ PMSG_APP_THREAD_DATA_S item_data = NULL;
+ service_h svc_handle = NULL;
- PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ 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");
- 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"));
+ 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, pListData->sel_thread_id == item_data->thread_id, "Already selected item.");
+
+ elm_genlist_item_selected_set(item, 0);
+
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+
+ switch (pListData->view_mode) {
+ case THREAD_NORMAL_VIEW:
+ case THREAD_UNLOAD_VIEW:
+ pListData->sel_gen_item = item;
+ pListData->sel_thread_id = item_data->thread_id;
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ msg_ui_thread_get_bubble_data(item_data, svc_handle);
+
+ if (msg_ui_load_composer_ug(svc_handle) == MSG_UI_RET_ERR)
+ D_MSG("Failed to load composer ug");
+
+ service_destroy(svc_handle);
+ }
+
+ item_data->unread_cnt = 0;
+ //elm_genlist_item_update(item);
+ break;
+ case THREAD_EDIT_VIEW:
+ item_data->is_check = !item_data->is_check;
+ 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);
+}
+
+char *msg_ui_thread_msg_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)data;
+ char buf[DEF_BUF_LEN+1] = { 0, };
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL);
+
+ if (!strcmp(part, "elm.text.1")) {
+ if (item_data->contact_id > 0 && item_data->display_name[0] != '\0') {
+ snprintf(buf, sizeof(buf), "%s", item_data->display_name);
+ } else {
+ if (item_data->address[0] != '\0')
+ snprintf(buf, sizeof(buf), "%s", item_data->address);
+ else
+ snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ }
+ } else if (g_strcmp0(part, "elm.text.2") == 0) {
+ msg_ui_thread_make_time_string(item_data->msg_time, buf, sizeof(buf));
+ } else if (g_strcmp0(part, "elm.text.3") == 0) {
+ char msg[DEF_BUF_LEN] = { 0, };
+ int idx = 0;
+
+ if (item_data->msg_body[0] != '\0') {
+ strncpy(msg, item_data->msg_body, sizeof(msg) - 1);
+ while (msg[idx]) {
+ if (g_ascii_iscntrl(msg[idx]))
+ msg[idx] = ' ';
+ idx++;
+ }
+ } else if ((item_data->msg_type >= MSG_TYPE_MMS && item_data->msg_type <= MSG_TYPE_MMS_NOTI)) {
+ snprintf(msg, sizeof(msg), "(%s)", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_NO_SUBJECT"));
+ }
+ snprintf(buf, sizeof(buf), "%s", msg);
+ } else if (g_strcmp0(part, "elm.text.4") == 0) {
+ if (item_data->is_read == 0)
+ snprintf(buf, sizeof(buf), "1");
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ return NULL;
+ }
return strdup(buf);
}
-void msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info)
+char *msg_ui_thread_search_msg_gl_text_get(void *data, Evas_Object *obj, const char *part)
{
- MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+ PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)data;
+ char buf[DEF_BUF_LEN+1] = { 0, };
+ bool result = false;
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL);
+
+ pListData = msg_ui_thread_get_current_list();
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pListData, NULL);
+
+ if (!strcmp(part, "elm.text.1")) {
+ bool search = true;
+ if (item_data->contact_id > 0 && item_data->display_name[0] != '\0') {
+ snprintf(buf, sizeof(buf), "%s", item_data->display_name);
+ } else {
+ if (item_data->address[0] != '\0') {
+ snprintf(buf, sizeof(buf), "%s", item_data->address);
+ } else {
+ snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ search =false;
+ }
+ }
+
+ if (search == true) {
+ Evas_Object *entry = elm_object_part_content_get( pListData->searchbar, "elm.swallow.content");
+ char *search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+ if (strlen(search_str) > 0) {
+ const char *str = msg_ui_thread_make_search_result_string(buf, search_str, &result);
+ free(search_str);
+ return strdup(str);
+ }
+ }
+ } else if (g_strcmp0(part, "elm.text.2") == 0) {
+ msg_ui_thread_make_time_string(item_data->msg_time, buf, sizeof(buf));
+ } else if (g_strcmp0(part, "elm.text.3") == 0) {
+ char msg[DEF_BUF_LEN] = { 0, };
+ int idx = 0;
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA) data;
+ if (item_data->msg_body[0] != '\0') {
+ strncpy(msg, item_data->msg_body, sizeof(msg) - 1);
+ while (msg[idx]) {
+ if (g_ascii_iscntrl(msg[idx]))
+ msg[idx] = ' ';
+ idx++;
+ }
+ } else if ((item_data->msg_type >= MSG_TYPE_MMS && item_data->msg_type <= MSG_TYPE_MMS_NOTI)) {
+ snprintf(msg, sizeof(msg), "(%s)", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_NO_SUBJECT"));
+ }
+ snprintf(buf, sizeof(buf), "%s", msg);
+
+ if (item_data->msg_type < MSG_TYPE_MMS) {
+ Evas_Object *entry = elm_object_part_content_get( pListData->searchbar, "elm.swallow.content");
+ char *search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+ if (strlen(search_str) > 0) {
+ const char *str = msg_ui_thread_make_search_result_string(buf, search_str, &result);
+ free(search_str);
+ return strdup(str);
+ }
+ }
+ } else if (g_strcmp0(part, "elm.text.4") == 0) {
+ if (item_data->is_read == 0)
+ snprintf(buf, sizeof(buf), "1");
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part);
+ return NULL;
+ }
+
+ return strdup(buf);
+}
+
+Evas_Object *msg_ui_thread_msg_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ PMSG_THREAD_LIST_DATA pListData = msg_ui_thread_get_current_list();
+ PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)data;
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL);
+
+ Evas_Object *ic = NULL;
+
+ if (g_strcmp0(part, "elm.icon.1") == 0) {
+ if (item_data->msg_type == MSG_TYPE_SMS_CB) {
+ ic = elm_icon_add(obj);
+ elm_icon_file_set(ic, MSG_UI_THREAD_LIST_CB_ICON, NULL);
+ } else if (item_data->msg_type == MSG_TYPE_SMS_WAPPUSH) {
+ ic = elm_icon_add(obj);
+ elm_icon_file_set(ic, MSG_UI_THREAD_LIST_PUSH_ICON, NULL);
+ } else if (item_data->msg_type == MSG_TYPE_SMS_SYNCML) {
+ ic = elm_icon_add(obj);
+ elm_icon_file_set(ic, MSG_UI_THREAD_LIST_OTA_ICON, NULL);
+ }
+
+ if (ic) {
+ evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ evas_object_show(ic);
+ }
+ } else if (g_strcmp0(part, "elm.slide.swallow.1") == 0) {
+ ic = elm_button_add(obj);
+ elm_object_style_set(ic, "sweep/delete");
+ elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_SK_DELETE"));
+ evas_object_data_set(ic, "sel_peer_data", (void *) item_data);
+ evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData);
+ }
+
+ 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->is_check);
+ evas_object_data_set(ic, "item_data", item_data);
+ evas_object_smart_callback_add(ic, "changed", msg_ui_thread_list_checked_cb, (void *) pListData);
+ item_data->chk = ic;
+ }
+ }
+
+ return ic;
+}
+
+void msg_ui_thread_msg_gl_del(void *data, Evas_Object *obj)
+{
+ PMSG_APP_THREAD_MSG_DATA_S del_data = (PMSG_APP_THREAD_MSG_DATA_S) data;
+ if (del_data) {
+ if (del_data->msg_time) {
+ free(del_data->msg_time);
+ del_data->msg_time = NULL;
+ }
+ free(del_data);
+ del_data = NULL;
+ }
+}
+
+void msg_ui_thread_msg_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA) data;
Elm_Object_Item *item = NULL;
- PMSG_APP_THREAD_DATA_S item_data = NULL;
- bundle *b = NULL;
+ Elm_Object_Item* it_sweep = NULL;
+
+ PMSG_APP_THREAD_MSG_DATA_S item_data = NULL;
+ service_h svc_handle = 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);
+ item_data = (PMSG_APP_THREAD_MSG_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.");
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, pListData->sel_msg_id == item_data->msg_id, "Already selected item");
elm_genlist_item_selected_set(item, 0);
- switch (pData->viewmode) {
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+
+ switch (pListData->view_mode) {
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);
+ if (pListData->list_type >= THREAD_SPAM_LIST_TYPE) {
+ pListData->sel_gen_item = item;
+ pListData->sel_msg_id = item_data->msg_id;
+
+ /** update read status */
+ msg_update_read_status(msg_ui_thread_get_data_handle(), item_data->msg_id, true);
+
+ if (item_data->msg_type == MSG_TYPE_MMS) {
+ /** in case of MMS launch MMS viewer UG */
+ msg_ui_thread_launch_viewer_ug(pListData, pListData->sel_msg_id);
+ } else {
+ /** in case of sms, its own SMS viewer view */
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "type SMS");
+ msg_ui_thread_launch_msg_detail_view(pListData, item_data);
+ }
+ } else {
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ msg_struct_t threadInfo = NULL;
+ PMSG_APP_THREAD_DATA_S thread_data = NULL;
+ msg_error_t err = MSG_SUCCESS;
+ int thread_id = 0;
+
+ err = msg_get_message(msg_ui_thread_get_data_handle(), (msg_message_id_t)item_data->msg_id, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message() is failed : err = %d", err);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+
+ pListData->sel_gen_item = item;
+ pListData->sel_msg_id = item_data->msg_id;
+
+ threadInfo = msg_create_struct(MSG_STRUCT_THREAD_INFO);
+ err = msg_get_thread(msg_ui_thread_get_data_handle(), thread_id, threadInfo);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message() is failed : err = %d", err);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ msg_release_struct(&threadInfo);
+ return;
+ }
+
+ thread_data = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S));
+ msg_ui_thread_set_thread_data(pListData, thread_data, threadInfo);
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ msg_ui_thread_get_bubble_data(thread_data, svc_handle);
+
+ if (msg_ui_load_composer_ug(svc_handle) == MSG_UI_RET_ERR)
+ D_MSG("Failed to load composer ug");
+
+
+ service_destroy(svc_handle);
+ }
+
+ if (thread_data)
+ free(thread_data);
+
+ msg_release_struct(&threadInfo);
+ msg_release_struct(&sendOpt);
+ msg_release_struct(&msgInfo);
+ }
- item_data->unreadCnt = 0;
- elm_genlist_item_update(item);
+ item_data->is_read = true;
+ //elm_genlist_item_update(item);
break;
case THREAD_EDIT_VIEW:
- item_data->isCheck = !item_data->isCheck;
+ item_data->is_check = !item_data->is_check;
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;
@@ -272,6 +661,20 @@ void msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info)
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
+char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part)
+{
+ char buf[DEF_BUF_LEN] = { '0', };
+
+ PMSG_THREAD_LIST_DATA pListData = msg_ui_thread_get_current_list();
+
+ if (pListData && pListData->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_empty_sel(void *data, Evas_Object *obj, void *event_info)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -286,212 +689,1178 @@ void msg_ui_thread_gl_empty_sel(void *data, Evas_Object *obj, void *event_info)
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
-void msg_ui_thread_list_load(PMSG_THREAD_DATA ThreadData)
+char *msg_ui_thread_date_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_APP_THREAD_DATELINE_DATA_S item_data = (PMSG_APP_THREAD_DATELINE_DATA_S) data;
+ char *date_str = NULL;
+ char buf[DEF_BUF_LEN] = { 0, };
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pData || !item_data, NULL);
+
+ if (0 == strcmp(part, "elm.text")) {
+ date_str = msg_common_get_display_date(pData->locale, pData->date_ptn, item_data->thread_time);
+
+ if (date_str) {
+ snprintf(buf, sizeof(buf), " %s ", date_str);
+ free(date_str);
+ }
+ return strdup(buf);
+ } else {
+ return NULL;
+ }
+}
+
+void msg_ui_thread_date_gl_del(void *data, Evas_Object *obj)
+{
+ PMSG_APP_THREAD_DATELINE_DATA_S del_data = (PMSG_APP_THREAD_DATELINE_DATA_S) data;
+
+ if (del_data) {
+ if (del_data->thread_time) {
+ free(del_data->thread_time);
+ del_data->thread_time = NULL;
+ }
+ free(del_data);
+ del_data = NULL;
+ }
+}
+
+PMSG_APP_THREAD_DATELINE_DATA_S msg_ui_thread_list_insert_dateline(PMSG_THREAD_LIST_DATA pListData, time_t* cur_time, time_t* prev_time)
+{
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+
+ char *date_str = NULL;
+ char cur_date_buf[DEF_BUF_LEN+1] = { 0, };
+ char prev_date_buf[DEF_BUF_LEN+1] = { 0, };
+
+ date_str = msg_common_get_display_date(pData->locale, pData->date_ptn, cur_time);
+ if (date_str) {
+ snprintf(cur_date_buf, sizeof(cur_date_buf), " %s ", date_str);
+ free(date_str);
+ date_str = NULL;
+ }
+
+ if (prev_time != NULL) {
+ date_str = msg_common_get_display_date(pData->locale, pData->date_ptn, prev_time);
+ if (date_str) {
+ snprintf(prev_date_buf, sizeof(prev_date_buf), " %s ", date_str);
+ free(date_str);
+ date_str = NULL;
+ }
+ }
+
+ if (!prev_time ||g_strcmp0(cur_date_buf, prev_date_buf) != 0) {
+ dateline_data = (PMSG_APP_THREAD_DATELINE_DATA_S) calloc(1, sizeof(PMSG_APP_THREAD_DATELINE_DATA_S));
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !dateline_data, NULL);
+ bzero(dateline_data, sizeof(dateline_data));
+
+ dateline_data->thread_time = (time_t *) calloc(1, sizeof(time_t));
+ bzero(dateline_data->thread_time, sizeof(time_t));
+ memcpy(dateline_data->thread_time, cur_time, sizeof(time_t));
+
+ dateline_data->subitem_cnt = 0;
+ dateline_data->date_it = elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_DATE), dateline_data, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_select_mode_set(dateline_data->date_it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ }
+
+ return dateline_data;
+}
+
+void msg_ui_thread_list_load(PMSG_THREAD_LIST_DATA pListData, Eina_Bool bLaunch)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- if (!ThreadData)
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+ if (!pListData){
+ D_MSG("[ERROR] pListData is NULL");
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_error_t err = MSG_SUCCESS;
+ msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE);
+ msg_struct_list_s peerList;
- msg_ui_thread_init_genlist(ThreadData);
+ __msg_ui_thread_init_genlist(pListData);
- sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
- sortRule.bAscending = false;
+ msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE);
+ msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false);
- err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList);
+ err = msg_get_thread_view_list(pData->msgHandle, sort_rule_t, &peerList);
+ msg_release_struct(&sort_rule_t);
MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "peercount : %d, err : %d", peerList.nCount, err);
- ThreadData->thread_cnt = peerList.nCount;
+ pListData->item_cnt = peerList.nCount;
- Evas_Object *swl_ly = elm_object_part_content_get(ThreadData->content_ly, "thread_list");
+ Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list");
- if (peerList.nCount <= 0 || err != MSG_SUCCESS) {
- elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+ pListData->app_data_type = THREAD_LIST_APP_DATA_THREAD;
+ msg_ui_thread_genlist_style_set(pListData);
- if (!ThreadData->noc_ly)
- ThreadData->noc_ly = msg_ui_thread_create_nocontent_layout(ThreadData);
+ if (peerList.nCount <= 0 || err != MSG_SUCCESS) {
+ if (!pListData->noc_ly)
+ pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame);
- if (swl_ly != ThreadData->noc_ly) {
+ if (swl_ly != pListData->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);
+ elm_object_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly);
}
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+
} else {
- if (swl_ly != ThreadData->genlist) {
+ if (swl_ly != pListData->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_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist);
}
- elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], 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]);
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+ PMSG_APP_THREAD_DATA_S cur_thread = NULL;
+ PMSG_APP_THREAD_DATA_S prev_thread = NULL;
+ int row = 0;
+ int load_cnt = 0;
- elm_genlist_item_append(ThreadData->genlist, ThreadData->itc, cur_sel_thread, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_sel, ThreadData);
+ if (peerList.nCount > MSG_THREAD_LIST_LAUNCH_LOAD_MAX_CNT && bLaunch == TRUE) {
+ pListData->loaded_cnt = MSG_THREAD_LIST_LAUNCH_LOAD_MAX_CNT;
+ load_cnt = pListData->loaded_cnt;
+
+ if (pListData->launch_idler == NULL)
+ pListData->launch_idler = ecore_idler_add(__msg_ui_thread_msg_list_load_remain_item, pListData);
+ } else {
+ load_cnt = peerList.nCount;
}
- msg_release_thread_view_list(&peerList);
+ for (row = 0; row < load_cnt; row++) {
+ PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL;
+ Elm_Object_Item *item = NULL;
+
+ cur_thread = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S));
+ msg_ui_thread_set_thread_data(pListData, cur_thread, peerList.msg_struct_info[row]);
+
+ if (prev_thread)
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, prev_thread->thread_time);
+ else
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, NULL);
+
+ if (tmp_date_line != NULL)
+ dateline_data = tmp_date_line;
+ item = dateline_data->date_it;
+
+ if (cur_thread->unread_cnt > 0)
+ elm_genlist_item_append(pListData->genlist, &pListData->itc_unread, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData);
+ else
+ elm_genlist_item_append(pListData->genlist, &pListData->itc_default, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData);
+
+ if (dateline_data != NULL)
+ dateline_data->subitem_cnt++;
+
+ prev_thread = cur_thread;
+ }
+
+ msg_release_list_struct(&peerList);
}
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-
}
-void msg_ui_thread_list_update(PMSG_THREAD_DATA ThreadData)
+void msg_ui_thread_list_update(PMSG_THREAD_LIST_DATA pListData)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- if (!ThreadData)
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+ if (!pListData){
+ D_MSG("[ERROR] pListData is NULL");
return;
+ }
- MSG_ERROR_T err = MSG_SUCCESS;
- MSG_SORT_RULE_S sortRule = { 0, };
- MSG_THREAD_VIEW_LIST_S peerList = { 0, };
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE);
+ msg_struct_list_s peerList;
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");
+ Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list");
+
+ msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE);
+ msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false);
- sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
- sortRule.bAscending = false;
+ err = msg_get_thread_view_list(pData->msgHandle, sort_rule_t, &peerList);
+ msg_release_struct(&sort_rule_t);
- err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList);
+ pListData->item_cnt = peerList.nCount;
if (peerList.nCount <= 0 || err != MSG_SUCCESS) {
- elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
- if (!ThreadData->noc_ly)
- ThreadData->noc_ly = msg_ui_thread_create_nocontent_layout(ThreadData);
+ if (!pListData->noc_ly)
+ pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame);
- if (swl_ly != ThreadData->noc_ly) {
+ if (swl_ly != pListData->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);
+ elm_object_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly);
}
} else {
- if (swl_ly != ThreadData->genlist) {
+ if (swl_ly != pListData->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_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist);
}
- elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE);
- gen_item = elm_genlist_first_item_get(ThreadData->genlist);
+ gen_item = elm_genlist_first_item_get(pListData->genlist);
+
+ while (gen_item) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
- 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]);
+ msg_ui_thread_set_thread_data(pListData, cur_sel_thread, peerList.msg_struct_info[row]);
+ if (cur_sel_thread->unread_cnt > 0)
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread);
+ else
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_default);
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_release_list_struct(&peerList);
+ elm_genlist_realized_items_update(pListData->genlist);
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
-void msg_ui_thread_list_item_update(PMSG_THREAD_DATA ThreadData, MSG_THREAD_ID_T threadId)
+void msg_ui_thread_list_item_update(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id)
{
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;
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE);
+ msg_struct_list_s peerList;
+ PMSG_APP_THREAD_DATA_S old_data = NULL;
+ PMSG_APP_THREAD_DATA_S new_data = NULL;
int row = 0;
Elm_Object_Item *gen_item = NULL;
- sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
- sortRule.bAscending = false;
+ msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE);
+ msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false);
- err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList);
+ err = msg_get_thread_view_list(msg_ui_thread_get_data_handle(), sort_rule_t, &peerList);
+ msg_release_struct(&sort_rule_t);
MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS);
- gen_item = elm_genlist_first_item_get(ThreadData->genlist);
+ gen_item = elm_genlist_first_item_get(pListData->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) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
+
+ old_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(gen_item);
+ if (old_data && thread_id == old_data->thread_id) {
break;
}
gen_item = elm_genlist_item_next_get(gen_item);
}
- if (!gen_item)
+ if (!gen_item) {
+ D_EMSG("gen_item is NULL");
+ msg_release_list_struct(&peerList);
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)
+ int sel_thread_id = 0;
+ msg_get_int_value(peerList.msg_struct_info[row], MSG_THREAD_ID_INT, &sel_thread_id);
+ if (sel_thread_id == thread_id) {
+ new_data = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S));
+ if (!new_data)
+ break;
+
+ msg_ui_thread_set_thread_data(pListData, new_data, peerList.msg_struct_info[row]);
+ break;
+ }
+ }
+
+ msg_release_list_struct(&peerList);
+
+ if (!new_data) {
+ D_EMSG("new_data is NULL");
+ return;
+ }
+
+ new_data->chk = old_data->chk;
+ new_data->is_check = old_data->is_check;
+
+ if (new_data->unread_cnt > 0)
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread);
+ else
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_default);
+ elm_object_item_data_set(gen_item, new_data);
+ elm_genlist_item_update(gen_item);
+
+ if (pListData->view_mode == THREAD_EDIT_VIEW) {
+ if (eina_list_data_find(pListData->chk_list, old_data)) {
+ pListData->chk_list = eina_list_remove(pListData->chk_list, old_data);
+ pListData->chk_list = eina_list_append(pListData->chk_list, new_data);
+ }
+ }
+
+ if (old_data) {
+ if (old_data->thread_time) {
+ free(old_data->thread_time);
+ old_data->thread_time = NULL;
+ }
+ free(old_data);
+ }
+
+ MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_list_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id)
+{
+ MSG_UI_ENTER();
+
+ PMSG_APP_THREAD_DATA_S item_data = NULL;
+ Elm_Object_Item *gen_item = NULL;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "thread_id = [%d] ", thread_id);
+
+ gen_item = elm_genlist_first_item_get(pListData->genlist);
+
+ while (gen_item) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
+
+ item_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(gen_item);
+ if (item_data && thread_id == item_data->thread_id) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "thread_id == item_data->thread_id == [%d] ", thread_id);
+ break;
+ }
+ gen_item = elm_genlist_item_next_get(gen_item);
+ }
+
+ if (!gen_item) {
+ D_EMSG("gen_item is NULL");
+ return;
+ }
+
+ Elm_Object_Item *it_dateline = NULL;
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+
+ it_dateline = elm_genlist_item_parent_get(gen_item);
+ if (it_dateline) {
+ dateline_data = elm_object_item_data_get(it_dateline);
+
+ if (dateline_data) {
+ dateline_data->subitem_cnt--;
+ if (dateline_data->subitem_cnt == 0)
+ elm_object_item_del((Elm_Object_Item *)it_dateline);
+ }
+ }
+ elm_object_item_del((Elm_Object_Item *)gen_item);
+ pListData->item_cnt--;
+
+ if (pListData->item_cnt <= 0) {
+ msg_ui_thread_list_load(pListData, FALSE);
+ }
+
+ MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_msg_list_load(PMSG_THREAD_LIST_DATA pListData, int listType)
+{
+ D_ENTER;
+
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_list_s msg_list;
+
+ if (!pListData){
+ D_MSG("[ERROR] pListData is NULL");
+ return;
+ }
+
+ __msg_ui_thread_init_genlist(pListData);
+
+ switch (listType) {
+ case THREAD_SPAM_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_SPAMBOX_ID, 0, 0, 0, &msg_list);
+ break;
+ case THREAD_SIM_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_ALLBOX_ID, 0, MSG_TYPE_SMS, MSG_STORAGE_SIM, &msg_list);
+ break;
+ case THREAD_CBMSG_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_CBMSGBOX_ID, 0, 0, 0, &msg_list);
+ break;
+ case THREAD_DRAFT_LIST_TYPE:
+ case THREAD_LOCKED_LIST_TYPE:
+ case THREAD_SCHEDULED_LIST_TYPE:
+ default:
+ D_MSG("[WARNING] invalid view mode");
+ return;
+ }
+
+ if (err != MSG_SUCCESS && err != MSG_ERR_DB_NORECORD) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message_list() is failed = %d", err);
+ return;
+ }
+ pListData->item_cnt = msg_list.nCount;
+
+ Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list");
+
+ if (pListData->item_cnt == 0) {
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+ // show non cotent
+ if (!pListData->noc_ly)
+ pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame);
+
+ if (swl_ly != pListData->noc_ly) {
+ evas_object_hide(swl_ly);
+ elm_object_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly);
+ }
+ } else {
+ // fill the genlist
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE);
+
+ pListData->app_data_type = THREAD_LIST_APP_DATA_MSG;
+ msg_ui_thread_genlist_style_set(pListData);
+
+ if (swl_ly != pListData->genlist) {
+ evas_object_hide(swl_ly);
+ elm_object_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist);
+ }
+
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+ PMSG_APP_THREAD_MSG_DATA_S cur_item = NULL;
+ PMSG_APP_THREAD_MSG_DATA_S prev_item = NULL;
+ int row = 0;
+
+ for (row = 0; row < msg_list.nCount; row++) {
+ PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL;
+ Elm_Object_Item *item = NULL;
+
+ cur_item = (PMSG_APP_THREAD_MSG_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_MSG_DATA_S));
+ msg_ui_thread_set_msg_data(cur_item, msg_list.msg_struct_info[row]);
+
+ if (prev_item)
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_item->msg_time, prev_item->msg_time);
+ else
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_item->msg_time, NULL);
+
+ if (tmp_date_line != NULL)
+ dateline_data = tmp_date_line;
+
+ item = dateline_data->date_it;
+
+ if (cur_item->is_read == 0)
+ elm_genlist_item_append(pListData->genlist, &pListData->itc_unread, cur_item, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, (void *)pListData);
+ else
+ elm_genlist_item_append(pListData->genlist, &pListData->itc_default, cur_item, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, (void *)pListData);
+
+ if (dateline_data != NULL)
+ dateline_data->subitem_cnt++;
+
+ prev_item = cur_item;
+ }
+ }
+ msg_release_list_struct(&msg_list);
+
+ D_LEAVE;
+}
+
+void msg_ui_thread_list_msg_list_update(PMSG_THREAD_LIST_DATA pListData)
+{
+ MSG_UI_ENTER();
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+ if (!pListData){
+ D_MSG("[ERROR] pListData is NULL");
+ return;
+ }
+
+ PMSG_APP_THREAD_MSG_DATA_S item_data = NULL;
+ int row = 0;
+ Elm_Object_Item *gen_item = NULL;
+ Evas_Object *entry = NULL;
+
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_list_s msg_list;
+
+ Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list");
+
+ if (pListData->search_mode == THREAD_SEARCH_ON) {
+ msg_struct_t search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION);
+ char *search_str = NULL;
+
+ if (pListData->searchbar) {
+ entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content");
+ search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+ }
+
+ if (!search_str || strlen(search_str) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "empty search_str");
+ elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", "");
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) {
+ msg_ui_thread_list_update(pListData);
+ return;
+ }
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str);
+
+ switch (pListData->list_type) {
+ case THREAD_NORMAL_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID);
+ break;
+ case THREAD_SPAM_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_SPAMBOX_ID);
+ break;
+ case THREAD_SIM_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID);
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_SMS);
+ break;
+ case THREAD_CBMSG_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_CBMSGBOX_ID);
+ break;
+ case THREAD_DRAFT_LIST_TYPE:
+ case THREAD_LOCKED_LIST_TYPE:
+ case THREAD_SCHEDULED_LIST_TYPE:
+ default:
+ D_MSG("[WARNING] invalid view mode");
+ return;
+ }
+ msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, search_str, strlen(search_str));
+
+ err = msg_search_message(pData->msgHandle, search_s, 0, 0, &msg_list);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS);
+ } else {
+ switch (pListData->list_type) {
+ case THREAD_SPAM_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_SPAMBOX_ID, 0, 0, 0, &msg_list);
+ break;
+ case THREAD_SIM_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_ALLBOX_ID, 0, MSG_TYPE_SMS, MSG_STORAGE_SIM, &msg_list);
+ break;
+ case THREAD_CBMSG_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_CBMSGBOX_ID, 0, 0, 0, &msg_list);
+ break;
+ case THREAD_DRAFT_LIST_TYPE:
+ case THREAD_LOCKED_LIST_TYPE:
+ case THREAD_SCHEDULED_LIST_TYPE:
+ default:
+ D_MSG("[WARNING] invalid view mode");
return;
+ }
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS);
+ }
+ pListData->item_cnt = msg_list.nCount;
+
+ if (msg_list.nCount <= 0 || err != MSG_SUCCESS) {
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+
+ if (!pListData->noc_ly)
+ pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame);
+
+ if (swl_ly != pListData->noc_ly) {
+ evas_object_hide(swl_ly);
+ elm_object_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly);
+ }
+ } else {
+ if (swl_ly != pListData->genlist) {
+ evas_object_hide(swl_ly);
+ elm_object_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist);
+ }
+
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE);
+
+ gen_item = elm_genlist_first_item_get(pListData->genlist);
+
+ while (gen_item) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
+
+ item_data = elm_object_item_data_get(gen_item);
+ msg_ui_thread_set_msg_data(item_data, msg_list.msg_struct_info[row]);
+ if (pListData->search_mode == THREAD_SEARCH_ON) {
+ if (item_data->is_read == 0)
+ elm_genlist_item_item_class_update(gen_item, &pData->itc_search_unread);
+ else
+ elm_genlist_item_item_class_update(gen_item, &pData->itc_search);
+ } else {
+ if (item_data->is_read == 0)
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread);
+ else
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_default);
+ }
+
+ elm_object_item_data_set(gen_item, item_data);
+ gen_item = elm_genlist_item_next_get(gen_item);
+ row++;
+ }
+ }
+
+ msg_release_list_struct(&msg_list);
+ elm_genlist_realized_items_update(pListData->genlist);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_thread_list_msg_item_update(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id)
+{
+ MSG_UI_ENTER();
+
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_APP_THREAD_MSG_DATA_S old_data = NULL;
+ PMSG_APP_THREAD_MSG_DATA_S new_data = NULL;
+ int row = 0;
+ Elm_Object_Item *gen_item = NULL;
+ Evas_Object *entry = NULL;
+
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_list_s msg_list;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id = [%d] ", msg_id);
- msg_ui_thread_set_msg_data(insert_data, peerList.msgThreadInfo[row]);
+ if (pListData->search_mode == THREAD_SEARCH_ON) {
+ msg_struct_t search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION);
+ char *search_str = NULL;
+
+ if (pListData->searchbar) {
+ entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content");
+ search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+ }
+
+ if (!search_str || strlen(search_str) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "empty search_str");
+ elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", "");
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) {
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ int thread_id = 0;
+
+ err = msg_get_message(pData->msgHandle, msg_id, msgInfo, sendOpt);
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ msg_ui_thread_list_item_update(pListData, thread_id);
+ return;
+ }
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str);
+
+ switch (pListData->list_type) {
+ case THREAD_NORMAL_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID);
+ break;
+ case THREAD_SPAM_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_SPAMBOX_ID);
+ break;
+ case THREAD_SIM_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID);
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_SMS);
+ break;
+ case THREAD_CBMSG_LIST_TYPE:
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_CBMSGBOX_ID);
+ break;
+ case THREAD_DRAFT_LIST_TYPE:
+ case THREAD_LOCKED_LIST_TYPE:
+ case THREAD_SCHEDULED_LIST_TYPE:
+ default:
+ D_MSG("[WARNING] invalid view mode");
+ return;
+ }
+ msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, search_str, strlen(search_str));
+
+ err = msg_search_message(pData->msgHandle, search_s, 0, 0, &msg_list);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS);
+ } else {
+ switch (pListData->list_type) {
+ case THREAD_SPAM_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_SPAMBOX_ID, 0, 0, 0, &msg_list);
+ break;
+ case THREAD_SIM_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_ALLBOX_ID, 0, MSG_TYPE_SMS, MSG_STORAGE_SIM, &msg_list);
+ break;
+ case THREAD_CBMSG_LIST_TYPE:
+ err = msg_get_message_list(pData->msgHandle, MSG_CBMSGBOX_ID, 0, 0, 0, &msg_list);
+ break;
+ case THREAD_DRAFT_LIST_TYPE:
+ case THREAD_LOCKED_LIST_TYPE:
+ case THREAD_SCHEDULED_LIST_TYPE:
+ default:
+ D_MSG("[WARNING] invalid view mode");
+ return;
+ }
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS);
+ }
+
+ gen_item = elm_genlist_first_item_get(pListData->genlist);
+
+ /* Update genlist item */
+ while (gen_item) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
+
+ old_data = (PMSG_APP_THREAD_MSG_DATA_S) elm_object_item_data_get(gen_item);
+ if (old_data && msg_id == old_data->msg_id) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id == item_data->msg_id == [%d] ", msg_id);
break;
}
+ gen_item = elm_genlist_item_next_get(gen_item);
}
- msg_release_thread_view_list(&peerList);
+ if (!gen_item) {
+ D_EMSG("gen_item is NULL");
+ msg_release_list_struct(&msg_list);
+ return;
+ }
- insert_data->chk = item_data->chk;
- insert_data->isCheck = item_data->isCheck;
+ for (row = 0; row <msg_list.nCount; row++) {
+ int row_msg_id = 0;
+ msg_get_int_value(msg_list.msg_struct_info[row], MSG_MESSAGE_ID_INT, &row_msg_id);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_list.msgInfo[row]'s msgID = [%d] row = %d ", row_msg_id, row);
+ if (row_msg_id == msg_id) {
+ new_data = (PMSG_APP_THREAD_MSG_DATA_S)calloc(1, sizeof(MSG_APP_THREAD_MSG_DATA_S));
+ if (!new_data)
+ break;
+
+ msg_ui_thread_set_msg_data(new_data, msg_list.msg_struct_info[row]);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "find row = %d ", row);
+ break;
+ }
+ }
+ msg_release_list_struct(&msg_list);
+
+ if (!new_data) {
+ D_EMSG("new_data is NULL");
+ return;
+ }
- elm_object_item_data_set(gen_item, insert_data);
+ new_data->chk = old_data->chk;
+ new_data->is_check = old_data->is_check;
+
+ if (pListData->search_mode == THREAD_SEARCH_ON) {
+ if (new_data->is_read == 0)
+ elm_genlist_item_item_class_update(gen_item, &pData->itc_search_unread);
+ else
+ elm_genlist_item_item_class_update(gen_item, &pData->itc_search);
+ } else {
+ if (new_data->is_read == 0)
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread);
+ else
+ elm_genlist_item_item_class_update(gen_item, &pListData->itc_default);
+ }
+ elm_object_item_data_set(gen_item, new_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 (pListData->view_mode == THREAD_EDIT_VIEW) {
+ if (eina_list_data_find(pListData->chk_list, old_data)) {
+ pListData->chk_list = eina_list_remove(pListData->chk_list, old_data);
+ pListData->chk_list = eina_list_append(pListData->chk_list, new_data);
}
}
- if (item_data) {
- if (item_data->threadTime) {
- free(item_data->threadTime);
+ if (old_data) {
+ if (old_data->msg_time) {
+ free(old_data->msg_time);
+ old_data->msg_time = NULL;
+ }
+ free(old_data);
+ }
+
+ MSG_UI_LEAVE();
+}
+
+void msg_ui_thread_list_msg_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id)
+{
+ MSG_UI_ENTER();
+
+ PMSG_APP_THREAD_MSG_DATA_S item_data = NULL;
+ Elm_Object_Item *gen_item = NULL;
+ Elm_Object_Item *del_item = NULL;
+ Elm_Object_Item *it_dateline = NULL;
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id = [%d] ", msg_id);
+
+ gen_item = elm_genlist_first_item_get(pListData->genlist);
+
+ while (gen_item) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
+
+ //120803 - can exist multiple message with the same address in search result list
+ item_data = (PMSG_APP_THREAD_MSG_DATA_S) elm_object_item_data_get(gen_item);
+ if (item_data && msg_id == item_data->msg_id) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id == item_data->msg_id == [%d] ", msg_id);
+
+ del_item = gen_item;
+
+ it_dateline = elm_genlist_item_parent_get(gen_item);
+ if (it_dateline) {
+ dateline_data = elm_object_item_data_get(it_dateline);
+
+ if (dateline_data) {
+ dateline_data->subitem_cnt--;
+ if (dateline_data->subitem_cnt == 0)
+ elm_object_item_del((Elm_Object_Item *)it_dateline);
+ }
+ }
+ }
+ gen_item = elm_genlist_item_next_get(gen_item);
+
+ if (del_item) {
+ elm_object_item_del(del_item);
+ pListData->item_cnt--;
+ del_item = NULL;
}
- free(item_data);
+ }
+
+ if (pListData->item_cnt <= 0) {
+ elm_genlist_clear(pListData->genlist);
+ elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_EMPTY), NULL, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_empty_sel, NULL);
}
MSG_UI_LEAVE();
}
-void msg_ui_thread_genlist_style_set(PMSG_THREAD_DATA ThreadData)
+
+Eina_Bool msg_ui_thread_search_msg_list_load(void *data)
+{
+ MSG_UI_ENTER();
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !data, EINA_FALSE);
+
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+
+ Evas_Object *entry = NULL;
+ char *search_str = NULL;
+
+ msg_struct_list_s search_msg_list;
+ msg_struct_t search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION);
+ msg_error_t err = MSG_SUCCESS;
+ int idx = 0;
+
+ if (pListData->searchbar) {
+ entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content");
+ search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry));
+ }
+
+ if (pListData->search_timer) {
+ ecore_timer_del(pListData->search_timer);
+ pListData->search_timer = NULL;
+ }
+
+ if (!search_str || strlen(search_str) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "empty search_str");
+ elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", "");
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE)
+ msg_ui_thread_list_load(pListData, FALSE);
+ else
+ msg_ui_thread_msg_list_load(pListData, pListData->list_type);
+ msg_release_struct(&search_s);
+ return EINA_FALSE;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str);
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) {
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID);
+ } else if (pListData->list_type == THREAD_SPAM_LIST_TYPE) {
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_SPAMBOX_ID);
+ } else if (pListData->list_type == THREAD_SIM_LIST_TYPE) {
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID);
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_SMS);
+ } else if (pListData->list_type == THREAD_CBMSG_LIST_TYPE) {
+ msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_CBMSGBOX_ID);
+ }
+ msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, search_str, strlen(search_str));
+ err = msg_search_message(msg_ui_thread_get_data_handle(), search_s, 0, 0, &search_msg_list);
+ pListData->item_cnt = search_msg_list.nCount;
+
+ if (search_str)
+ free(search_str);
+
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_search_message failed!! [%d]", err);
+ elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", "");
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE)
+ msg_ui_thread_list_load(pListData, FALSE);
+ else
+ msg_ui_thread_msg_list_load(pListData, pListData->list_type);
+
+ msg_release_struct(&search_s);
+ return EINA_FALSE;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search result [ count = %d ] ", search_msg_list.nCount);
+
+ Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list");
+
+ if (swl_ly != pListData->genlist) {
+ evas_object_hide(swl_ly);
+ elm_object_part_content_unset(pListData->content_ly, "thread_list");
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist);
+ }
+
+ /** hide control bar */
+ elm_genlist_clear(pListData->genlist);
+ elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,close", "");
+
+ if (search_msg_list.nCount > 0) {
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+ PMSG_APP_THREAD_MSG_DATA_S item_data = NULL;
+ PMSG_APP_THREAD_MSG_DATA_S prev_data = NULL;
+ int sim_msg_count = 0;
+
+ pListData->app_data_type = THREAD_LIST_APP_DATA_MSG;
+ msg_ui_thread_genlist_style_set(pListData);
+
+ while (idx < search_msg_list.nCount) {
+ PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL;
+ Elm_Object_Item *item = NULL;
+
+ if (pListData->list_type == THREAD_SIM_LIST_TYPE) {
+ int storage_id = 0;
+ msg_get_int_value(search_msg_list.msg_struct_info[idx], MSG_MESSAGE_STORAGE_ID_INT, &storage_id);
+
+ if (storage_id != MSG_STORAGE_SIM) {
+ idx++;
+ continue;
+ } else {
+ sim_msg_count++;
+ }
+ }
+
+ item_data = (PMSG_APP_THREAD_MSG_DATA_S)calloc(1, sizeof(MSG_APP_THREAD_MSG_DATA_S));
+ msg_ui_thread_set_msg_data(item_data, search_msg_list.msg_struct_info[idx]);
+
+ if (prev_data)
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, item_data->msg_time, prev_data->msg_time);
+ else
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, item_data->msg_time, NULL);
+
+ if (tmp_date_line != NULL)
+ dateline_data = tmp_date_line;
+
+ item = dateline_data->date_it;
+
+ if (item_data->is_read == 0)
+ elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_SEARCH_UNREAD), item_data, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, pListData);
+ else
+ elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_SEARCH), item_data, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, pListData);
+
+ if (dateline_data != NULL)
+ dateline_data->subitem_cnt++;
+
+ prev_data = item_data;
+ idx++;
+ }
+
+ if (pListData->list_type == THREAD_SIM_LIST_TYPE && sim_msg_count == 0)
+ elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_EMPTY), NULL, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_empty_sel, NULL);
+ } else {
+ elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_EMPTY), NULL, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_empty_sel, NULL);
+ }
+
+ msg_release_struct(&search_s);
+ msg_release_list_struct(&search_msg_list);
+
+ return EINA_TRUE;
+}
+
+Eina_Bool __msg_ui_thread_msg_list_load_remain_item(void *data)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ThreadData);
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG)
+ return FALSE;
+
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE);
+ msg_struct_list_s peerList;
+
+ msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE);
+ msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false);
+
+ err = msg_get_thread_view_list(msg_ui_thread_get_data_handle(), sort_rule_t, &peerList);
+ msg_release_struct(&sort_rule_t);
+
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+ PMSG_APP_THREAD_DATA_S cur_thread = NULL;
+ PMSG_APP_THREAD_DATA_S prev_thread = NULL;
+ Elm_Object_Item *gen_item = NULL;
+ Elm_Object_Item *it_dateline = NULL;
+ int row = 0, start = pListData->loaded_cnt;
+
+ gen_item = elm_genlist_last_item_get(pListData->genlist);
+ if (gen_item)
+ prev_thread = elm_object_item_data_get(gen_item);
+
+ for (row = start; row < peerList.nCount; row++) {
+ PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL;
+ Elm_Object_Item *item = NULL;
+
+ cur_thread = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S));
+ msg_ui_thread_set_thread_data(pListData, cur_thread, peerList.msg_struct_info[row]);
+
+ if (prev_thread) {
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, prev_thread->thread_time);
+ if (tmp_date_line == NULL) {
+ it_dateline = elm_genlist_item_parent_get(gen_item);
+ if (it_dateline)
+ tmp_date_line = elm_object_item_data_get(it_dateline);
+ }
+ } else {
+ tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, NULL);
+ }
+
+ if (tmp_date_line != NULL)
+ dateline_data = tmp_date_line;
+
+ item = dateline_data->date_it;
+
+ if (cur_thread->unread_cnt > 0)
+ elm_genlist_item_append(pListData->genlist, &pListData->itc_unread, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData);
+ else
+ elm_genlist_item_append(pListData->genlist, &pListData->itc_default, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData);
+
+ if (dateline_data != NULL)
+ dateline_data->subitem_cnt++;
+
+ prev_thread = cur_thread;
+ pListData->loaded_cnt++;
+
+ if (pListData->loaded_cnt == peerList.nCount) {
+ ecore_idler_del(pListData->launch_idler);
+ pListData->launch_idler = NULL;
+ }
+ }
+
+ msg_release_list_struct(&peerList);
- 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";
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return TRUE;
+}
- 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;
+void msg_ui_thread_common_style_set(PMSG_THREAD_DATA pData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData);
+
+ pData->itc_empty.item_style = "1text";
+ pData->itc_empty.func.text_get = msg_ui_thread_gl_empty_get;
+ pData->itc_empty.func.content_get = NULL;
+ pData->itc_empty.func.state_get = NULL;
+ pData->itc_empty.func.del = NULL;
+
+ pData->itc_blank.item_style = "thread_list_blank";
+ pData->itc_blank.func.text_get = NULL;
+ pData->itc_blank.func.content_get = NULL;
+ pData->itc_blank.func.state_get = NULL;
+ pData->itc_blank.func.del = NULL;
+
+ pData->itc_date.item_style = "grouptitle";
+ pData->itc_date.func.text_get = msg_ui_thread_date_gl_text_get;
+ pData->itc_date.func.content_get = NULL;
+ pData->itc_date.func.state_get = NULL;
+ pData->itc_date.func.del = msg_ui_thread_date_gl_del;
+
+ pData->itc_search.item_style = "4text.1icon.2";
+ pData->itc_search.func.text_get = msg_ui_thread_msg_gl_text_get;
+ pData->itc_search.func.content_get = NULL;
+ pData->itc_search.func.state_get = NULL;
+ pData->itc_search.func.del = msg_ui_thread_msg_gl_del;
+
+ pData->itc_search_unread.item_style = "4text.1icon.1";
+ pData->itc_search_unread.func.text_get = msg_ui_thread_msg_gl_text_get;
+ pData->itc_search_unread.func.content_get = NULL;
+ pData->itc_search_unread.func.state_get = NULL;
+ pData->itc_search_unread.func.del = msg_ui_thread_msg_gl_del;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_thread_genlist_style_set(PMSG_THREAD_LIST_DATA pListData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pListData);
+
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
+ pListData->itc_default.item_style = "4text.1icon.2";
+ pListData->itc_default.decorate_item_style = "mode/slide3";
+ pListData->itc_default.func.text_get = __msg_ui_thread_gl_text_get;
+ pListData->itc_default.func.content_get = __msg_ui_thread_gl_content_get;
+ pListData->itc_default.func.state_get = NULL;
+ pListData->itc_default.func.del = __msg_ui_thread_gl_del;
+ pListData->itc_default.decorate_all_item_style = "edit_default";
+
+ pListData->itc_unread.item_style = "4text.1icon.1";
+ pListData->itc_unread.decorate_item_style = "mode/slide3";
+ pListData->itc_unread.func.text_get = __msg_ui_thread_gl_text_get;
+ pListData->itc_unread.func.content_get = __msg_ui_thread_gl_content_get;
+ pListData->itc_unread.func.state_get = NULL;
+ pListData->itc_unread.func.del = __msg_ui_thread_gl_del;
+ pListData->itc_unread.decorate_all_item_style = "edit_default";
+ } else {
+ pListData->itc_default.item_style = "4text.1icon.2";
+ pListData->itc_default.func.text_get = msg_ui_thread_msg_gl_text_get;
+ pListData->itc_default.func.content_get = msg_ui_thread_msg_gl_content_get;
+ pListData->itc_default.func.state_get = NULL;
+ pListData->itc_default.func.del = msg_ui_thread_msg_gl_del;
+ pListData->itc_default.decorate_all_item_style = "edit_default";
+
+ pListData->itc_unread.item_style = "4text.1icon.1";
+ pListData->itc_unread.func.text_get = msg_ui_thread_msg_gl_text_get;
+ pListData->itc_unread.func.content_get = msg_ui_thread_msg_gl_content_get;
+ pListData->itc_unread.func.state_get = NULL;
+ pListData->itc_unread.func.del = msg_ui_thread_msg_gl_del;
+ pListData->itc_unread.decorate_all_item_style = "edit_default";
+
+ if (pListData->list_type == THREAD_LOCKED_LIST_TYPE) {
+ pListData->itc_default.decorate_item_style = "mode/slide4";
+ pListData->itc_unread.decorate_item_style = "mode/slide4";
+ } else {
+ pListData->itc_default.decorate_item_style = "mode/slide";
+ pListData->itc_unread.decorate_item_style = "mode/slide";
+ }
+ }
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
index a39bf68..fefb63b 100755
--- a/thread/src/msg-ui-thread-main.c
+++ b/thread/src/msg-ui-thread-main.c
@@ -14,103 +14,104 @@
* 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)
+PMSG_THREAD_DATA msg_ui_thread_get_data(void)
{
- 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);
+ if (g_data)
+ return g_data;
+ else
+ return NULL;
+}
- 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;
+msg_handle_t msg_ui_thread_get_data_handle(void)
+{
+ if (g_data)
+ return g_data->msgHandle;
+ else
+ return NULL;
+}
- elm_win_conformant_set(pData->win_main, 1);
- pData->conform = elm_conformant_add(pData->navi_frame);
- elm_object_style_set(pData->conform, "internal_layout");
+Elm_Genlist_Item_Class* msg_ui_thread_get_itc_type(ThreadItcType type)
+{
+ if (g_data == NULL)
+ return NULL;
- 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);
+ if (type == THREAD_ITC_EMPTY)
+ return &g_data->itc_empty;
+ else if (type == THREAD_ITC_SEARCH)
+ return &g_data->itc_search;
+ else if (type == THREAD_ITC_SEARCH_UNREAD)
+ return &g_data->itc_search_unread;
+ else if (type == THREAD_ITC_BLANK)
+ return &g_data->itc_blank;
+ else if (type == THREAD_ITC_POPUP)
+ return &g_data->itc_popup;
+ else if (type == THREAD_ITC_DATE)
+ return &g_data->itc_date;
+ else
+ return NULL;
+}
- 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);
+/* Launching Time Check */
+static void __main_layout_flush_post_cb(void *data, Evas *e, void *event_info)
+{
+ evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, __main_layout_flush_post_cb);
}
void *msg_ui_thread_init_thread_data(struct appdata *ad)
{
- PMSG_THREAD_DATA thread_data = NULL;
+ PMSG_THREAD_DATA pData = NULL;
- thread_data = (PMSG_THREAD_DATA)calloc(1, sizeof(MSG_THREAD_DATA));
+ pData = (PMSG_THREAD_DATA)calloc(1, sizeof(MSG_THREAD_DATA));
- if (!thread_data)
+ if (!pData) {
+ D_MSG("calloc error");
return NULL;
+ }
+ bzero(pData, sizeof(PMSG_THREAD_DATA));
- 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 = pData;
- g_data = thread_data;
+ pData->msgHandle = ad->msgHandle;
+ pData->win_main = ad->win_main;
+ pData->th = elm_theme_new();
+ elm_theme_ref_set(pData->th, NULL);
+ elm_theme_extension_add(pData->th, MSG_THREAD_THEME);
- 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);
+ msg_ui_thread_common_style_set(pData);
+ msg_ui_thread_reg_msg_cb_func(pData);
+ msg_ui_thread_get_locale(pData);
+ msg_ui_thread_get_time_format(pData);
+ pData->time_12h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_12H);
+ pData->time_24h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_24H);
+ pData->date_ptn = msg_common_get_date_best_pattern(pData->locale, UDAT_YEAR_NUM_MONTH_DAY);
/* Register callback to apply time change. */
- thread_data->noti_fd = heynoti_init();
- if (thread_data->noti_fd == -1) {
+ pData->noti_fd = heynoti_init();
+ if (pData->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);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_init() is success : fd = %d\n", pData->noti_fd);
- if (heynoti_subscribe(thread_data->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb, (void *)thread_data) == -1) {
+ if (heynoti_subscribe(pData->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb, (void *)pData) == -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) {
+ if (heynoti_attach_handler(pData->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;
+ return (void *)pData;
}
void msg_ui_thread_deinit_thread_data(void *data)
@@ -118,73 +119,179 @@ void msg_ui_thread_deinit_thread_data(void *data)
if (!data)
return;
- PMSG_THREAD_DATA thread_data = data;
+ PMSG_THREAD_DATA pData = data;
+ int i = 0;
+
+ for (i = MSG_THREAD_LIST_MAX_COUNT-1; i >= 0; i--) {
+ if (pData->list_data[i] != NULL) {
+ msg_ui_thread_destroy_thread_list_data(pData->list_data[i]);
+ }
+ }
+
+ if (pData->date_ptn) {
+ free(pData->date_ptn);
+ pData->date_ptn = NULL;
+ }
- if (thread_data->date_ptn) {
- free(thread_data->date_ptn);
- thread_data->date_ptn = NULL;
+ if (pData->time_12h_ptn) {
+ free(pData->time_12h_ptn);
+ pData->time_12h_ptn = NULL;
}
- if (thread_data->time_12h_ptn) {
- free(thread_data->time_12h_ptn);
- thread_data->time_12h_ptn = NULL;
+ if (pData->time_24h_ptn) {
+ free(pData->time_24h_ptn);
+ pData->time_24h_ptn = NULL;
}
- if (thread_data->time_24h_ptn) {
- free(thread_data->time_24h_ptn);
- thread_data->time_24h_ptn = NULL;
+ if (pData->th) {
+ elm_theme_extension_del(pData->th, MSG_THREAD_THEME);
+ elm_theme_free(pData->th);
+ pData->th = NULL;
}
- if (thread_data->del_thread) {
- if (ecore_thread_cancel(thread_data->del_thread) == EINA_FALSE) {
+ if (pData->noti_fd) {
+ if (heynoti_unsubscribe(pData->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(pData->noti_fd);
+ }
+
+}
+
+PMSG_THREAD_LIST_DATA msg_ui_thread_create_thread_list_data(ThreadMsgListType list_type, ThreadMsgListAppDataType app_data_type)
+{
+ int i = 0;
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)calloc(1, sizeof(MSG_THREAD_LIST_DATA));
+
+ if (!pListData) {
+ D_MSG("calloc error");
+ return NULL;
+ }
+ bzero(pListData, sizeof(MSG_THREAD_LIST_DATA));
+
+ pListData->view_mode = THREAD_NORMAL_VIEW;
+ pListData->list_type = list_type;
+ pListData->app_data_type = app_data_type;
+ pListData->search_mode = THREAD_SEARCH_OFF;
+
+ for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) {
+ if (pData->list_data[i] == NULL) {
+ pData->list_data[i] = pListData;
+ break;
+ }
+ }
+ return pListData;
+}
+
+void msg_ui_thread_destroy_thread_list_data(PMSG_THREAD_LIST_DATA pListData)
+{
+ int i = 0, j = 0;
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+ if (!pListData)
+ return;
+
+ if (pListData->del_thread) {
+ if (ecore_thread_cancel(pListData->del_thread) == EINA_FALSE) {
D_MSG("ecore_thread_cancel is done.");
} else {
D_MSG("ecore_thread_cancel is failed.");
}
- thread_data->del_thread = NULL;
+ pListData->del_thread = NULL;
}
- if (thread_data->e_timer) {
- ecore_timer_del(thread_data->e_timer);
- thread_data->e_timer = NULL;
+ for (i = MSG_THREAD_LIST_MAX_COUNT-1; i >= 0; i--) {
+ if (pData->list_data[i] != NULL && pData->list_data[i] == pListData) {
+ free(pListData);
+ pData->list_data[i] = NULL;
+
+ for (j = i; j < MSG_THREAD_LIST_MAX_COUNT-2; j++) {
+ pData->list_data[j] = pData->list_data[j+1];
+ pData->list_data[j+1] = NULL;
+ }
+ break;
+ }
}
+}
+
+PMSG_THREAD_LIST_DATA msg_ui_thread_get_default_list(void)
+{
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+ int i = 0;
+
+ if (pData == NULL)
+ return 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;
+ for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) {
+ if (pData->list_data[i] != NULL && pData->list_data[i]->list_type == THREAD_NORMAL_LIST_TYPE) {
+ pListData = pData->list_data[i];
+ break;
+ }
}
- 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 !!");
+ return pListData;
+}
+
+PMSG_THREAD_LIST_DATA msg_ui_thread_get_current_list(void)
+{
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+ int i = 0;
+
+ if (pData == NULL)
+ return NULL;
+
+ for (i = MSG_THREAD_LIST_MAX_COUNT-1; i >= 0; i--) {
+ if (pData->list_data[i] != NULL) {
+ pListData = pData->list_data[i];
+ break;
}
- heynoti_close(thread_data->noti_fd);
}
+
+ return pListData;
}
-Evas_Object *msg_ui_thread_create_layout_main(Evas_Object *parent)
+PMSG_THREAD_LIST_DATA msg_ui_thread_get_prev_list(PMSG_THREAD_LIST_DATA pListData)
+{
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_THREAD_LIST_DATA pPrevList = NULL;
+ int i = 0;
+
+ for (i = MSG_THREAD_LIST_MAX_COUNT-1; i > 0; i--) {
+ if (pData->list_data[i] == pListData) {
+ pPrevList = pData->list_data[i-1];
+ break;
+ }
+ }
+
+ return pPrevList;
+}
+
+Evas_Object *msg_ui_thread_create_layout_main(PMSG_THREAD_DATA pData)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL");
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, pData == NULL || pData->win_main == NULL, NULL, "pData is NULL");
- PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
Evas_Object *bg;
Evas_Object *layout;
- bg = elm_bg_add(parent);
+ bg = elm_bg_add(pData->win_main);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
- layout = elm_layout_add(parent);
+ layout = elm_layout_add(pData->win_main);
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_win_resize_object_add(pData->win_main, bg);
elm_object_part_content_set(layout, "elm.swallow.bg", bg);
evas_object_show(layout);
+ evas_event_callback_add(evas_object_evas_get(layout), EVAS_CALLBACK_RENDER_FLUSH_POST, __main_layout_flush_post_cb, NULL);
+
pData->navi_frame = elm_naviframe_add(layout);
elm_object_part_content_set(layout, "elm.swallow.content", pData->navi_frame);
@@ -193,15 +300,117 @@ Evas_Object *msg_ui_thread_create_layout_main(Evas_Object *parent)
return layout;
}
-Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData)
+void msg_ui_thread_load_thread_view(void *data, service_h service)
{
+ if (!data)
+ return;
+
+ PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+
+ pListData = msg_ui_thread_create_thread_list_data(THREAD_NORMAL_LIST_TYPE, THREAD_LIST_APP_DATA_THREAD);
+ msg_ui_thread_fullview_launch(pData, pListData);
+ msg_ui_thread_list_load(pListData, TRUE);
+
+ /* Search mode from live-box */
+ char *key_type = NULL;
+
+ service_get_extra_data(service, MSG_BUNDLE_KEY_TYPE, &key_type);
+ if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_SEARCH_MODE) == 0) {
+ if (pListData->searchbar)
+ elm_object_focus_set(pListData->searchbar, EINA_TRUE);
+ }
+}
+
+void msg_ui_thread_load_message_box(int list_type)
+{
+ D_ENTER;
+
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ PMSG_THREAD_LIST_DATA pListData = NULL;
+
+ pListData = msg_ui_thread_create_thread_list_data(list_type, THREAD_LIST_APP_DATA_MSG);
+ msg_ui_thread_fullview_launch(pData, pListData);
+ msg_ui_thread_msg_list_load(pListData, list_type);
+
+ D_LEAVE;
+}
+
+void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData, PMSG_THREAD_LIST_DATA pListData)
+{
+ char label[DEF_BUF_LEN_S+1] = {0,};
+
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !pData || !pListData, "pData or pListData is NULL");
+
+ pListData->toolbar = msg_ui_thread_create_toolbar(pData->navi_frame);
+ msg_ui_thread_set_navi_controlbar_item(pListData);
+
+ pListData->content_ly = msg_ui_thread_create_content_layout(pData->navi_frame);
+ pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame);
+
+ pListData->searchbar = msg_ui_thread_create_searchbar_layout(pListData->content_ly, pListData);
+ elm_object_part_content_set(pListData->content_ly, "sel_all", pListData->searchbar);
+
+ pListData->genlist = msg_ui_thread_create_genlist(pListData->content_ly, pListData);
+ elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist);
+ //evas_object_data_set(pListData->genlist, "pData", pListData);
+
+ if (msg_ui_thread_get_prev_list(pListData) == NULL)
+ elm_win_conformant_set(pData->win_main, 1);
+ pListData->conform = elm_conformant_add(pData->navi_frame);
+ elm_object_style_set(pListData->conform, "internal_layout");
+ evas_object_size_hint_weight_set(pListData->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(pListData->conform);
+ elm_object_content_set(pListData->conform, pListData->content_ly);
+
+ pListData->back_btn = elm_button_add(pData->navi_frame);
+ elm_object_style_set(pListData->back_btn, "naviframe/back_btn/default");
+ //evas_object_data_set(pListData->back_btn, "more_data", pListData);
+ evas_object_smart_callback_add(pListData->back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *)pListData);
+
+ switch (pListData->list_type) {
+ case THREAD_NORMAL_LIST_TYPE:
+ strncpy(label, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"), sizeof(label));
+ break;
+ case THREAD_SPAM_LIST_TYPE:
+ strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"), sizeof(label));
+ break;
+ case THREAD_SIM_LIST_TYPE:
+ strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES"), sizeof(label));
+ break;
+ case THREAD_CBMSG_LIST_TYPE:
+ strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"), sizeof(label));
+ break;
+ case THREAD_SCHEDULED_LIST_TYPE:
+ strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"), sizeof(label));
+ break;
+ case THREAD_DRAFT_LIST_TYPE:
+ strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_DRAFT_ABB"), sizeof(label));
+ break;
+ case THREAD_LOCKED_LIST_TYPE:
+ strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"), sizeof(label));
+ break;
+ default:
+ D_MSG("[ERROR] invalid viewmode");
+ return;
+ }
- if (!pData)
+ pListData->nf_it = elm_naviframe_item_push(pData->navi_frame, label, pListData->back_btn, NULL, pListData->conform, NULL);
+ elm_object_item_part_content_set(pListData->nf_it, "controlbar", pListData->toolbar);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object *msg_ui_thread_create_searchbar_layout(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ if (!pListData)
return NULL;
Evas_Object *layout = NULL;
- layout = elm_layout_add(pData->content_ly);
+ layout = elm_layout_add(parent);
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);
@@ -215,8 +424,6 @@ Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData)
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);
@@ -229,10 +436,10 @@ Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData)
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_smart_callback_add(entry, "focused", msg_ui_thread_searchbar_entry_focus_cb, (void *)pListData);
+ evas_object_smart_callback_add(entry, "unfocused", msg_ui_thread_searchbar_entry_unfocus_cb, (void *)pListData);
+ evas_object_smart_callback_add(cancel_button, "clicked", msg_ui_thread_searchbar_cancel_click_cb, (void *)pListData);
+ elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", msg_ui_thread_searchbar_eraser_clicked_cb, (void *)pListData);
evas_object_show(layout);
@@ -241,35 +448,38 @@ Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData)
return layout;
}
-Evas_Object *msg_ui_thread_create_genlist(PMSG_THREAD_DATA pData)
+Evas_Object *msg_ui_thread_create_genlist(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData)
{
D_ENTER;
- if (!pData)
+ if (!pListData)
return NULL;
Evas_Object *genlist = NULL;
- genlist = elm_genlist_add(pData->content_ly);
+ genlist = elm_genlist_add(parent);
elm_genlist_homogeneous_set(genlist, EINA_TRUE);
- elm_object_theme_set(genlist, pData->th);
- msg_ui_thread_genlist_style_set(pData);
+ evas_object_smart_callback_add(genlist, "drag,start,right", msg_ui_thread_gl_mode_right, (void *)pListData);
+ evas_object_smart_callback_add(genlist, "drag,start,left", msg_ui_thread_gl_mode_left, (void *)pListData);
- pData->itc = &(pData->itc_thread); /* default setting */
+ /** "3text.tb" style is only supported COMPRESS MODE */
+ /** "3text.1icon" and "1text" are suported COMPRESS MODE also */
+ elm_genlist_mode_set(genlist, ELM_LIST_SCROLL);
+ msg_ui_thread_genlist_style_set(pListData);
D_LEAVE;
return genlist;
}
-Evas_Object *msg_ui_thread_create_content_layout(PMSG_THREAD_DATA pData)
+Evas_Object *msg_ui_thread_create_content_layout(Evas_Object *parent)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
/* Content layout */
Evas_Object *layout;
- layout = elm_layout_add(pData->navi_frame);
+ layout = elm_layout_add(parent);
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);
@@ -279,14 +489,13 @@ Evas_Object *msg_ui_thread_create_content_layout(PMSG_THREAD_DATA pData)
return layout;
}
-
-Evas_Object *msg_ui_thread_create_nocontent_layout(PMSG_THREAD_DATA pData)
+Evas_Object *msg_ui_thread_create_nocontent_layout(Evas_Object *parent)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
Evas_Object *noc_layout = NULL;
- noc_layout = elm_layout_add(pData->navi_frame);
+ noc_layout = elm_layout_add(parent);
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"));
@@ -295,6 +504,18 @@ Evas_Object *msg_ui_thread_create_nocontent_layout(PMSG_THREAD_DATA pData)
return noc_layout;
}
+Evas_Object *msg_ui_thread_create_toolbar(Evas_Object *parent)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ Evas_Object *toolbar = NULL;
+
+ toolbar = elm_toolbar_add(parent);
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+
+ return toolbar;
+}
+
void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -305,68 +526,137 @@ void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData)
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
-void msg_ui_thread_load_thread_view(void *data, bundle *b)
+void msg_ui_thread_reset_thread_view(void *data, service_h service)
{
if (!data)
return;
- PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+ PMSG_THREAD_LIST_DATA pListData = NULL;
- msg_ui_thread_fullview_launch(pData);
+ pListData = msg_ui_thread_get_current_list();
+ if (pListData == NULL)
+ return;
- msg_ui_thread_list_load(pData);
+ if (pListData->search_mode == THREAD_SEARCH_ON)
+ elm_object_focus_set(pListData->searchbar, EINA_TRUE);
- /* 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);
- }
+ if (pListData->sel_thread_id > 0)
+ msg_ui_thread_list_item_update(pListData, pListData->sel_thread_id);
-}
+ if (pListData->sel_msg_id > 0)
+ msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id);
-void msg_ui_thread_reset_thread_view(void *data, bundle *b)
-{
- if (!data)
- return;
+ pListData->sel_gen_item = NULL;
+ pListData->sel_thread_id = 0;
+ pListData->sel_msg_id = 0;
+
+ pListData->view_mode = THREAD_NORMAL_VIEW;
}
-PMSG_THREAD_DATA msg_ui_thread_get_data(void)
+void msg_ui_thread_rotation_set(void *data, int rot)
{
+ PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
- if (g_data)
- return g_data;
- else
- return NULL;
+ if (!pData)
+ return;
+ if (rot == THREAD_ROTATE_ANGLE_LANDSCAPE || rot == THREAD_ROTATE_ANGLE_LANDSCAPE_UPSIDEDOWN)
+ pData->isRotate = true;
+ else
+ pData->isRotate = false;
}
-void msg_ui_thread_add_navi_controlbar_item(PMSG_THREAD_DATA pData)
+void msg_ui_thread_set_navi_controlbar_item(PMSG_THREAD_LIST_DATA pListData)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- if (!pData)
+ if (!pListData)
return;
- int i;
+ Evas_Object *toolbar = pListData->toolbar;
+ int i = 0;
for (i = 0; i < MSG_THREAD_CONTROLBAR_ITEM_NUM; i++) {
- if (pData->toolbar_item[i])
- elm_object_item_del(pData->toolbar_item[i]);
+ if (pListData->toolbar_item[i])
+ elm_object_item_del(pListData->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);
+ if (pListData->view_mode == THREAD_EDIT_VIEW) {
+ pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \
+ msg_ui_thread_ctlbar_del_cb, (void *)pListData);
+ pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_CANCEL, NULL, \
+ msg_ui_thread_ctlbar_cancel_cb, (void *)pListData);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE);
+ } else {
+ switch (pListData->list_type) {
+ case THREAD_NORMAL_LIST_TYPE:
+ pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_COMPOSE, NULL, \
+ msg_ui_thread_ctlbar_compose_cb, (void *)pListData);
+ pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \
+ msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData);
+ pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_MORE, NULL, \
+ msg_ui_thread_ctlbar_message_box_cb, pListData);
+
+ if (pListData->item_cnt <= 0)
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+ break;
+
+ case THREAD_SPAM_LIST_TYPE:
+ pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \
+ msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData);
+ pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_SETTINGS, NULL, \
+ msg_ui_thread_ctlbar_spam_setting_cb, (void *)pListData);
+ pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+
+ if (pListData->item_cnt <=0)
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE);
+ break;
+
+ case THREAD_CBMSG_LIST_TYPE:
+ case THREAD_DRAFT_LIST_TYPE:
+ pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \
+ msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData);
+ pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+
+ if (pListData->item_cnt <=0)
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE);
+ break;
+
+ case THREAD_LOCKED_LIST_TYPE:
+ case THREAD_SIM_LIST_TYPE:
+ case THREAD_SCHEDULED_LIST_TYPE:
+ pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_EDIT, NULL, \
+ msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData);
+ pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+
+ if (pListData->item_cnt <=0)
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
+
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE);
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE);
+ break;
+ default:
+ D_MSG("[ERROR] invalid viewmode");
+ return;
+ }
+ }
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
index 0de6db4..1ed004f 100755
--- a/thread/src/msg-ui-thread-util.c
+++ b/thread/src/msg-ui-thread-util.c
@@ -16,20 +16,329 @@
#include "msg-ui-thread-main.h"
#include "appsvc.h"
+#include <status.h>
-void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData)
+static void __msg_ui_thread_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
+static void __msg_ui_thread_ug_destroy_cb(ui_gadget_h ug, void *priv);
+static Evas_Object *__msg_ui_thread_create_msg_detail_layout(Evas_Object* parent);
+static Evas_Object* __msg_ui_thread_create_msg_detail_content(Evas_Object *parent, void *data, int msg_id);
+static void __msg_ui_thread_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_thread_del_popup_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_thread_del_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+
+
+int msg_ui_thread_launch_voice_call(const char *call_num)
{
- int r;
- enum appcore_time_format timeformat;
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- r = appcore_get_timeformat(&timeformat);
- if (r == MSG_UI_RET_ERR)
- timeformat = APPCORE_TIME_FORMAT_UNKNOWN;
+ int ret = -1; /* negative values are error value */
+ service_h svc_handle;
- if (timeformat == APPCORE_TIME_FORMAT_24)
- pData->time_fmt = MSG_TIME_FORMAT_24H;
- else
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ char telnum[255] = {0,};
+ service_set_operation(svc_handle, APPSVC_OPERATION_CALL);
+ snprintf(telnum, sizeof(telnum), "tel:%s", call_num); /* Number to make a call */
+ service_set_uri(svc_handle, telnum);
+ ret = service_send_launch_request(svc_handle, NULL, NULL);
+
+ service_destroy(svc_handle);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return ret;
+}
+
+int msg_ui_thread_launch_video_call(const char *call_num)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ int ret = AUL_R_OK;
+
+ bundle *b = bundle_create();
+
+ if (b) {
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, call_num);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE);
+
+ ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b);
+
+ bundle_free(b);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return ret;
+}
+
+void msg_ui_thread_launch_spam_setting(PMSG_THREAD_LIST_DATA pListData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, pListData == NULL);
+
+ pListData->cbs.layout_cb = __msg_ui_thread_ug_layout_cb;
+ pListData->cbs.result_cb = NULL;
+ pListData->cbs.destroy_cb = __msg_ui_thread_ug_destroy_cb;
+ pListData->cbs.priv = (void *)pListData;
+
+ service_h svc_handle = NULL;
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_SPAM_SETTING);
+ pListData->loaded_ug = ug_create(NULL, MSG_SETTING_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &pListData->cbs);
+ service_destroy(svc_handle);
+ }
+}
+
+void msg_ui_thread_launch_viewer_ug(PMSG_THREAD_LIST_DATA pListData, int nMsgId)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, pListData == NULL);
+
+ pListData->cbs.layout_cb = __msg_ui_thread_ug_layout_cb;
+ pListData->cbs.result_cb = NULL;
+ pListData->cbs.destroy_cb = __msg_ui_thread_ug_destroy_cb;
+ pListData->cbs.priv = (void *)pListData;
+
+ service_h svc_handle = NULL;
+ char msgid[10] = {0,};
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ snprintf(msgid, sizeof(msgid), "%d", nMsgId);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, msgid);
+ pListData->loaded_ug = ug_create(NULL, MSG_VIEWER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &pListData->cbs);
+ service_destroy(svc_handle);
+ }
+
+ if (pListData->loaded_ug) {
+ msg_ui_thread_show_notify(pListData, "Unable to open message");
+ return;
+ }
+
+ D_LEAVE;
+}
+
+static void __msg_ui_thread_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+ D_ENTER;
+
+ if (!ug || !priv)
+ return;
+
+ Evas_Object *base, *win;
+
+ 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;
+ }
+}
+
+static void __msg_ui_thread_ug_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ D_ENTER;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug || !priv);
+
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)priv;
+
+ if (ug == pListData->loaded_ug) {
+ ug_destroy(ug);
+ pListData->loaded_ug = NULL;
+ }
+
+ if (pListData->search_mode == THREAD_SEARCH_ON)
+ elm_object_focus_set(pListData->searchbar, EINA_TRUE);
+
+ if (pListData->sel_msg_id) {
+ msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id);
+
+ pListData->sel_gen_item = NULL;
+ pListData->sel_msg_id = 0;
+ }
+}
+
+void msg_ui_thread_launch_msg_detail_view(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_MSG_DATA_S item_data)
+{
+ D_ENTER;
+
+ if (!pListData) {
+ D_EMSG("[ERROR] pListData is NULL");
+ return;
+ }
+
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+ Evas_Object *detail_layout = NULL;
+ Evas_Object *content = NULL;
+
+ // create layout
+ detail_layout = __msg_ui_thread_create_msg_detail_layout(pData->navi_frame);
+
+ // create content layout
+ content = __msg_ui_thread_create_msg_detail_content(detail_layout, pData, item_data->msg_id);
+ elm_object_part_content_set(detail_layout, "elm.swallow.content", content);
+
+ //push navi item
+ char title[DEF_BUF_LEN] = {0, };
+
+ if (item_data->contact_id > 0 && item_data->display_name[0] != '\0') {
+ strncpy(title, item_data->display_name, sizeof(title)-1);
+ } else {
+ if (item_data->address[0] != '\0')
+ strncpy(title, item_data->address, sizeof(title)-1);
+ else
+ strncpy(title, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"), sizeof(title)-1);
+ }
+
+ elm_naviframe_item_push(pData->navi_frame, title, NULL, NULL, detail_layout, NULL);
+
+ if (pListData->sel_msg_id) {
+ msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id);
+
+ pListData->sel_gen_item = NULL;
+ pListData->sel_msg_id = 0;
+ }
+
+ D_LEAVE;
+}
+
+static Evas_Object *__msg_ui_thread_create_msg_detail_layout(Evas_Object* parent)
+{
+ D_ENTER;
+
+ Evas_Object *layout = NULL;
+
+ 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);
+
+ return layout;
+}
+
+static Evas_Object* __msg_ui_thread_create_msg_detail_content(Evas_Object *parent, void *data, int msg_id)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, NULL);
+
+ PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
+
+ Evas_Object *scroller;
+ Evas_Object *entry;
+
+ char buf[MAX_MSG_TEXT_LEN+1] = {0, };
+ char *str = NULL;
+ msg_error_t err = MSG_SUCCESS;
+
+ int msgSize = 0;
+ /** create 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);
+
+ /** create entry */
+ entry = elm_entry_add(scroller);
+ evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0.0);
+ evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
+ elm_entry_editable_set(entry, EINA_FALSE);
+ elm_object_content_set(scroller, entry);
+ evas_object_show(entry);
+
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ if (msgInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_create_struct(MSG_STRUCT_MESSAGE_INFO) is failed!");
+ return NULL;
+ }
+
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+ if (sendOpt == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_create_struct(MSG_STRUCT_SENDOPT) is failed!");
+ msg_release_struct(&msgInfo);
+ return NULL;
+ }
+
+ err = msg_get_message(pData->msgHandle, (msg_message_id_t)msg_id, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message() is failed : err = %d", err);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return NULL;
+ }
+
+ msg_get_int_value(msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize);
+ if (msgSize > 0) {
+ int msgType = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msgType);
+
+ if (msgType == MSG_TYPE_MMS_NOTI) {
+ char subject[DEF_BUF_LEN_S+1] = {0,};
+
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, subject, DEF_BUF_LEN_S);
+ if (strlen(subject) > 0) {
+ snprintf(buf, sizeof(buf), "%s", subject);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value(MSG_MESSAGE_SUBJECT_STR) is failed !!");
+ snprintf(buf, sizeof(buf), "Message subject is empty !!");
+ }
+ } else {
+ char msgText[msgSize + 1];
+ memset(msgText, 0, msgSize + 1);
+
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, msgText, msgSize);
+ if (strlen(msgText) > 0) {
+ snprintf(buf, sizeof(buf), "%s", msgText);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value(MSG_MESSAGE_SMS_DATA_STR) is failed !!");
+ snprintf(buf, sizeof(buf), "Message is empty !!");
+ }
+ }
+ } else
+ snprintf(buf, sizeof(buf), "Message is empty !!");
+
+ buf[MAX_MSG_TEXT_LEN] = '\n';
+ str = elm_entry_utf8_to_markup(buf);
+ elm_object_text_set(entry, str);
+
+ if (str != NULL) {
+ free(str);
+ str = NULL;
+ }
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ return scroller;
+}
+
+void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData)
+{
+ int timeformat = msg_common_get_timeformat();
+
+ if (timeformat == MSG_TIME_FORMAT_UNKNOWN)
pData->time_fmt = MSG_TIME_FORMAT_12H;
+ else
+ pData->time_fmt = timeformat;
D_MSG("%s", pData->time_fmt == MSG_TIME_FORMAT_24H ? "TIME FORMAT = 24h" : "TIME FORMAT = 12h");
}
@@ -47,100 +356,146 @@ void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData)
D_MSG("Locale = %s", pData->locale);
}
-bundle *msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data)
+void msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data, service_h svc_handle)
{
MSG_UI_ENTER();
- MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !item_data || !svc_handle);
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);
+ snprintf(buf, DEF_BUF_LEN_S, "%d", item_data->thread_id);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_NAME, item_data->thread_name);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact);
MSG_UI_LEAVE();
- return b;
}
-void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_DATA pData)
+void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_LIST_DATA pListData)
{
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);
+ elm_check_state_set(pListData->sel_all_box, EINA_FALSE);
+ it = elm_genlist_first_item_get(pListData->genlist);
while (it) {
- item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(it);
- if (item_data)
- item_data->isCheck = EINA_FALSE;
+ if (elm_genlist_item_parent_get(it) == NULL) {
+ it = elm_genlist_item_next_get(it);
+ continue;
+ }
+
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
+ PMSG_APP_THREAD_DATA_S item_data = NULL;
+
+ item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(it);
+ if (item_data)
+ item_data->is_check = EINA_FALSE;
+ } else {
+ PMSG_APP_THREAD_MSG_DATA_S item_data = NULL;
+
+ item_data = (PMSG_APP_THREAD_MSG_DATA_S)elm_object_item_data_get(it);
+ if (item_data)
+ item_data->is_check = EINA_FALSE;
+ }
it = elm_genlist_item_next_get(it);
}
- pData->chk_list = eina_list_free(pData->chk_list);
+ pListData->chk_list = eina_list_free(pListData->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_object_part_content_unset(pListData->content_ly, "sel_all");
+ evas_object_hide(pListData->sel_all_ly);
+ elm_object_part_content_set(pListData->content_ly, "sel_all", pListData->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;
+ elm_genlist_decorate_mode_set(pListData->genlist, EINA_FALSE);
+ elm_genlist_select_mode_set(pListData->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ pListData->view_mode = THREAD_NORMAL_VIEW;
}
-void msg_ui_thread_show_normal_mode(PMSG_THREAD_DATA pData)
+
+void msg_ui_thread_show_normal_mode(PMSG_THREAD_LIST_DATA pListData)
{
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 (pListData->view_mode == THREAD_EDIT_VIEW)
+ msg_ui_thread_cancel_edit_mode(pListData);
- 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;
+ if (pListData->select_info) {
+ evas_object_del(pListData->select_info);
+ pListData->select_info = NULL;
}
- msg_ui_thread_add_navi_controlbar_item(pData);
+ if (!pListData->back_btn) {
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
- 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");
+ pListData->back_btn = elm_button_add(pData->navi_frame);
+ evas_object_smart_callback_add(pListData->back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *)pListData);
+ elm_object_style_set(pListData->back_btn, "naviframe/back_btn/default");
}
- elm_object_item_part_content_set(pData->nf_it, "prev_btn", pData->back_btn);
+
+ msg_ui_thread_set_navi_controlbar_item(pListData);
+
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE)
+ elm_object_item_text_set(pListData->nf_it, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"));
+ else if (pListData->list_type == THREAD_SPAM_LIST_TYPE)
+ elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"));
+ else if (pListData->list_type == THREAD_SIM_LIST_TYPE)
+ elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES"));
+ else if (pListData->list_type == THREAD_CBMSG_LIST_TYPE)
+ elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"));
+
+ elm_object_item_part_content_set(pListData->nf_it, "prev_btn", pListData->back_btn);
+ elm_naviframe_item_title_visible_set(pListData->nf_it, EINA_TRUE);
D_LEAVE;
}
-void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_DATA pData, int thread_id)
+void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_LIST_DATA pListData, int thread_id)
{
-
if (thread_id <= 0)
return;
Elm_Object_Item *gen_item = NULL;
- gen_item = elm_genlist_first_item_get(pData->genlist);
+ gen_item = elm_genlist_first_item_get(pListData->genlist);
while (gen_item) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
+
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;
+ if (thread_id == item_data->thread_id) {
+ pListData->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);
+}
+
+void msg_ui_thread_select_item_by_msg_id(PMSG_THREAD_LIST_DATA pListData, int msg_id)
+{
+ if (msg_id <= 0)
+ return;
+
+ Elm_Object_Item *gen_item = NULL;
+ gen_item = elm_genlist_first_item_get(pListData->genlist);
+
+ while (gen_item) {
+ if (elm_genlist_item_parent_get(gen_item) == NULL) {
+ gen_item = elm_genlist_item_next_get(gen_item);
+ continue;
+ }
+
+ PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)elm_object_item_data_get(gen_item);
+ if (msg_id == item_data->msg_id) {
+ pListData->sel_gen_item = gen_item;
break;
}
@@ -150,57 +505,170 @@ void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_DATA pData, int thread_i
elm_genlist_item_show(gen_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
}
-static void __popup_response_cb(void *data, Evas_Object *obj, void *event_info)
+void msg_ui_thread_show_notify(PMSG_THREAD_LIST_DATA pListData, const char *msg)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
+
+ Evas_Object *popup;
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+ popup = elm_popup_add(pData->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", __msg_ui_thread_popup_response_cb, pListData);
+ elm_popup_timeout_set(popup, 0.8);
+ evas_object_show(popup);
+
+ pListData->popup = popup;
+}
+
+static void __msg_ui_thread_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;
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
if ((int)event_info != 5 && obj) {
evas_object_del(obj);
- threadData->popup = NULL;
+ pListData->popup = NULL;
}
MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
}
-void msg_ui_thread_show_notify(PMSG_THREAD_DATA threadData, const char *msg)
+void msg_ui_thread_show_del_popup(PMSG_THREAD_LIST_DATA pListData, const char *msg)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
- MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !threadData);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
Evas_Object *popup;
+ Evas_Object *btn_ok;
+ Evas_Object *btn_cancel;
- popup = elm_popup_add(threadData->navi_frame);
+ popup = elm_popup_add(pListData->content_ly);
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);
+ 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_ui_thread_del_popup_ok_clicked_cb, pListData);
+
+ 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_ui_thread_del_popup_cancel_clicked_cb, pListData);
+
+ evas_object_data_set(popup, MSG_THREAD_POPUP_DATA, MSG_THREAD_DEL_CONFIRM);
evas_object_show(popup);
- threadData->popup = popup;
+ pListData->popup = popup;
+
+}
+
+static void __msg_ui_thread_del_popup_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
+ Elm_Object_Item *it_dateline = NULL;
+ PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
+
+ int err;
+ const Elm_Object_Item *it = NULL;
+
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ }
+
+ it = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+
+ if (!it)
+ goto __UNABLE_TO_DELETE;
+
+ if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
+ PMSG_APP_THREAD_DATA_S item_data = elm_object_item_data_get(it);
+ if (!item_data)
+ goto __UNABLE_TO_DELETE;
+
+ err = msg_delete_thread_message_list(msg_ui_thread_get_data_handle(), item_data->thread_id);
+ if (err != MSG_SUCCESS)
+ goto __UNABLE_TO_DELETE;
+ } else {
+ PMSG_APP_THREAD_MSG_DATA_S item_data = elm_object_item_data_get(it);
+ if (!item_data)
+ goto __UNABLE_TO_DELETE;
+
+ err = msg_delete_message(msg_ui_thread_get_data_handle(), item_data->msg_id);
+ if (err != MSG_SUCCESS)
+ goto __UNABLE_TO_DELETE;
+ }
+
+ it_dateline = elm_genlist_item_parent_get((Elm_Object_Item *)it);
+ if (it_dateline) {
+ dateline_data = elm_object_item_data_get(it_dateline);
+
+ if (dateline_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subitem_cnt : %d", dateline_data->subitem_cnt);
+ dateline_data->subitem_cnt--;
+ if (dateline_data->subitem_cnt == 0)
+ elm_object_item_del((Elm_Object_Item *)it_dateline);
+ }
+ }
+ elm_object_item_del((Elm_Object_Item *)it);
+
+ msg_ui_thread_show_deleted_info(pListData);
+ pListData->item_cnt--;
+ if (pListData->item_cnt == 0) {
+ if (pListData->list_type == THREAD_NORMAL_LIST_TYPE)
+ msg_ui_thread_list_load(pListData, FALSE);
+ else
+ msg_ui_thread_msg_list_load(pListData, pListData->list_type);
+ }
+
+ return;
+
+__UNABLE_TO_DELETE:
+ msg_ui_thread_show_notify(pListData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+
+ return;
}
-Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_DATA threadData, int count)
+static void __msg_ui_thread_del_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
- MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !threadData, NULL);
+ if (pListData->popup) {
+ evas_object_del(pListData->popup);
+ pListData->popup = NULL;
+ }
+}
+
+Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_LIST_DATA pListData, int count)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !pListData, NULL);
Evas_Object *popup, *progressbar, *box, *label;
char buf[DEF_BUF_LEN_S] = {0,};
- popup = elm_popup_add(threadData->navi_frame);
+ popup = elm_popup_add(pListData->content_ly);
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);
+// ToDo: Check More
+// elm_label_text_align_set(label, "center");
evas_object_show(label);
progressbar = elm_progressbar_add(popup);
@@ -219,41 +687,54 @@ Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_DATA threadD
evas_object_show(popup);
- threadData->progressbar = progressbar;
- threadData->progresslabel = label;
+ pListData->progressbar = progressbar;
+ pListData->progresslabel = label;
return popup;
}
-void msg_ui_thread_show_select_info(PMSG_THREAD_DATA pData)
+void msg_ui_thread_show_select_info(PMSG_THREAD_LIST_DATA pListData)
{
MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
- MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData);
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
- if (!pData->select_info) {
- pData->select_info = elm_notify_add(pData->navi_frame);
- elm_notify_orient_set(pData->select_info, ELM_NOTIFY_ORIENT_BOTTOM);
+ if (!pListData->select_info) {
+ pListData->select_info = elm_notify_add(pData->navi_frame);
+ elm_notify_orient_set(pListData->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);
+ pListData->selectioninfo_layout = elm_layout_add(pData->navi_frame);
+ elm_object_content_set(pListData->select_info, pListData->selectioninfo_layout);
}
- elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64");
+ if (pData->isRotate)
+ elm_layout_theme_set(pListData->selectioninfo_layout, "standard", "selectioninfo", "horizontal/bottom_64");
+ else
+ elm_layout_theme_set(pListData->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);
+ if (pListData->check_cnt == 0) {
+ evas_object_hide(pListData->select_info);
+ elm_object_item_disabled_set(pListData->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);
+ snprintf(text, sizeof(text), "%s (%d)", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_POP_SPACE_SELECTED"), pListData->check_cnt);
+ edje_object_part_text_set(_EDJ(pListData->selectioninfo_layout), "elm.text", text);
+ evas_object_show(pListData->select_info);
+
+ elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE);
}
}
+void msg_ui_thread_show_deleted_info(PMSG_THREAD_LIST_DATA pListData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
+
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
+}
+
void msg_ui_thread_set_app_state(int app_state)
{
if (app_state <= MSG_UI_STATE_NONE || app_state >= MSG_UI_STATE_MAX)
@@ -264,6 +745,17 @@ void msg_ui_thread_set_app_state(int app_state)
if (!pData)
return;
+ if (app_state == MSG_UI_STATE_PAUSE) {
+ Elm_Object_Item* it_sweep = NULL;
+ PMSG_THREAD_LIST_DATA pListData = msg_ui_thread_get_current_list();
+
+ it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
+ if (it_sweep) {
+ elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+ }
+
pData->app_state = app_state;
}
@@ -274,3 +766,109 @@ int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData)
return pData->app_state;
}
+
+const char *msg_ui_thread_make_search_result_string(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;
+ gchar* markup_text;
+
+ 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 = g_markup_escape_text(&pstr[i], search_len);
+ markup_text_end = g_markup_escape_text(&pstr[search_len], word_len-search_len);
+ snprintf(return_string,
+ DEF_BUF_LEN,
+ "<match>%s</match>%s",
+ (char*)markup_text,
+ (char*)markup_text_end);
+ g_free(markup_text);
+ g_free(markup_text_end);
+ } else {
+ markup_text_start = g_markup_escape_text(&pstr[0], i);
+ markup_text = g_markup_escape_text(&pstr[i], search_len);
+ 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,
+ (char*)markup_text,
+ (char*)markup_text_end);
+ g_free(markup_text_start);
+ g_free(markup_text);
+ g_free(markup_text_end);
+ }
+ } else {
+ snprintf(return_string, DEF_BUF_LEN, "%s", pstr);
+ }
+ }
+
+ return return_string;
+}
+
+
+void msg_ui_thread_make_time_string(time_t *msg_t, char *buf, int buf_len)
+{
+ PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
+
+ time_t cur_t;
+ unsigned long int msg_day, cur_day;
+ int diffday;
+ struct tm msg_time;
+ struct tm cur_time;
+
+ char *date_str = NULL;
+ 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, buf_len, 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, buf_len, " %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, buf_len, " %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, buf_len, " %s ", date_str);
+ }
+ }
+
+ if (date_str)
+ free(date_str);
+}
+
diff --git a/thread/theme/thread_genlist.edc b/thread/theme/thread_genlist.edc
index 38e3f0a..d08ce90 100755
--- a/thread/theme/thread_genlist.edc
+++ b/thread/theme/thread_genlist.edc
@@ -1,15 +1,6 @@
-#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) \
+#define BEAT_GENLIST_PART_BASE(param_item_height) \
part \
{ \
name : "base"; \
@@ -24,158 +15,6 @@
} \
}
-#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{
@@ -230,320 +69,7 @@ collections{
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
+ BEAT_GENLIST_PART_BASE(90)
}
}
}
diff --git a/viewer/CMakeLists.txt b/viewer/CMakeLists.txt
new file mode 100755
index 0000000..90f71c9
--- /dev/null
+++ b/viewer/CMakeLists.txt
@@ -0,0 +1,65 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ug-msg-viewer-efl C)
+
+SET (MSG_VIEWER msg_viewer)
+
+#################################
+# Message Viewer #
+#################################
+
+SET(VIEWER_SRCS
+ ./src/msg-ui-viewer-gadget.c
+ ./src/msg-ui-viewer-main.c
+ ./src/msg-ui-viewer-callback.c
+ ./src/msg-ui-viewer-drm-list.c
+ ./src/msg-ui-viewer-drm-utility.c
+ ./src/msg-ui-viewer-play-view.c
+ ./src/msg-ui-viewer-play-view-callback.c
+ ./src/msg-ui-viewer-item-list.c
+ ./src/msg-ui-viewer-utility.c
+ ./smil-player/src/msg-smil-player.c
+ ./smil-player/src/msg-smil-content-manager.c
+ ./smil-player/src/msg-smil-event-manager.c
+ ./smil-player/src/msg-smil-player-interface.c
+ ./smil-player/src/msg-smil-render.c
+ ./smil-player/src/msg-smil-text-render.c
+ ./smil-player/src/msg-smil-media-render.c
+ ./smil-player/src/msg-smil-util.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_VIEWER_DIR}/include
+ ${CMAKE_SOURCE_MAIN_DIR}
+ ${CMAKE_SOURCE_COMMON_DIR}
+ /usr/include/msg-service/
+ ${CMAKE_SOURCE_VIEWER_DIR}/smil-player/include
+)
+
+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")
+ADD_DEFINITIONS("-DSLP_PROF")
+
+ADD_CUSTOM_TARGET(${MSG_VIEWER}.edj
+ COMMAND edje_cc -id
+ ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image
+ ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edc ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edj
+ DEPENDS ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edc
+)
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${VIEWER_SRCS})
+ADD_DEPENDENCIES(${PROJECT_NAME} ${MSG_VIEWER}.edj)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common)
+
+# Install executable and .edj files.
+#INSTALL(DIRECTORY ${CMAKE_SOURCE_VIEWER_DIR}/data/images/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.png")
+INSTALL(FILES ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edj DESTINATION ${EDJDIR})
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${UGDIR})
+
+#i18n
+#ADD_SUBDIRECTORY(po)
diff --git a/viewer/include/msg-ui-viewer-drm-list.h b/viewer/include/msg-ui-viewer-drm-list.h
new file mode 100755
index 0000000..64aead4
--- /dev/null
+++ b/viewer/include/msg-ui-viewer-drm-list.h
@@ -0,0 +1,100 @@
+/*
+ * 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_VIEWER_DRM_LIST_H__
+#define __MSG_VIEWER_DRM_LIST_H__
+
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include <msg.h>
+#include "msg-ui-viewer-types.h"
+#include <Ecore.h>
+#include <Elementary.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_VIEWER_MAX_ICON_WIDTH 40
+#define MSG_VIEWER_MAX_ICON_HEIGHT 40
+
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+typedef enum {
+ MSG_VIEWER_DRM_LIST_CMD_NONE = 0,
+ MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER,
+} MSG_VIEWER_DRM_LIST_CMD_E;
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+
+typedef struct {
+ char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1];
+ char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1];
+ MmsSmilMediaType media_type;
+} MSG_VIEWER_MEDIA_INFO_S;
+
+typedef struct {
+ void *viewer_main;
+ Evas_Object *main_window;
+ Evas_Object *navi_frame;
+ Evas_Object *genlist;
+
+ msg_message_id_t msgID;
+ msg_handle_t msgHandle;
+ msg_struct_t mms_t;
+
+ MSG_VIEWER_DRM_LIST_CMD_E drm_list_cmd;
+ Elm_Object_Item *selected_item; /*selected item of drm list*/
+ MSG_VIEWER_MEDIA_INFO_S *selected_file_info;/*selected file info.*/
+ Eina_List *drm_list;
+} MSG_DRM_LIST_DATA_S;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+void msg_ui_viewer_drm_list_init(void *data);
+MSG_BOOL msg_ui_viewer_create_drm_list_view(void *data);
+void msg_ui_viewer_destroy_drm_list_view(void *data);
+
+/*
+ *@fn msg_ui_viewer_drm_list_delete_current_list(void *data);
+ *@brief this function is used to delete selected list
+ * @param[in] data MSG_DRM_LIST_DATA_S structure
+ */
+void msg_ui_viewer_drm_list_delete_current_list(void *data);
+
+/*
+ *@fn msg_ui_viewer_drm_list_check_current_ro_valid(void *data);
+ *@brief this function is used to check whether current selected list's ro is valid or not
+ * @param[in] data MSG_DRM_LIST_DATA_S structure
+ * @return return TRUE if ro is valid, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_drm_list_check_current_ro_valid(void *data);
+
+/*
+ *@fn msg_ui_viewer_get_invalid_ro_drm_list(msg_struct_t mms_t, Eina_List *drm_list);
+ *@brief this function is used to get invalid drm list(inavlid ro sd typed)
+ *@param[in] data MMS_MESSAGE_DATA_S structure pointer
+ *@param[out] drm_list invalid drm list will be added
+ *@return return TRUE if invalid drm_list is added, else retrun FALSE
+ */
+MSG_BOOL msg_ui_viewer_get_invalid_ro_drm_list(msg_struct_t mms_t, Eina_List **drm_list);
+
+#endif
+
diff --git a/viewer/include/msg-ui-viewer-drm-utility.h b/viewer/include/msg-ui-viewer-drm-utility.h
new file mode 100755
index 0000000..eed71be
--- /dev/null
+++ b/viewer/include/msg-ui-viewer-drm-utility.h
@@ -0,0 +1,127 @@
+/*
+ * 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_VIEWER_DRM_UTILITY_H__
+#define __MSG_VIEWER_DRM_UTILITY_H__
+
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-ui-viewer-types.h"
+#include <drm_trusted_client.h>
+#include <drm_client.h>
+
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+typedef enum {
+ MSG_UI_DRM_UNDEFINED = DRM_METHOD_TYPE_UNDEFINED,
+ MSG_UI_DRM_TYPE_FL = DRM_METHOD_TYPE_FORWARD_LOCK,
+ MSG_UI_DRM_TYPE_CD = DRM_METHOD_TYPE_COMBINED_DELIVERY,
+ MSG_UI_DRM_TYPE_SD = DRM_METHOD_TYPE_SEPARATE_DELIVERY,
+} MSG_UI_DRM_TYPE_E;
+
+typedef enum {
+ MSG_UI_DRM_RIGHT_PLAY, /*video*/
+ MSG_UI_DRM_RIGHT_DISPLAY, /*image*/
+} MSG_UI_DRM_RIGHT_TYPE_E;
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct {
+ DRM_DECRYPT_HANDLE consume_handle;
+} MSG_UI_DRM_CONSUME_S;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+MSG_BOOL msg_ui_viewer_is_drm_file(const char *filepath);
+
+/*
+ *@fn msg_ui_viewer_get_drm_type(const char *filepath);
+ *@brief This function is used to get drm type, msg_ui_viewer_is_drm_file should be called before calling this api to check whether filepath is drm file or not
+ * @param[in] filepath filepath
+ * @return return TRUE if ro is valid, else FALSE
+ */
+MSG_UI_DRM_TYPE_E msg_ui_viewer_get_drm_type(const char *filepath);
+
+/*
+ *@fn msg_ui_viewer_check_drm_ro_valid(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type);
+ *@brief This function is used to check ro is valid or not, msg_ui_viewer_is_drm_file should be called before calling this api to check whether filepath is drm file or not
+ * @param[in] filepath filepath
+ * @param[in] permission_type permission type to be shown/played
+ * @return return TRUE if ro is valid, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_check_drm_ro_valid(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type);
+
+/*
+ *@fn msg_ui_viewer_get_drm_url(const char *filepath, char *szurl, int szurl_len);
+ *@brief This function is used to check ro is valid or not
+ * @param[in] filepath filepath
+ * @param[in] szurl_len buffer size of szrul
+ * @param[out] szurl will be got url address of ro
+ * @return return TRUE if caller get url address well, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_get_drm_url(const char *filepath, char *szurl, int szurl_len);
+
+/*
+ *@fn msg_ui_viewer_consume_ro_start(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, MSG_UI_DRM_CONSUME_S *consume_t);
+ *@brief This function is used to start to consume ro
+ * @param[in] filepath filepath
+ * @param[in] permission_type permission type to be shown/played
+ * @param[out] consume_t consume handle will be set
+ * @return return TRUE if consume routine is started well, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_consume_ro_start(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, MSG_UI_DRM_CONSUME_S *consume_t);
+
+/*
+ *@fn msg_ui_viewer_consume_ro_pause(MSG_UI_DRM_CONSUME_S *consume_t);
+ *@brief This function is used to pause consume ro, this is used for DRM 2.0(accumulated type)
+ * @param[in] consume_t consume handle
+ * @return return TRUE if consume routine is puased well, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_consume_ro_pause(MSG_UI_DRM_CONSUME_S *consume_t);
+
+/*
+ *@fn msg_ui_viewer_consume_ro_resume(MSG_UI_DRM_CONSUME_S *consume_t);
+ *@brief This function is used to resume consume ro, this is used for DRM 2.0(accumulated type)
+ * @param[in] consume_t consume handle
+ * @return return TRUE if consume routine is resumed well, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_consume_ro_resume(MSG_UI_DRM_CONSUME_S *consume_t);
+
+/*
+ *@fn msg_ui_viewer_consume_ro_stop(MSG_UI_DRM_CONSUME_S *consume_t);
+ *@brief This function is used to stop and close consume ro
+ * @param[in] consume_t consume handle
+ * @return return TRUE if consume routine is stopped and closed well, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_consume_ro_stop(MSG_UI_DRM_CONSUME_S *consume_t);
+
+/*
+ *@fn msg_ui_viewer_get_buffer_from_drm_file(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, unsigned int *buffer_size)
+ *@brief This function is used to get raw data from drm file
+ *@param[in] filepath filepath of drm file
+ *@param[in] permission_type permission type to be shown/played
+ *@param[out] buffer_size buffer size of raw data
+ *@return return allocated raw data pointer of drm file, else NULL.
+ *@Caution Caller should free return pointer after using data.
+ */
+unsigned char *msg_ui_viewer_get_buffer_from_drm_file(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, unsigned int *buffer_size);
+
+#endif
+
diff --git a/viewer/include/msg-ui-viewer-item-list.h b/viewer/include/msg-ui-viewer-item-list.h
new file mode 100755
index 0000000..8671b82
--- /dev/null
+++ b/viewer/include/msg-ui-viewer-item-list.h
@@ -0,0 +1,101 @@
+/*
+ * 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_VIEWER_ITEM_LIST_H__
+#define __MSG_VIEWER_ITEM_LIST_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include <msg.h>
+#include "msg-ui-viewer-types.h"
+
+#include <Ecore.h>
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_MAX_GROUP_LABEL 2
+#define MSG_BUFFER_SIZE_64 64
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+typedef enum {
+ MSG_MEDIA_INVALID = 0,
+ MSG_MEDIA_IMG,
+ MSG_MEDIA_AUDIO,
+ MSG_MEDIA_VIDEO,
+ MSG_MEDIA_TEXT,
+ MSG_MEDIA_ANIMATE,
+ MSG_MEDIA_IMG_OR_VIDEO,
+ MSG_MEDIA_ATTACH, /*for attachment*/
+ MSG_MEDIA_DRM, /*for DRM content*/
+} MSG_MEDIA_TYPE_E;
+
+typedef enum {
+ ITEM_LIST_INFO_INVALID = 0,
+ ITEM_LIST_INFO_INSERT_FILE,
+ ITEM_LIST_INFO_ATTACH_FILE,
+} MSG_ITEM_LIST_INFO_E;
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct {
+ int index;
+ char *group_label;
+} MSG_GROUP_LABEL_S;
+
+typedef struct {
+ void *viewer_main;
+ Evas_Object *main_window;
+ Evas_Object *navi_frame;
+ Evas_Object *popup;
+ Evas_Object *genlist;
+
+ msg_handle_t msgHandle; /*ipc handler between viewer and MF*/
+ msg_message_id_t msgID;
+ msg_struct_t mms_t;
+
+ int insert_item_count; /*inserted content's count, image, sound, video and etc.*/
+ int attach_item_count;
+ Eina_List *insert_list;
+ Eina_List *attach_list;
+
+ Elm_Object_Item *group_item_class;
+ Elm_Genlist_Item_Class item_class;
+ Elm_Genlist_Item_Class title_class;
+
+ MSG_GROUP_LABEL_S group_list[MSG_MAX_GROUP_LABEL];
+} MSG_ITEM_LIST_DATA_S;
+
+typedef struct {
+ char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1];
+ char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1];
+ MSG_MEDIA_TYPE_E emedia_type;
+ MSG_ITEM_LIST_DATA_S *item_list_data;
+} MSG_MEDIA_INFO_S;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+void msg_ui_viewer_init_item_list(void *data);
+MSG_BOOL msg_ui_viewer_create_item_list_view(void *data);
+void msg_ui_viewer_destroy_item_list(void *data);
+
+#endif
+
diff --git a/viewer/include/msg-ui-viewer-main.h b/viewer/include/msg-ui-viewer-main.h
new file mode 100755
index 0000000..14aa7f0
--- /dev/null
+++ b/viewer/include/msg-ui-viewer-main.h
@@ -0,0 +1,177 @@
+/*
+ * 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_VIEWER_MAIN_H__
+#define __MSG_UI_VIEWER_MAIN_H__
+
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include <msg.h>
+#include "msg-ui-viewer-types.h"
+#include "msg-ui-util.h"
+
+#include "msg-ui-viewer-item-list.h"
+#include "msg-ui-viewer-drm-list.h"
+#include "msg-ui-viewer-play-view.h"
+
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_VIEWER_THEME EDJDIR"/msg_viewer.edj"
+
+/*View control CMD defines*/
+#define MSG_VIEWER_VIEW_CMD_NONE 0
+#define MSG_VIEWER_VIEW_CMD_PLAY 0x01
+
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+typedef enum {
+ MSG_VIEWER_PLAYER_VIEW,
+ MSG_VIEWER_DRM_LIST_VIEW,
+ MSG_VIEWER_ITEM_LIST_VIEW
+} MSG_VIEWER_VIEW_MODE_E;
+
+typedef enum {
+ MSG_UG_MODE_FULLVIEW,
+ MSG_UG_MODE_FRAMVIEW,
+ MSG_INVALID_UG_MODE,
+} MSG_UG_LAUNCH_MODE_E;
+
+typedef enum {
+ MSG_VIEWER_FULLVIEW_MODE = 0, /*full view mode include item list*/
+ MSG_VIEWER_PREVIEW_MODE, /*preview mode from composer*/
+ MSG_VIEWER_INVALID_MODE,
+} MSG_VIEWER_LAUNCH_VIEW_MODE_E;
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct _MSG_VIEWER_MAIN_DATA {
+ ui_gadget_h viewer_ug;
+ struct ug_cbs cbs;
+ ui_gadget_h loaded_ug; /*if each view call other ug, then set this loaded_ug by using msg_ui_viewer_set_loaded_ug*/
+
+ Evas_Object *main_window;
+ Evas_Object *layout_main;
+ Evas_Object *bg;
+ Evas_Object *navi_frame; /*if navi_frame is created from which view, then navi_frame should be set by using msg_ui_viewer_set_navi_frame*/
+
+ msg_handle_t msgHandle; /*ipc handler between viewer and MF*/
+ int msgID;
+
+ MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode; /*preview mode or full view mode */
+ void *SmilHandle; /*smilplayer handler*/
+ msg_struct_t msg_t; /* msg info struct */
+ msg_struct_t mms_t; /* mms struct */
+
+ MSG_UG_LAUNCH_MODE_E ug_launch_mode; /*This is a launching ug-mode of viewer, frameview or fullview*/
+
+ MSG_VIEWER_VIEW_MODE_E view_mode;
+ MSG_DRM_LIST_DATA_S *drm_list_view;
+ MSG_ITEM_LIST_DATA_S *item_list_view;
+ MSG_PLAY_DATA_S *player_view;
+
+ Ecore_Idler *del_idler;
+ Eina_List* drm_list;/*set invalid ro drm content*/
+} MSG_VIEWER_MAIN_DATA_S;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+void msg_ui_viewer_main_init(void *data);
+MSG_BOOL msg_ui_viewer_launch(void *data);
+void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode, unsigned int commandType);
+
+/*
+ *@fn msg_ui_viewer_set_loaded_ug(void *data, ui_gadget_h loaded_ug);
+ *@brief this function is used to set loaded ug pointer to MSG_VIEWER_MAIN_DATA_S
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@param[in] loaded_ug loaded ug pointer
+ */
+void msg_ui_viewer_set_loaded_ug(void *data, ui_gadget_h loaded_ug);
+
+/*
+ *@fn msg_ui_viewer_set_navi_frame(void *data, Evas_Object *navi_frame);
+ *@brief this function is used to set navi_frame to MSG_VIEWER_MAIN_DATA_S
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@param[in] navi_frame naviframe pointer
+ */
+void msg_ui_viewer_set_navi_frame(void *data, Evas_Object *navi_frame);
+
+/*
+ *@fn msg_ui_viewer_set_smilhandle(void *data, void *smilhandle);
+ *@brief this function is used to set smilhandle to MSG_VIEWER_MAIN_DATA_S
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@param[in] smilhandle smilhandle
+ */
+void msg_ui_viewer_set_smilhandle(void *data, void *smilhandle);
+
+/*
+ *@fn msg_ui_viewer_get_viewer_launchmode(void *data, MSG_VIEWER_LAUNCH_VIEW_MODE_E *launchmode);
+ *@brief this function is used to get viewer launch mode(preview/fullview)
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@param[out] launchmode MSG_VIEWER_LAUNCH_VIEW_MODE_E mode (preview/fullview)
+ *@return return TRUE if it has launchmode, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_get_viewer_launchmode(void *data, MSG_VIEWER_LAUNCH_VIEW_MODE_E *launchmode);
+
+/*
+ *@fn msg_ui_viewer_get_viewer_ug_mode(void *data, MSG_UG_LAUNCH_MODE_E *ug_mode);
+ *@brief this function is used to get viewer ug launched mode
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@param[out] ug_mode MSG_UG_LAUNCH_MODE_E mode (framview mode/fullview mode)
+ *@return return TRUE if it has viewer ug launchmode, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_get_viewer_ug_mode(void *data, MSG_UG_LAUNCH_MODE_E *ug_mode);
+
+/*
+ *@fn msg_ui_viewer_get_viewer_ug(void *data);
+ *@brief this function is used to get viewer ug pointer
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@return return viewer ug pointer, else NULL
+ */
+ui_gadget_h msg_ui_viewer_get_viewer_ug(void *data);
+
+/*
+ *@fn msg_ui_viewer_get_main_layout(void *data);
+ *@brief this function is used to get layout_main of viewer
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@return return layout_main pointer, else NULL
+ */
+Evas_Object *msg_ui_viewer_get_main_layout(void *data);
+
+/*
+ *@fn msg_ui_viewer_get_bg_layout(void *data);
+ *@brief this function is used to get bg_layout of viewer
+ *@param[in] data MSG_VIEWER_MAIN_DATA_S structure
+ *@return return bg_layout pointer, else NULL
+ */
+Evas_Object *msg_ui_viewer_get_bg_layout(void *data);
+
+Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent);
+Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent);
+/* VIEWER CALLBACK */
+Eina_Bool msg_ui_viewer_ug_quit(void *data);
+void msg_ui_viewer_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
+void msg_ui_viewer_result_cb(ui_gadget_h ug, service_h svc_result_h, void *priv);
+void msg_ui_viewer_destroy_cb(ui_gadget_h ug, void *priv);
+
+#endif /* __MSG_UI_VIEWER_MAIN_H__*/
diff --git a/viewer/include/msg-ui-viewer-play-view.h b/viewer/include/msg-ui-viewer-play-view.h
new file mode 100755
index 0000000..cdac2a6
--- /dev/null
+++ b/viewer/include/msg-ui-viewer-play-view.h
@@ -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.
+ */
+
+#ifndef __MSG_UI_VIEWER_PLAY_VIEW_H__
+#define __MSG_UI_VIEWER_PLAY_VIEW_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include <msg.h>
+
+#include "msg-smil-player-interface.h"
+#include "msg-ui-viewer-types.h"
+
+#include <Ecore.h>
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define VIEWER_TITLE_MENU_GENLIST_MAX_ITEM 3
+#define VIEWER_TITLE_MENU_LINE_HEIGHT 129
+#define VIEWER_ATTACH_GL_ITEM_HEIGHT 114
+#define VIEWER_ATTACH_POPUP_WIDTH 620
+#define VIEWER_TITLE_FONT_LEN 100
+#define VIEWER_TITLE_FONT_STYLE_LEN 60
+#define VIEWER_SUBJECT_MAX_LEN 40
+#define VIEWER_SUBJECT_LINE_WRAP_LENGTH 560
+#define VIEWER_NAVI_FRAME_HEIGHT 98
+#define VIEWER_PAGE_NAVI_ICON_WIDTH 38
+#define VIEWER_PAGE_NAVI_ICON_HEIGHT 38
+#define VIEWER_COLOR_128 128
+#define VIEWER_COLOR_255 255
+
+#define VIEWER_PLAY_CONTROLLER_LIFETIME 3
+#define VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME 1
+#define VIEWER_PLAY_CONTROLLER_HEIGHT 120
+#define VIEWER_NAVIFRAME_BOTTOM_H 114
+
+#define VIEWER_DETAILS_TEXT_SPACE " "
+#define VIEWER_DETAILS_TEXT_COMMA ", "
+#define VIEWER_DETAILS_TEXT_DASH " - "
+#define VIEWER_DETAILS_TEXT_LEFT_BRACE "("
+#define VIEWER_DETAILS_TEXT_RIGHT_BRACE ")"
+#define VIEWER_DETAILS_TEXT_LINE_FEED "<br>"
+#define VIEWER_DETAILS_TEXT_MSG_SIZE_KB 1024
+
+#define MSG_VIEWER_EDJ EDJDIR"/msg_viewer.edj"
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+typedef enum {
+ MSG_VIEWER_PLAY = 0,
+ MSG_VIEWER_PAUSE,
+ MSG_VIEWER_STOP,
+ MSG_VIEWER_CLOSE,
+ MSG_VIEWER_UNKOWN,
+} MSG_VIEWER_PLAY_STATUS_E;
+
+typedef enum {
+ MSG_VIEWER_DEFAULT_MODE = 0,
+ MSG_VIEWER_LOAD_OTHER_UG_MODE, /*launch other ug mode like calling contact ug*/
+ MSG_VIEWER_LOAD_OTHER_APP_MODE, /*launch other application mode like calling voice call*/
+} MSG_VIEWER_LAUNCH_CMD_TYPE_E;
+
+typedef enum {
+ MSG_VIEWER_CMD_NONE = 0,
+ MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT,
+ MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER,
+ MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER,
+ MSG_VIEWER_CMD_LOAD_CALL,
+ MSG_VIEWER_CMD_LOAD_VIDEO_CALL,
+ MSG_VIEWER_CMD_LOAD_BROWSER
+} MSG_VIEWER_CMD_TYPE_E;
+
+typedef enum {
+ MSG_VIEWER_FILE_SAVE_SUCCESS = 0,
+ MSG_VIEWER_FILE_SAVE_FAILED,
+ MSG_VIEWER_FILE_SAVE_INVALID_ERROR,
+} MSG_VIEWER_FILE_SAVE_STATUS_E;
+
+typedef enum {
+ VIEWER_NORMAL_POPUP,
+ VIEWER_SAVE_MODE_POPUP,
+ VIEWER_DELETE_MSG_MODE_POPUP,
+} MSG_VIEWER_POPUP_MODE_E;
+
+typedef enum {
+ MSG_VIEWER_MEDIA_INVALID = 0,
+ MSG_VIEWER_MEDIA_IMG,
+ MSG_VIEWER_MEDIA_AUDIO,
+ MSG_VIEWER_MEDIA_VIDEO,
+ MSG_VIEWER_MEDIA_TEXT,
+ MSG_VIEWER_MEDIA_ANIMATE,
+ MSG_VIEWER_MEDIA_IMG_OR_VIDEO,
+ MSG_VIEWER_MEDIA_ATTACH,
+ MSG_VIEWER_MEDIA_DRM,
+} MSG_VIEWER_MEDIA_TYPE_E;
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct _MSG_VIEWER_ADDR_INFO_S{
+ int contact_id;
+ char address[MAX_ADDRESS_VAL_LEN+1];
+ char name[MAX_DISPLAY_NAME_LEN+1];
+} MSG_VIEWER_ADDR_INFO;
+
+typedef struct _MSG_VIEWER_ADDR_LIST_S{
+ int addr_cnt;
+ MSG_VIEWER_ADDR_INFO addr_info[MAX_TO_ADDRESS_CNT];
+} MSG_VIEWER_ADDR_LIST;
+
+typedef struct _MSG_PLAY_DATA_S {
+ struct ug_cbs cbs;
+ void *viewer_main;
+ Evas_Object *main_window;
+ Evas_Object *navi_frame;
+ Evas_Object *navi_title_layout; /* navi title area layout */
+ Evas_Object *title_button; /* navi title button */
+ Evas_Object *ctrl_toolbar; /* control toolbar */
+ Evas_Object *title_toolbar; /* title tolbar(optionheader) */
+
+ Evas_Object *title_box_layout; /* title box layout for genlist */
+ Evas_Object *title_genlist; /* title genlist for multirecipients */
+ Evas_Object *play_layout; /* play viewer main layout */
+ Evas_Object *subject_index_layout; /* subject / page index */
+ Evas_Object *play_controller; /* play controller */
+ Evas_Object *progressbar; /* progressbar of play controller */
+ Evas_Object *prev_button; /* prev button */
+ Evas_Object *next_button; /* next button */
+ Evas_Object *help_page_gl; /* help page genlist */
+
+ Evas_Object *save_attachment_gl; /* save attachments genlist(controlbar menu) */
+ Evas_Object *save_button; /* save attachment's popup button */
+ Evas_Object *sa_check; /* select all check object in save attachment popup */
+ Eina_Bool isSelectAll; /* check if save attachments select all mode is enable */
+
+ Elm_Object_Item *navi_item; /* naviframe item */
+ Elm_Object_Item *toolbar_item[3]; /* title button toolbar items */
+ Elm_Object_Item *ctrltoolbar_item[4]; /* control toolbar items */
+
+ Evas_Object *popup; /*simple popup*/
+ MSG_VIEWER_POPUP_MODE_E popup_mode; /*simple popup or saved mode popup*/
+ SMIL_SLIDE_CLIENT_CB_PARAM_S *smil_eventStatus;
+
+ int m_x;
+ int m_y;
+ int window_width;
+ int window_height;
+
+ Ecore_Event_Handler *mouse_down_event_handler;
+ Ecore_Event_Handler *mouse_up_event_handler;
+
+ msg_handle_t msgHandle; /*ipc handler between viewer and MF*/
+ msg_struct_t msg_t;
+ msg_struct_t mms_t;
+ int msgID;
+ MSG_VIEWER_LAUNCH_CMD_TYPE_E launch_cmd;
+
+ void *SmilHandle;
+
+ MSG_VIEWER_PLAY_STATUS_E status;
+ MSG_VIEWER_PLAY_STATUS_E previous_status;
+ MSG_VIEWER_CMD_TYPE_E cmd_type;
+
+ int bgcolor;
+ Ecore_Idler *del_idler;
+ Ecore_Timer *play_controller_timer;
+ Ecore_Timer *play_controller_progressbar_timer;
+
+ int ctrl_start_x; /* play controller mouse pointer */
+ int ctrl_start_y; /* play controller mouse pointer */
+
+ int insert_count; /*inserted contents count, except text file*/
+ int attach_count; /*attached contents count*/
+
+ Eina_List *insert_list; /*inserted content list */
+ Eina_List *attach_list; /*attached contents list */
+
+ bool title_optionheader_opened; /* check if title button option is opened*/
+ bool playcontroller_opened; /*check play controller is shown or not */
+
+ int totalProgressTime; /* total progress time for all slide*/
+ int elapsedProgressTime; /*progress time from 1st slide to current slide*/
+
+ Elm_Genlist_Item_Class itc_title; /* title button multi recipient item */
+ Elm_Genlist_Item_Class hp_sa_class; /* help page attach list save all item */
+ Elm_Genlist_Item_Class hp_class; /* help page attach list item */
+ Elm_Genlist_Item_Class attach_sa_class; /*attachments select all item */
+ Elm_Genlist_Item_Class attach_item_class; /*attachments each item */
+
+ MSG_VIEWER_ADDR_LIST addr_list; /* current only thread address list*/
+
+ Elm_Theme *title_th; /* title button theme*/
+ Elm_Theme *progress_th; /* progressbar theme*/
+} MSG_PLAY_DATA_S;
+
+typedef struct {
+ char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1];
+ char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1];
+ int pfile_size;
+ bool isSaveAll; /* for select all item */
+ Eina_Bool isChecked; /* check object status of save attachment genlist */
+ Evas_Object *check_item; /* check object for save attachments genlist */
+ MSG_VIEWER_MEDIA_TYPE_E media_type;
+ MSG_PLAY_DATA_S *viewer_play_data;
+} MSG_VIEWER_ATTACH_MEDIA_INFO_S;
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data);
+
+/*
+ *@fn msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data);
+ *@brief This function is used to show player view again when player view is already ready.
+ * @param[in] data MSG_PLAY_DATA_S structure
+ * @return return TRUE if player view is playing, else FALSE
+ */
+MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data);
+
+void msg_ui_viewer_play_view_init(void *data);
+void msg_ui_viewer_destroy_play_view(void *data);
+void msg_ui_viewer_disconnect_handler(void *data);
+
+/*
+ *@fn msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status);
+ *@brief This function is used to enable/disable prev & next button
+ * @param[in] data MSG_PLAY_DATA_S structure
+ * @param[in] status viewer play status.
+ */
+void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status);
+Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent);
+Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data);
+Evas_Object *msg_ui_viewer_create_title_toolbar(void *data);
+void msg_ui_viewer_add_title_toolbar_item(Evas_Object *toolbar, void *data);
+Evas_Object *msg_ui_viewer_create_title_toolbar_btn(Evas_Object *parent, char *icon_path, char *button_text);
+void msg_ui_viewer_open_title_menu_genlist(void *data);
+void msg_ui_viewer_close_title_menu_genlist(void *data);
+void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent);
+void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx);
+void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data);
+
+/* ========================VIEWER CALLBACK========================*/
+/*
+ *@fn msg_ui_viewer_smil_cb(SMIL_SLIDE_EVENT_PARAM_S *eventStatus, void *appUserData);
+ *@brief This function is SMIL callback function
+ * @param[in] eventStatus this is the slide info to be used by the application.
+ * @param[in] appUserData appdata structure
+ * @return MSG_SMIL_ERROR_E
+ */
+MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *appUserData);
+Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event);
+Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event);
+void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_stop_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info);
+
+/* Play controller */
+void msg_ui_viewer_volume_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void msg_ui_viewer_prev_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void msg_ui_viewer_next_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+Eina_Bool msg_ui_viewer_play_controller_progressbar_timer_cb(void *data);
+Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data);
+void msg_ui_viewer_command_play_pause(void *data);
+void msg_ui_viewer_update_player_state_after_save(void *data);
+
+/* help page create cb - called from SMIL renderer */
+MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box);
+void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+
+/* popup */
+void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
+
+/* message info */
+void msg_ui_viewer_contact_info_update(MSG_PLAY_DATA_S *data);
+#endif /* __MSG_UI_VIEWER_PLAY_VIEW_H__*/
diff --git a/viewer/include/msg-ui-viewer-types.h b/viewer/include/msg-ui-viewer-types.h
new file mode 100755
index 0000000..1854997
--- /dev/null
+++ b/viewer/include/msg-ui-viewer-types.h
@@ -0,0 +1,48 @@
+/*
+ * 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_VIEWER_TYPE_H__
+#define __MSG_UI_VIEWER_TYPE_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include <msg.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef MSG_BOOL
+#define MSG_BOOL char
+#endif
+
+#define MSG_VIEWER_CONTENT_PATH "/opt/media"
+#define MSG_VIEWER_DOWNLOAD_PATH MSG_VIEWER_CONTENT_PATH"/Downloads"
+#define MSG_VIEWER_FILENAME_MAX_LEN MSG_FILENAME_LEN_MAX /*255*/
+#define MSG_VIEWER_FILEPATH_MAX_LEN MSG_FILEPATH_LEN_MAX /*1024*/
+#define MSG_VIEWER_FILE_EXT_MAX_LEN 8
+
+#endif /*__MSG_UI_VIEWER_TYPE_H__*/
+
diff --git a/viewer/include/msg-ui-viewer-utility.h b/viewer/include/msg-ui-viewer-utility.h
new file mode 100755
index 0000000..9dd6f26
--- /dev/null
+++ b/viewer/include/msg-ui-viewer-utility.h
@@ -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_VIEWER_UTILITY_H__
+#define __MSG_VIEWER_UTILITY_H__
+
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-ui-viewer-types.h"
+#include <vconf.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_VIEWER_COLOR_HEXA_BUFFER_LEN 2
+#define MSG_VIEWER_HEXA_SIZE 16
+#define MSG_VIEWER_RGB_COLOR_BUF 7
+#define MSG_VIEWER_DEFAULT_FILE_NUMBER 1
+#define MSG_VIEWER_INVALID_FILE_NUMBER -1
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef unsigned int MSG_VIEWER_COLORREF;
+
+typedef struct _MSG_VIEWER_RGBQUAD {
+ unsigned char rgbBlue;
+ unsigned char rgbGreen;
+ unsigned char rgbRed;
+ unsigned char rgbReserved;
+} MSG_VIEWER_RGBQUAD;
+
+typedef union {
+ MSG_VIEWER_RGBQUAD rgbQuad;
+ MSG_VIEWER_COLORREF rgbColor;
+} MSG_VIEWER_RGB_UNION;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+
+/*
+ *@fn msg_viewer_util_get_display_name_by_index(int index);
+ *@brief this function is used to get display name from contact index
+ *@param[in] index contact_index
+ *@return return display name of contact, Caller must free returned string after using it
+ */
+char *msg_viewer_util_get_display_name_by_index(int index);
+
+/*
+ *@fn msg_viewer_util_get_file_ext(const char *filepath, char *file_ext, int ext_len);
+ *@brief this function is used to get extension of file
+ *@param[in] address string pointer of filepath and file_ext
+ *@return return TRUE on success, else FALSE
+ */
+MSG_BOOL msg_viewer_util_get_file_ext(const char *filepath, char *file_ext, int ext_len);
+
+/*
+ *@fn msg_viewer_util_get_next_number(char *file_name_without_ext);
+ *@brief this function is used to get the next number to rename the file
+ *@param[in] address string pointer of file_name_without_ext
+ *@return return the number(int)
+ */
+int msg_viewer_util_get_next_number(char *file_name_without_ext);
+
+/*
+ *@fn msg_viewer_util_get_color_as_string(char *szcolor, int szcolor_len, int r, int g, int b);
+ *@brief this function is used to get rgb string from int to string like "ffffff". Buffer(szcolor) length should be longer than 7.
+ *@param[in] r Red color value
+ *@param[in] g Green color value
+ *@param[in] b Blue color value
+ *@param[in] szcolor_len buffer length of szcolor.
+ *@param[out] szcolor RGB value will be get as string type.
+ */
+void msg_viewer_util_get_color_as_string(char *szcolor, int szcolor_len, int r, int g, int b);
+
+/*
+ *@fn msg_viewer_util_get_default_path(char *dir_path, int dir_path_len);
+ *@brief this function is used to get default file path
+ *@param[in] dir_path_len length of dir_path buffer
+ *@param[out] dir_path destination file_path of content to be saved
+ */
+MSG_BOOL msg_viewer_util_get_default_path(char *dir_path, int dir_path_len);
+
+/*
+ *@fn msg_ui_viewer_get_buffer_from_file(const char *filepath, const char *opt, unsigned int *buffer_size)
+ *@brief this function is used to get raw data of filepath
+ *@param[in] filepath src file path
+ *@param[in] opt open mode
+ *@param[out] buffer_size buffer size
+ *@return return allocated raw file data, else NULL
+ *@Caution Caller should free return raw file data after using it.
+ */
+unsigned char *msg_ui_viewer_get_buffer_from_file(const char *filepath, const char *opt, unsigned int *buffer_size);
+
+/*
+ *@fn msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path)
+ *@brief Copy file from src to dest, if there is file at dest path, then save it with renamed one
+ *@param[in] src_path src file path
+ *@param[in] dst_path dest file path to be saved
+ *@return return allocated copied file path, else NULL
+ *@Caution Caller should free return copied file path after using data.
+ */
+char *msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path);
+
+/*
+ *@fn msg_ui_viewer_util_create_working_dir(void)
+ *@brief create temp directroy to save a temp file for viewer
+ *@return return created temp path, else NULL
+ *@Caution Caller should free returned temp path after using it.
+ */
+char *msg_ui_viewer_util_create_working_dir(void);
+
+/*
+ *@fn msg_ui_viewer_auto_rename(char *src_path, char *dst_path);
+ *@brief saving duplicated filename without collision by adding extenstion(_XX) in msg viewer
+ *@param[in] src_path src file path
+ *@param[in] dst_path dest file path to be saved
+ *@return return TRUE when function operation was successful.
+ *@Caution Caller should free returned temp path after using it.
+ */
+MSG_BOOL msg_ui_viewer_auto_rename(char *src_path, char *dst_path);
+#endif
+
diff --git a/viewer/smil-player/include/msg-smil-content-manager.h b/viewer/smil-player/include/msg-smil-content-manager.h
new file mode 100755
index 0000000..7b0f366
--- /dev/null
+++ b/viewer/smil-player/include/msg-smil-content-manager.h
@@ -0,0 +1,234 @@
+/*
+ * 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_CONTENT_MANAGER_SMIL_PLAYER_H__
+#define __MSG_CONTENT_MANAGER_SMIL_PLAYER_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-smil-types.h"
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_MMS_SLIDE_INVALID -1
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct _SMIL_CONTENT_MGR_HANDLE_S {
+ int curSlideIdx;
+ msg_struct_t msg_info_t; /*MSG MMS data struct handle */
+ SMIL_SLIDE_INFO_S *smilContent; /*slide info of the message*/
+} SMIL_CONTENT_MGR_HANDLE_S; /*Content Manager Handler.*/
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/**
+*@fn _msg_smil_create_content_mgr(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S **smilContMgrHndle);
+*@brief This API shall facilitate the the SMIL Player interface initialize the Content Manager Handler.
+*@return MSG_SMIL_SUCCESS on success , else failure return code
+*@param[in] smilMsg This is the message that the SMILPlayerInterface sends for page information extraction.
+*@param[out] *smilContMgrHndle The Content Manager Handler.
+*/
+MSG_SMIL_ERROR_E _msg_smil_create_content_mgr(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S **smilContMgrHndle);
+
+/**
+*@fn _msg_smil_destroy_content_mgr(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+*@brief This method will allow destroying the Content Manager handler and the complete slide queue for the MMS.
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[out] None.
+*/
+void _msg_smil_destroy_content_mgr(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+/**
+*@fn _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, SMIL_PLAYER_STATUS_E event);
+*@brief This function will allow updating the slideIdx's slide status to the Content Manager.
+*@return TRUE on success , else return FALSE
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[in] curSlideIdx This is current slide index to be updated.
+*@param[in] event This is the event to which the status of the Handlerand the Slide in the Queue has to be updated
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, SMIL_PLAYER_STATUS_E event);
+
+/**
+*@fn _msg_smil_cont_mgr_get_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+*@brief This function returns the Current Slide index.
+*@return The Current Slide index on success , else failure return code
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[out] None.
+*/
+int _msg_smil_cont_mgr_get_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+/**
+*@fn _msg_smil_cont_mgr_set_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx);
+*@brief This function set Current Slide index.
+*@return TRUE on success , else return FALSE
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[in] slideIdx This will be set as current slide index.
+*/
+MSG_BOOL _msg_smil_cont_mgr_set_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx);
+
+/**
+*@fn _msg_smil_cont_mgr_get_cur_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+*@brief This function returns the Current Slide Detailed Information.
+*@return Slide's detailed information on Success , else failure return code
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[out] None.
+*/
+SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_cur_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+/**
+*@fn _msg_smil_cont_mgr_get_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx);
+*@brief This function returns the requested Slide Detailed Information.
+*@return The requested Slide Detailed Information on success , else failure return code
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[in] slideIdx This is the handler to the SMILMessage sent back to UI while creating SMIL Player.
+*@param[out] commonData This is the data common to all the slides.
+*/
+SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx);
+
+/**
+*@fn _msg_smil_cont_mgr_get_cur_slide_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+*@brief This function returns the Current Slide Status.
+*@return current slide's status.
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[out] None.
+*/
+SMIL_PLAYER_STATUS_E _msg_smil_cont_mgr_get_cur_slide_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+int _msg_smil_cont_mgr_get_total_slide_count(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+/**
+*@fn _msg_smil_cont_mgr_set_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo, MSG_BOOL bSet);
+*@brief This function set current page for help page
+*@param[in] singleSlideInfo Slide information about currne page
+*@param[in] bSet The value of setting help page
+*@param[out] None.
+*/
+void _msg_smil_cont_mgr_set_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo, MSG_BOOL bSet);
+
+/**
+*@fn _msg_smil_cont_mgr_is_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo);
+*@brief This function returns the result of current page is help page or not
+*@return whether current slide is help page or not
+*@param[in] singleSlideInfo Slide information about currne page
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_cont_mgr_is_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo);
+
+/**
+*@fn _msg_smil_cont_mgr_delete_help_page(msg_message_t msg_message, SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+*@brief This function delete help page for preview mode viewer and return the result
+*@return the result of deleting help page
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_cont_mgr_delete_help_page(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+
+/**
+*@fn _msg_smil_cont_mgr_get_page_list_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+*@brief This function returns msg_list_handle_t for current msg
+*@return msg_list_handle_t handler of page list
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[out] None.
+*/
+msg_list_handle_t _msg_smil_cont_mgr_get_page_list_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+/**
+*@fn _msg_smil_cont_mgr_get_nth_page_struct_handle(msg_list_handle_t pagelist_info_t, int pageIdx);
+*@brief This function returns page struct handle with given page index
+*@return msg_struct_t handler of page
+*@param[in] pagelist_info_t page list handle
+*@param[in] pageIdx page index
+*@param[out] None.
+*/
+msg_struct_t _msg_smil_cont_mgr_get_nth_page_struct_handle(msg_list_handle_t pagelist_info_t, int pageIdx);
+
+/**
+*@fn _msg_smil_cont_mgr_get_page_time_value(msg_struct_t pageInfo_t, int field);
+*@brief This function returns page duration time for singleSlideInfo
+*@return duration time
+*@param[in] pageInfo_t page structure handle.
+*@param[in] field page field value.
+*@param[out] None.
+*/
+int _msg_smil_cont_mgr_get_page_time_value(msg_struct_t pageInfo_t, int field);
+
+/**
+*@fn _msg_smil_cont_mgr_get_page_media_list_handle(msg_struct_t pageInfo_t);
+*@brief This function returns msg_list_handle_t for media of current page
+*@return msg_list_handle_t handler of page list
+*@param[in] pageInfo_t page struct handler
+*@param[out] None.
+*/
+msg_list_handle_t _msg_smil_cont_mgr_get_page_media_list_handle(msg_struct_t pageInfo_t);
+
+/**
+*@fn _msg_smil_cont_mgr_get_page_nth_media_struct_handle(msg_list_handle_t medialist_info_t, int mediaIdx);
+*@brief This function returns media struct handle with given page index
+*@return msg_struct_t handler of page
+*@param[in] medialist_info_t media list handle
+*@param[in] mediaIdx media index
+*@param[out] None.
+*/
+msg_struct_t _msg_smil_cont_mgr_get_page_nth_media_struct_handle(msg_list_handle_t medialist_info_t, int mediaIdx);
+
+/**
+*@fn _msg_smil_cont_mgr_get_media_str_value(msg_struct_t media_info_t, int strfield, char *rtnStr);
+*@brief This function get STR value with given field for media
+*@return void
+*@param[in] media_info_t media list handle
+*@param[in] strfield field value
+*@param[out] rtnStr return value
+*/
+void _msg_smil_cont_mgr_get_media_str_value(msg_struct_t media_info_t, int strfield, char *rtnStr);
+
+/**
+*@fn _msg_smil_cont_mgr_get_media_int_value(msg_struct_t media_info_t, int intfield, int* rtnVal);
+*@brief This function get INT value with given field for media
+*@return void
+*@param[in] media_info_t media list handle
+*@param[in] intfield field value
+*@param[out] rtnVal return value
+*/
+void _msg_smil_cont_mgr_get_media_int_value(msg_struct_t media_info_t, int intfield, int* rtnVal);
+
+/**
+*@fn _msg_smil_cont_mgr_get_mms_body_struct_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+*@brief This function returns msg mms data struct handle
+*@return mms data struct of current msg.
+*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager.
+*@param[out] None.
+*/
+msg_struct_t _msg_smil_cont_mgr_get_mms_body_struct_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
+
+/**
+*@fn _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, double *time);
+*@brief This API returns total slide duration after given slide index
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] slideIdx start slide index to get remain time
+*@param[in] bExcludeHp whether help page will be excluded from total slide time or not
+*@param[out] time calculated remain time
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, MSG_BOOL bExcludeHp, double *time);
+#endif /*__MSG_CONTENT_MANAGER_SMIL_PLAYER_H__*/
+
diff --git a/viewer/smil-player/include/msg-smil-event-manager.h b/viewer/smil-player/include/msg-smil-event-manager.h
new file mode 100755
index 0000000..e4d4c6a
--- /dev/null
+++ b/viewer/smil-player/include/msg-smil-event-manager.h
@@ -0,0 +1,166 @@
+/*
+ * 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_EVENT_MANAGER_SMIL_PLAYER_H__
+#define __MSG_EVENT_MANAGER_SMIL_PLAYER_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-smil-types.h"
+#include <Ecore.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_MMS_SMIL_MAX_TIMER_IDX (MSG_MMS_SMIL_MEDIA_TYPES * 2) /* + 2 6 for the media (max 3 types of Media Begin/End) and 2 for the Page Begin/End. */
+#define MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION 3
+#define MSG_MMS_SMIL_TIMER_CONVERT 1000
+#define MSG_MMS_SMIL_HELP_PAGE_DURATION 5000
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct _SMIL_TIMER_DATA_S {
+ int mediaTimerDur[MSG_MMS_SMIL_MAX_TIMER_IDX][MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION];
+ SMIL_PLAYER_PAGE_EVENT_E actionTypeOnPage;
+} SMIL_TIMER_DATA_S;
+
+typedef struct _SMIL_TIMER_CALLBACK_DATA_S {
+ int elementIdx; /*mediaIdx; This will carry the index to the elemnt (media/Page) whose timer is registered. -1 for Page, other values for Media.*/
+ SMIL_TIMER_DATA_S slideTimerInfo;
+ void *appUserData;
+ pfnSMILPlayerCb appSmilCb;
+ Ecore_Timer *timerHandle;
+ SMIL_SLIDE_EVENT_PARAM_S *curSlideParam;
+} SMIL_TIMER_CALLBACK_DATA_S;
+
+typedef struct _SMIL_EVENT_MGR_HANDLE_S {
+ SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData;
+ void *smilhandle;
+} SMIL_EVENT_MGR_HANDLE_S;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/**
+*@fn _msg_smil_create_event_mgr(void *cb, void *data , SMIL_EVENT_MGR_HANDLE_S **smilEvntMgrHndle);
+*@brief This function Initializes the Event Manager Handler.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] cb This is the call back to the Client.
+*@param[in] data This is the Client Instance Related data.
+*@param[in] smilEvntMgrHndle This is the handler to the SMIL Event Manager.
+*/
+MSG_SMIL_ERROR_E _msg_smil_create_event_mgr(void *cb, void *data, SMIL_EVENT_MGR_HANDLE_S **smilEvntMgrHndle);
+
+/**
+*@fn _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+*@brief This function destroys the handler and all the Event Manager related data.
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[out] None.
+*/
+void _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+/**
+*@fn _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx);
+*@brief This function fetches the slide info from the Content Manager,sends to the Call Back from the Client
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[in] curSlideIdx This represents the Slide Number to be Played.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx);
+
+/**
+*@fn _msg_smil_event_mgr_stop_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+*@brief This function stops the smil timer.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_stop_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+/**
+*@fn _msg_smil_event_mgr_pause_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle );
+*@brief This function kills the timer and calculates the remaining duration of the paused slide.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_pause_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+/**
+*@fn MSG_SMIL_ERROR_E _msg_smil_event_mgr_resume_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx );
+*@brief This function resumes the the paused slide and starts the timer with the remaining duration.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[in] curSlideIdx This is the Current Slide Index.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_resume_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx);
+
+/**
+*@fn _msg_smil_event_mgr_move_to_next_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+*@brief Facilitates the moving to next slide from the current if next slide is present.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_move_to_next_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+/**
+*@fn _msg_smil_event_mgr_slide_timer_cb(void* data);
+*@brief This function is the callback for the smil timer.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] data This is the data that is returned by the timer for use by the call back function.
+*@param[out] None.
+*/
+Eina_Bool _msg_smil_event_mgr_slide_timer_cb(void *data);
+
+/**
+*@fn _msg_smil_event_mgr_is_slide_active(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+*@brief This function is check if event slide is set or not
+*@return TRUE on success, else return FALSE
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*/
+MSG_BOOL _msg_smil_event_mgr_is_slide_active(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+SMIL_TIMER_CALLBACK_DATA_S *_msg_smil_event_mgr_get_timer_cb_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+SMIL_SLIDE_EVENT_PARAM_S *_msg_smil_event_mgr_get_slide_event_param_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+SMIL_SLIDE_INFO_S *_msg_smil_event_mgr_get_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+MSG_BOOL _msg_smil_event_mgr_set_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *singleSlide);
+
+double _msg_smil_event_mgr_get_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+MSG_BOOL _msg_smil_event_mgr_set_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, double duration);
+
+MSG_BOOL _msg_smil_event_mgr_get_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+MSG_BOOL _msg_smil_event_mgr_set_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL iseos);
+
+SMIL_PLAYER_PAGE_EVENT_E _msg_smil_event_mgr_get_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+MSG_BOOL _msg_smil_event_mgr_set_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_PAGE_EVENT_E page_event);
+
+MSG_BOOL _msg_smil_event_mgr_get_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+MSG_BOOL _msg_smil_event_mgr_set_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isvideo);
+
+MSG_BOOL _msg_smil_event_mgr_get_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+MSG_BOOL _msg_smil_event_mgr_set_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isunsupported);
+
+MSG_BOOL _msg_smil_event_mgr_get_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+MSG_BOOL _msg_smil_event_mgr_set_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isinvalid_ro);
+
+MSG_BOOL _msg_smil_event_mgr_set_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL islast_slide);
+MSG_BOOL _msg_smil_event_mgr_set_render_event(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_RENDER_EVENT_E render_event);
+
+#endif
diff --git a/viewer/smil-player/include/msg-smil-player-interface.h b/viewer/smil-player/include/msg-smil-player-interface.h
new file mode 100755
index 0000000..69dbd94
--- /dev/null
+++ b/viewer/smil-player/include/msg-smil-player-interface.h
@@ -0,0 +1,125 @@
+/*
+ * 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_SMIL_PLAYER_INTERFACE_H__
+#define __MSG_SMIL_PLAYER_INTERFACE_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-smil-types.h"
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+ /**
+*@fn msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData ,void **instance);
+*@brief This wrapper API shall facilitate the client to intitialize the process of the SMIL Player Creation.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] message This is the message details structure
+*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for communication from the Player's side.
+*@param[in] userData This is the application handler.
+*@param[out] instance This will have a void* to the instance created by the API.
+*/
+MSG_SMIL_ERROR_E msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData , void **instance);
+
+/**
+*@fn msg_smil_destroy_smil_player(void *smilhandle);
+*@brief This wrapper API shall destroy smil player
+*@param[in] smilhandle Smil player handle.
+*/
+void msg_smil_destroy_smil_player(void *smilhandle);
+
+/**
+*@fn msg_smil_get_current_slide_idx(void *hSmilHandle);
+*@brief This wrapper API shall facilitate the client to fetch the current slide index.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] hSmilHandle This is the handler to the SMILMessage sent back to UI while creating SMIL Player.
+*@param[out] None.
+*/
+int msg_smil_get_current_slide_idx(void *hSmilHandle);
+
+/**
+*@fn msg_smil_get_current_slide_status(void *hSmilHandle);
+*@brief This wrapper API shall facilitate the client to get the current Slide Status.
+*@return SMIL_PLAYER_STATUS_E on success.
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[out] None.
+*/
+SMIL_PLAYER_STATUS_E msg_smil_get_current_slide_status(void *hSmilHandle);
+
+/**
+*@fn msg_smil_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent);
+*@brief This wrapper API shall give the client one gate way for all types of actions performed on the Slide.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] playerEvent This is the event that needs to be perfomed on the MMS message.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E msg_smil_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent);
+
+/**
+*@fn msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout);
+*@brief This wrapper API shall create layout of SMILPlayer
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] layout This is layout window to be set to SMILPlayer.
+*@param[out] None.
+*/
+MSG_BOOL msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout);
+
+/**
+*@fn msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
+*@brief This wrapper API shall set layout size of SMILPlayer. It must be called after calling msg_smil_create_smil_player_layout.
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] left_top x,y point info. of let-top position.
+*@param[in] right_bottom x,y point info. of right-bottom position.
+*@param[out] None.
+*/
+MSG_BOOL msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
+
+/*
+*@fn msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData)
+*@brief This API shall change to render help page with player view
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for help page.
+*@param[in] userData This is the application handler.
+*@param[out] None.
+*/
+MSG_BOOL msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData);
+
+/**
+*@fn msg_smil_get_current_slide_info(void *hSmilHandle);
+*@brief This API shall facilitate the client to get the current Slide info.
+*@return SMIL_SLIDE_INFO_S on success.
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[out] None.
+*/
+SMIL_SLIDE_INFO_S *msg_smil_get_current_slide_info(void *hSmilHandle);
+
+/**
+*@fn msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, double *slideTime);
+*@brief This API returns total slide duration after given slide index
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] slideIdx start slide index to get remain time
+*@param[in] bExcludeHp whether help page will be excluded from total slide time or not
+*@param[out] slideTime calculated remain time
+*@param[out] None.
+*/
+MSG_BOOL msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime);
+#endif
diff --git a/viewer/smil-player/include/msg-smil-player.h b/viewer/smil-player/include/msg-smil-player.h
new file mode 100755
index 0000000..02dab1e
--- /dev/null
+++ b/viewer/smil-player/include/msg-smil-player.h
@@ -0,0 +1,167 @@
+/*
+ * 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_SMIL_PLAYER_H__
+#define __MSG_SMIL_PLAYER_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-smil-content-manager.h"
+#include "msg-smil-event-manager.h"
+#include "msg-smil-render.h"
+#include <glib.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_MMS_SMIL_SLIDEIDX_INCREMENT 1
+#define MSG_MMS_SMIL_SLIDEIDX_DECREMENT 1
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct _SMIL_HANDLER_S {
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle; /* cont mgr handler*/
+ SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle; /* evnt mgr handler*/
+ SMIL_RENDERER_DATA_S *smilRenderer; /* smil render */
+} SMIL_HANDLER_S;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/**
+*@fn _msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData ,void **instance);
+*@brief This API shall facilitate the client to intitialize the process of the SMIL Player Creation.
+*@return MSG_SMIL_SUCCESS on success , else failure return code
+*@param[in] message This is the message details structure
+*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for communication from the Player's side.
+*@param[in] userData This is the application handler.
+*@param[out] instance This will have a void* to the instance created by the SMIL Player.
+*/
+MSG_SMIL_ERROR_E _msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData, void **instance);
+
+/**
+*@fn _msg_smil_destroy_smil_player(void *smilhandle);
+*@brief This API destroy smil player
+*@param[out] smilhandle SMIL player handle.
+*/
+void _msg_smil_destroy_smil_player(void *smilhandle);
+
+/**
+*@fn _msg_smil_get_content_mgr(void *hSmilHandle);
+*@brief This API shall fetch content manager handle.
+*@return returns content manager handle on Success, else return NULL.
+*@param[in] hSmilHandle This is the handler to the SMILMessage..
+*/
+SMIL_CONTENT_MGR_HANDLE_S *_msg_smil_get_content_mgr(void *hSmilHandle);
+
+/**
+*@fn _msg_smil_get_event_mgr(void *hSmilHandle);
+*@brief This API shall fetch event manager handle.
+*@return returns event manager handle on Success, else return NULL.
+*@param[in] hSmilHandle This is the handler to the SMILMessage..
+*/
+SMIL_EVENT_MGR_HANDLE_S *_msg_smil_get_event_mgr(void *hSmilHandle);
+
+/**
+*@fn _msg_smil_get_renderder(void *hSmilHandle);
+*@brief This API shall fetch renderer handle.
+*@return returns renderer handle on Success, else return NULL.
+*@param[in] hSmilHandle This is the handler to the SMILMessage..
+*/
+SMIL_RENDERER_DATA_S *_msg_smil_get_renderder(void *hSmilHandle);
+
+/**
+*@fn _msg_smil_get_current_slide_idx(void *hSmilHandle);
+*@brief This API shall fetch the current slide index.
+*@return returns the current Slide index.
+*@param[in] hSmilHandle This is the handler to the SMILMessage..
+*/
+int _msg_smil_get_current_slide_idx(void *hSmilHandle);
+
+/**
+*@fn _msg_smil_get_current_slide_status(void *hSmilHandle);
+*@brief This API shall facilitate the client to get the current Slide Status.
+*@return SMIL_PLAYER_STATUS_E on success.
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[out] None.
+*/
+SMIL_PLAYER_STATUS_E _msg_smil_get_current_slide_status(void *hSmilHandle);
+
+/**
+*@fn _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent);
+*@brief This API shall give the client one gate way for all types of actions performed on the Slide.
+*@return MSG_SMIL_SUCCESS on success, else failure return code
+*@param[in SmilHandle This is the handler to the SMILMessage.
+*@param[in] playerEvent This is the action that needs to be performed on the current slide.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent);
+
+/**
+*@fn _msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout);
+*@brief This API shall create layout of SMILPlayer.
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] layout This is layout window to be set to SMILPlayer
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout);
+
+/**
+*@fn _msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S* left_top, SMIL_POSITION_S* right_bottom);
+*@brief This API shall set layout window to SMILPlayer.
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] left_top x,y point info. of let-top position.
+*@param[in] right_bottom x,y point info. of right-bottom position.
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
+
+/*
+*@fn _msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData)
+*@brief This API let player viewer able to render help page with renderer handle
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for help page.
+*@param[in] userData This is the application handler.
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData);
+
+/**
+*@fn _msg_smil_get_current_slide_info(void *hSmilHandle);
+*@brief This API shall facilitate the client to get the current Slide info.
+*@return SMIL_SLIDE_INFO_S on success.
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[out] None.
+*/
+SMIL_SLIDE_INFO_S *_msg_smil_get_current_slide_info(void *hSmilHandle);
+
+/**
+*@fn _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, double *slideTime);
+*@brief This API returns total slide duration after given slide index
+*@return TRUE on success , else FALSE return
+*@param[in] hSmilHandle This is the handler to the SMILMessage.
+*@param[in] slideIdx start slide index to get remain time
+*@param[in] bExcludeHp whether help page will be excluded from total slide time or not
+*@param[out] slideTime calculated remain time
+*@param[out] None.
+*/
+MSG_BOOL _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime);
+
+#endif
diff --git a/viewer/smil-player/include/msg-smil-render.h b/viewer/smil-player/include/msg-smil-render.h
new file mode 100755
index 0000000..4dd88c9
--- /dev/null
+++ b/viewer/smil-player/include/msg-smil-render.h
@@ -0,0 +1,195 @@
+/*
+ * 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_SMIL_RENDER_H__
+#define __MSG_SMIL_RENDER_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-smil-types.h"
+#include "msg-smil-util.h"
+#include <msg.h>
+#include <stdio.h>
+#include <Ecore_X.h>
+#include <Ethumb.h>
+#include <Elementary.h>
+#include <ui-gadget-module.h>
+#include "msg-ui-viewer-drm-utility.h"
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define VIEWER_W (480.0)
+#define VIEWER_XPAD_RATIO (0.02)
+#define VIEWER_VIDEO_WIDTH 176
+#define VIEWER_VIDEO_HEIGHT 144
+#define VIEWER_TEXT_FONT_LEN 1024
+
+#define VIEWER_FONT_STYLE_BUF_LEN 10
+
+typedef unsigned char VIEWER_BYTE;
+typedef unsigned short VIEWER_WORD;
+typedef unsigned long VIEWER_DWORD;
+typedef unsigned long VIEWER_COLORREF;
+#define VIEWER_RGB(r, g, b) ((VIEWER_COLORREF)(((VIEWER_BYTE)(r) | ((VIEWER_WORD)((VIEWER_BYTE)(g)) << 8)) | (((VIEWER_DWORD)(VIEWER_BYTE)(b)) << 16)))
+
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+enum viewer_media_player_state {
+ MEDIA_PLAYER_STATE_NONE = 0X00,
+ MEDIA_PLAYER_STATE_INIT,
+ MEDIA_PLAYER_STATE_READY,
+ MEDIA_PLAYER_STATE_PLAYING,
+ MEDIA_PLAYER_STATE_PAUSED,
+ MEDIA_PLAYER_STATE_STOP
+};
+
+typedef enum {
+ VIEWER_IMAGE_TYPE_NONE = 0,
+ VIEWER_IMAGE_TYPE_NORMAL,
+ VIEWER_IMAGE_TYPE_DRM_IMAGE,
+ VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA,
+ VIEWER_IMAGE_TYPE_DRM_VIDEO,
+ VIEWER_IMAGE_TYPE_DRM_SOUND,
+ VIEWER_IMAGE_TYPE_UNSUPPORTED,
+} SMIL_RENDER_IMAGE_TYPE_E;
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+typedef struct viewer_tagRGBQUAD {
+ VIEWER_BYTE rgbBlue;
+ VIEWER_BYTE rgbGreen;
+ VIEWER_BYTE rgbRed;
+ VIEWER_BYTE rgbReserved;
+} SMIL_RGBQUAD;
+
+typedef union {
+ SMIL_RGBQUAD rgbQuad;
+ VIEWER_COLORREF rgbColor;
+} SMIL_RGB_UNION;
+
+typedef struct _SMIL_FONT_SYTLE_S {
+ int font_size;
+ char font_color[VIEWER_RGB_COLOR_BUF_LEN + 1]; /*"#ffffff"*/
+ char font_style[VIEWER_FONT_STYLE_BUF_LEN + 1]; /*"link", "em", etc.*/
+} SMIL_FONT_SYTLE_S;
+
+typedef struct _SMIL_RENDERER_DATA_S {
+ void *smilhandle;
+ msg_struct_t msg_info_t;
+ Evas_Object *main_window;
+ Evas_Object *layout_main;
+ Evas_Object *viewer_scroller;
+ Evas_Object *viewer_content_box; /*it contans text(entry) and image*/
+ Evas_Object *viewer_bg_rect;
+ Evas_Object *viewer_body; /*it shows text , entry*/
+
+ char *viewer_body_text; /*set page text*/
+ Evas_Object *insert_image;
+ Evas_Object *insert_sound_icon; /*display invalid drm sound icon*/
+ Evas_Object *insert_unsupported_icon; /*display unsupported icon*/
+ Evas_Object *video_image;
+ Evas_Object *attach_list; /* attach list for help page */
+ unsigned char *video_image_buffer; /*Evas Object Image buffer*/
+ Ecore_Timer *video_update_timer;
+ MSG_BOOL is_skip_frame; /*it is used to skip 1 frame of videostream cb*/
+ int video_width;
+ int video_height;
+ int video_duration; /*video content's duration*/
+ Ecore_Idler *video_resize_idle;
+ Ecore_Idler *video_duration_idle;
+ Ecore_Idler *video_eos_idle;
+
+ int player_state;
+ int viewer_width;
+ int viewer_height;
+ int viewer_landscape_width;
+ int viewer_landscape_height;
+ int button_height;
+ int main_win_rotate; /*current rotation value of main window*/
+
+ pfnSMILHelpPageCb appSmilHelpPageCb;
+ void *appUserData;
+
+ VIEWER_COLORREF bgcolor;
+ MSG_BOOL ismute; /*sound, video mute mode when silent mode*/
+
+ MSG_UI_DRM_CONSUME_S display_drm_consume; /*drm consume handle for image*/
+ MSG_UI_DRM_CONSUME_S play_drm_consume; /*drm consume handle for sound, video*/
+
+ char *working_path;
+} SMIL_RENDERER_DATA_S;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+MSG_SMIL_ERROR_E _msg_smil_create_render(SMIL_RENDERER_DATA_S **viewerRenderData);
+void _msg_smil_destroy_render(SMIL_RENDERER_DATA_S *viewerRenderData);
+MSG_BOOL _msg_smil_init_render(SMIL_RENDERER_DATA_S *viewerRenderData);
+
+/*Create and set layout to display viewer*/
+MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData, Evas_Object *layout);
+MSG_BOOL _msg_smil_render_set_layout_size(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
+MSG_BOOL _msg_smil_render_set_mute(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_BOOL ismute);
+MSG_BOOL _msg_smil_render_set_help_page_cb(SMIL_RENDERER_DATA_S *viewerRenderData, void *callBack, void *userData);
+
+/**
+*@fn _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus);
+*@brief This API shall handle render event to display mms contents
+*@return MSG_SMIL_SUCCESS on success, else failure return code
+*@param[in] viewerRenderData This is the handler of SMIL_RENDERER_DATA_S.
+*@param[in] eventStatus This is the eventstatus of a current slide.
+*@param[out] None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus);
+MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus);
+
+
+/*==================================================================================================
+ * Text related functions
+ *==================================================================================================*/
+MSG_BOOL _msg_smil_render_show_inserted_text(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+MSG_BOOL _msg_smil_render_show_help_page_attach_list(SMIL_RENDERER_DATA_S *viewerRenderData);
+
+/*==================================================================================================
+ * Media related functions
+ *==================================================================================================*/
+MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+MSG_BOOL _msg_smil_render_show_inserted_image(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+
+/*smil player sound and video related functions*/
+MSG_BOOL _msg_smil_render_pause(void *data, int mediaType);
+MSG_BOOL _msg_smil_render_resume(void *data, int mediaType);
+
+/**
+*@fn _msg_smil_render_stop_playing_file(void *data)
+*@brief This API shall stop and destroy mm player
+*@return TRUE on success , else FALSE return code
+*@param[in] data This is the smil render structure
+*/
+MSG_BOOL _msg_smil_render_stop_playing_file(void *data);
+
+/**
+*@fn _msg_smil_render_rotate_video_window(void *data)
+*@brief This API shall rotate video window according to rotated status of viewer's main window
+*@param[in] data This is the smil render structure
+*/
+void _msg_smil_render_rotate_video_window(void *data);
+
+#endif
diff --git a/viewer/smil-player/include/msg-smil-types.h b/viewer/smil-player/include/msg-smil-types.h
new file mode 100755
index 0000000..6cfada9
--- /dev/null
+++ b/viewer/smil-player/include/msg-smil-types.h
@@ -0,0 +1,176 @@
+/*
+ * 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_SMIL_TYPES_H__
+#define __MSG_SMIL_TYPES_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
+#include "msg-ui-util.h"
+#include "msg-ui-viewer-types.h"
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_INVALID_INDEX 0
+#define MSG_MMS_SMIL_MEDIA_TYPES 3
+
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+typedef enum _MSG_SMIL_ERROR_E {
+ MSG_SMIL_SUCCESS = 0,
+ MSG_ERR_SMIL_UNKNOWN,
+ MSG_ERR_SMIL_NULL_MESSAGE,
+ MSG_ERR_SMIL_EVENT_NONE,
+ MSG_ERR_SMIL_INVALID_STORAGE,
+ MSG_ERR_SMIL_PAUSE_SLIDE_EVENT_FAILURE,
+ MSG_ERR_SMIL_PAUSE_SLIDE_CONTENT_FAILURE,
+ MSG_ERR_SMIL_PAUSE_SLIDE_RENDER_FAILURE, /*smil render pause control*/
+ MSG_ERR_SMIL_RESUME_SLIDE_RENDER_FAILURE, /*smil render resume control*/
+ MSG_ERR_SMIL_STOP_SLIDE_RENDER_FAILURE, /*smil render stop control*/
+ MSG_ERR_SMIL_UPDATE_CONTENT_MGR_FAILURE,
+ MSG_ERR_SMIL_INVALID_PARAMETER,
+ MSG_ERR_SMIL_INVALID_SLIDE,
+ MSG_ERR_SMIL_INVALID_MEDIA_TIMESTAMPS,/*All media in the slide have invalid timestamps*/
+ MSG_ERR_SMIL_TIMER_FAILURE,
+ MSG_ERR_SMIL_DATA_RETREIVAL_FAILURE,
+ MSG_ERR_SMIL_UI_DISPLAY_FAIURE,
+} MSG_SMIL_ERROR_E;
+
+typedef enum _SMIL_PLAYER_EVENT_E {
+ PLAYER_EVENT_NONE = 0,
+ PLAYER_EVENT_INIT,
+ PLAYER_EVENT_PLAY,
+ PLAYER_EVENT_PREVIEW_PLAY,
+ PLAYER_EVENT_STOP,
+ PLAYER_EVENT_PAUSE,
+ PLAYER_EVENT_RESUME,
+ PLAYER_EVENT_NEXT_SLIDE,
+ PLAYER_EVENT_PREV_SLIDE,
+ PLAYER_EVENT_MUTE,
+ PLAYER_EVENT_ROTATE_WINDOW,
+ PLAYER_EVENT_DESTROY_SCREEN,
+} SMIL_PLAYER_EVENT_E;
+
+typedef enum _SMIL_PLAYER_STATUS_E {
+ PLAYER_STATUS_NONE = 0,
+ PLAYER_STATUS_PLAYING,
+ PLAYER_STATUS_PLAY_END,
+ PLAYER_STATUS_STOPPED,
+ PLAYER_STATUS_PAUSED,
+ PLAYER_STATUS_INVALID,
+} SMIL_PLAYER_STATUS_E;
+
+typedef enum _SMIL_PLAYER_MEDIA_EVENT_E {
+ MEDIA_EVENT_NONE = 0,
+ MEDIA_EVENT_BEGIN,
+ MEDIA_EVENT_END,
+} SMIL_PLAYER_MEDIA_EVENT_E;
+
+typedef enum _SMIL_PLAYER_PAGE_EVENT_E {
+ PAGE_EVENT_PLAY = 0,
+ PAGE_EVENT_END,
+ PAGE_EVENT_INTERNAL_MEDIA,
+ PAGE_EVENT_MOVE_TO_NEXT,
+ PAGE_EVENT_MOVE_TO_PREV,
+ PAGE_EVENT_NONE,
+} SMIL_PLAYER_PAGE_EVENT_E;
+
+typedef enum _SMIL_PLAYER_RENDER_EVENT_E {
+ SMIL_RENDER_EVENT_NONE = -1,
+ SMIL_RENDER_EVENT_PAGE_PLAY_START = 0, /* Start playing the Page */
+ SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START, /* Start Playing both Page and Media at the same time*/
+ SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE, /*Puase player by interrupted earjack off*/
+ SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE, /* For notifying the Client about the last slide */
+ SMIL_RENDER_EVENT_DESTROY_SCREEN, /*This Event is called to destroy current screen*/
+ SMIL_RENDER_EVENT_ERROR, /* Stop playing because of Error*/
+} SMIL_PLAYER_RENDER_EVENT_E;
+
+/*==================================================================================================
+ * STRUCTURES
+ *==================================================================================================*/
+/*Common Data for the Slide.*/
+typedef struct _SMIL_PAGE_INFO_S {
+ MSG_BOOL hasText;
+ MSG_BOOL hasImage;
+ MSG_BOOL hasVideo;
+ MSG_BOOL hasAudio;
+ MSG_BOOL isTexttop;
+ MSG_BOOL isHelpPage;
+ int pageDuration;
+ int mediaCnt;
+} SMIL_PAGE_INFO_S;
+
+/*Common Data for the Slide.*/
+typedef struct _SMIL_MASTER_SLIDE_INFO_S {
+ int pageCnt; /*total no of pages.*/
+ int regionCnt;
+ int attachCnt;
+ int transitionCnt;
+ int metaCnt;
+} SMIL_MASTER_SLIDE_INFO_S;
+
+/*Structure for Per Slide Information Queue Implementation.*/
+typedef struct _SMIL_SLIDE_INFO_S {
+ int pageIdx; /*Index of the Current page.*/
+ SMIL_PAGE_INFO_S *pageInfo;
+ SMIL_MASTER_SLIDE_INFO_S *commonData; /*Data common to ll the Slides.*/
+ SMIL_PLAYER_STATUS_E slideStatus; /*Slide's Current Status.*/
+
+ struct _SMIL_SLIDE_INFO_S *nextSlide; /*Address of the next Slide in the Queue.NULL if its the last slide.*/
+ struct _SMIL_SLIDE_INFO_S *prevSlide; /*Address of the next Slide in the Queue.NULL if its the first slide.*/
+} SMIL_SLIDE_INFO_S;
+
+typedef struct _SMIL_MEDIA_TIMER_S {
+ int mediaIdx;
+ SMIL_PLAYER_MEDIA_EVENT_E actionTypeOnMedia; /* This will define what action needs to be performed by the Client on the particular meida.*/
+} SMIL_MEDIA_TIMER_S;
+
+/* This is the structure that is sent to the client in its callback */
+typedef struct _SMIL_SLIDE_CLIENT_CB_PARAM_S {
+ int pageIdx;
+ int pageCnt;
+ SMIL_PLAYER_RENDER_EVENT_E clientCbEvent;
+ MSG_BOOL isLastSlide;
+} SMIL_SLIDE_CLIENT_CB_PARAM_S;
+
+typedef struct _SMIL_SLIDE_EVENT_PARAM_S {
+ SMIL_SLIDE_INFO_S *singleSlideInfo;
+ SMIL_PLAYER_RENDER_EVENT_E renderEvent;
+ SMIL_MEDIA_TIMER_S timerDataMedia[MSG_MMS_SMIL_MEDIA_TYPES]; /* Media Related Action - Start/End */
+ MSG_BOOL isLastSlide;
+ MSG_BOOL isVideoMedia;
+ MSG_BOOL isVideoRoInvalid; /*This is set if video content has valid drm ro or not*/
+ MSG_BOOL iseos; /*This is set when end of stream of sound or video is passed*/
+ MSG_BOOL isUnsupportedContent; /*This is set, if unsupported content is inserted on current page*/
+ double timerDur; /*This is set, page timer duration*/
+ SMIL_SLIDE_CLIENT_CB_PARAM_S clientCbParam;
+} SMIL_SLIDE_EVENT_PARAM_S;
+
+typedef struct SMIL_POSITION_S {
+ int x;
+ int y;
+} SMIL_POSITION_S;
+
+typedef MSG_SMIL_ERROR_E(*pfnSMILPlayerCb)(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *appUserData);
+typedef MSG_SMIL_ERROR_E(*pfnSMILEventCb)(void *data, void *obj, void *event_info);
+typedef MSG_SMIL_ERROR_E(*pfnSMILHelpPageCb)(void *appUserData, void **attach_list, void *box);
+
+#endif
diff --git a/viewer/smil-player/include/msg-smil-util.h b/viewer/smil-player/include/msg-smil-util.h
new file mode 100755
index 0000000..43e3039
--- /dev/null
+++ b/viewer/smil-player/include/msg-smil-util.h
@@ -0,0 +1,48 @@
+/*
+ * 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_SMIL_UTIL_H__
+#define __MSG_SMIL_UTIL_H__
+/*==================================================================================================
+ * INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-smil-types.h"
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define VIEWER_COLOR_HEXA_BUFFER_LEN 2
+#define VIEWER_HEXA_SIZE 16
+#define VIEWER_RGB_COLOR_BUF_LEN 7
+
+/*==================================================================================================
+ * ENUMERATIONS
+ *==================================================================================================*/
+
+typedef enum {
+ VIEWER_SMIL_REGION_IMAGE,
+ VIEWER_SMIL_REGION_TEXT,
+ VIEWER_SMIL_REGION_MAX
+} VIEWER_SMIL_REGION_TYPE_E;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+
+void _msg_smil_util_get_color_string(char *pszBuffer, int pszBuffer_len, int r, int g, int b);
+
+int _msg_smil_util_find_smallest(int num1, int num2);
+#endif
diff --git a/viewer/smil-player/src/msg-smil-content-manager.c b/viewer/smil-player/src/msg-smil-content-manager.c
new file mode 100755
index 0000000..0f956de
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-content-manager.c
@@ -0,0 +1,1193 @@
+/*
+ * 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 <mm_file.h>
+#include <mmf/mm_error.h>
+#include "msg-smil-content-manager.h"
+#include "msg-smil-player.h"
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/**
+*@fn __msg_smil_content_mgr_create_page_content(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, msg_struct_t *msgData);
+*@brief This function creates the Slide Page Queue which is further passed to the UI for display.
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] msgData This is the message data
+*@param[in] smilContMgrHndle The Content Manager Handler
+*@param[out] None.
+*/
+static MSG_SMIL_ERROR_E __msg_smil_content_mgr_create_page_content(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, msg_struct_t msg_info_t);
+static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_mixed_message(msg_struct_t msg_info_t);
+static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_related_message(msg_struct_t msg_info_t);
+static SMIL_MASTER_SLIDE_INFO_S *__msg_smil_content_mgr_create_master_slide(msg_struct_t msg_info_t);
+static void __msg_smil_content_mgr_free_slide_list(SMIL_SLIDE_INFO_S *deleteSlide);
+static MSG_BOOL __msg_smil_cont_mgr_is_valid_slide(SMIL_MASTER_SLIDE_INFO_S *commonData, int curSlideIdx);
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_SMIL_ERROR_E _msg_smil_create_content_mgr(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S **smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+
+ /*allocate memory for the content mgr handler*/
+ *smilContMgrHndle = (SMIL_CONTENT_MGR_HANDLE_S *)calloc(1, sizeof(SMIL_CONTENT_MGR_HANDLE_S));
+ if (*smilContMgrHndle == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+
+ /*create and set page content info.*/
+ err = __msg_smil_content_mgr_create_page_content(*smilContMgrHndle, msg_info_t);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_page_content is failed");
+ if (*smilContMgrHndle != NULL) {
+ free(*smilContMgrHndle);
+ *smilContMgrHndle = NULL;
+ }
+
+ return err;
+ }
+
+ //store mmsdata struct handler
+ (*smilContMgrHndle)->msg_info_t = msg_info_t;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+static SMIL_MASTER_SLIDE_INFO_S *__msg_smil_content_mgr_create_master_slide(msg_struct_t msg_info_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL);
+ SMIL_MASTER_SLIDE_INFO_S *commonData = NULL;
+
+ /*allocate master slide*/
+ commonData = (SMIL_MASTER_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_MASTER_SLIDE_INFO_S));
+ if (commonData == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return NULL;
+ }
+
+ msg_list_handle_t pagelist_info = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+
+ /*Get page count */
+ commonData->pageCnt = msg_list_length(pagelist_info);
+
+ /*Get Attachment List*/
+ msg_list_handle_t attachlist_info = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+ commonData->attachCnt = msg_list_length(attachlist_info);
+
+ /*Get MetaData List*/
+ msg_list_handle_t metalist_info = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_META_LIST_HND, (void **)&metalist_info);
+ commonData->metaCnt = msg_list_length(metalist_info);
+
+ /*Get Region List */
+ msg_list_handle_t regionlist_info = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_REGION_LIST_HND, (void **)&regionlist_info);
+ commonData->regionCnt = msg_list_length(regionlist_info);
+
+ /*Get Transition List */
+ msg_list_handle_t translist_info = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_TRANSITION_LIST_HND, (void **)&translist_info);
+ commonData->transitionCnt = msg_list_length(translist_info);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return commonData;
+}
+
+
+static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_mixed_message(msg_struct_t msg_info_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL);
+ SMIL_SLIDE_INFO_S *newSlideContent = NULL;
+ int pageCnt = 0;
+ int attachCnt = 0;
+ MSG_BOOL isMixedMsg = FALSE;
+ msg_list_handle_t pagelist_info = NULL;
+ msg_list_handle_t attachlist_info = NULL;
+
+ msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ pageCnt = msg_list_length(pagelist_info);
+
+ msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+ attachCnt = msg_list_length(attachlist_info);
+
+ isMixedMsg = (pageCnt == 0) ? TRUE : FALSE;
+
+ if (isMixedMsg) {
+ newSlideContent = (SMIL_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_SLIDE_INFO_S));
+ if (newSlideContent == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return NULL;
+ }
+
+ newSlideContent->pageIdx = pageCnt;
+ newSlideContent->slideStatus = PLAYER_STATUS_NONE;
+ newSlideContent->nextSlide = NULL;
+ newSlideContent->prevSlide = NULL;
+
+ /* set pageinfo with no data*/
+ newSlideContent->pageInfo = (SMIL_PAGE_INFO_S *)calloc(1, sizeof(SMIL_PAGE_INFO_S));
+ if (newSlideContent->pageInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ free(newSlideContent);
+ newSlideContent = NULL;
+ return NULL;
+ }
+
+ // Init
+ newSlideContent->pageInfo->mediaCnt = 0;
+ newSlideContent->pageInfo->isTexttop = FALSE;
+ newSlideContent->pageInfo->hasText = FALSE;
+ newSlideContent->pageInfo->hasImage = FALSE;
+ newSlideContent->pageInfo->hasVideo = FALSE;
+ newSlideContent->pageInfo->hasAudio = FALSE;
+ newSlideContent->pageInfo->pageDuration = MSG_MMS_SMIL_HELP_PAGE_DURATION;
+ _msg_smil_cont_mgr_set_cur_slide_help_page(newSlideContent, ((attachCnt > 0) ? TRUE : FALSE));
+
+ /*create master slide*/
+ newSlideContent->commonData = __msg_smil_content_mgr_create_master_slide(msg_info_t);
+ if (newSlideContent->commonData == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_master_slide is failed");
+ if (newSlideContent) {
+ free(newSlideContent);
+ newSlideContent = NULL;
+ }
+ return NULL;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "This is not mixed message");
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return newSlideContent;
+}
+
+static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_related_message(msg_struct_t msg_info_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL);
+ SMIL_SLIDE_INFO_S *firstSlide = NULL; /*first slide pointer to be returned*/
+ SMIL_SLIDE_INFO_S *newSlideContent = NULL;
+ int pageCnt = 0;
+ int attachCnt = 0;
+ MSG_BOOL bSkipEmptyPage = FALSE;
+ msg_list_handle_t pagelist_info = NULL;
+ msg_struct_t page_info = NULL;
+ msg_list_handle_t medialist_info = NULL;
+ msg_list_handle_t attachlist_info = NULL;
+
+ //Get page info and count
+ msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ pageCnt = msg_list_length(pagelist_info);
+
+ //Get attach info and count
+ msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+ attachCnt = msg_list_length(attachlist_info);
+
+ if (pageCnt > 0) {
+ SMIL_SLIDE_INFO_S *prev = NULL;
+ int pageIndex = 0;
+ int mediaCnt = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgData->pageCnt = %d", pageCnt);
+
+ while (pageIndex < pageCnt) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pgCount = %d", pageIndex);
+
+ page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, pageIndex);
+ medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ mediaCnt = msg_list_length(medialist_info);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaCnt = %d", mediaCnt);
+
+ /* For empty page, if there's only 1 page and help page is exist, then skip composing 1st empty page. */
+ if (pageCnt == 1 && pageIndex == 0 && mediaCnt == 0 && attachCnt > 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "There's 1 empty page, but attachment is exist, skip composing empty 1 page!");
+ bSkipEmptyPage = TRUE;
+ break;
+ }
+
+ newSlideContent = (SMIL_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_SLIDE_INFO_S));
+ if (newSlideContent == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ if (firstSlide == NULL) {
+ return NULL;
+ } else
+ goto FREE_SLIDE_LIST;
+ }
+
+ /*init silde info data*/
+ newSlideContent->pageIdx = pageIndex;
+ newSlideContent->slideStatus = PLAYER_STATUS_NONE;
+ newSlideContent->nextSlide = NULL;
+ newSlideContent->prevSlide = NULL;
+
+ /*set master(commonData) slide*/
+ if (pageIndex == 0) {
+ /*set smilContent of content mgr as first slide pointer */
+ firstSlide = newSlideContent;
+
+ newSlideContent->commonData = __msg_smil_content_mgr_create_master_slide(msg_info_t);
+ if (newSlideContent->commonData == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_master_slide is failed");
+ goto FREE_SLIDE_LIST;
+ }
+ } else {
+ /* Keeping one copy of commonData and makig all pointers to point to that copy */
+ newSlideContent->commonData = firstSlide->commonData;
+ }
+
+ /*set pageinfo */
+ newSlideContent->pageInfo = (SMIL_PAGE_INFO_S *)calloc(1, sizeof(SMIL_PAGE_INFO_S));
+ if (newSlideContent->pageInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ if (firstSlide == NULL) {
+ return NULL;
+ } else
+ goto FREE_SLIDE_LIST;
+ }
+
+ // Init
+ newSlideContent->pageInfo->mediaCnt = mediaCnt;
+ newSlideContent->pageInfo->isTexttop = FALSE;
+ newSlideContent->pageInfo->hasText = FALSE;
+ newSlideContent->pageInfo->hasImage = FALSE;
+ newSlideContent->pageInfo->hasVideo = FALSE;
+ newSlideContent->pageInfo->hasAudio = FALSE;
+
+ msg_get_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, &(newSlideContent->pageInfo->pageDuration));
+
+ int index = 0;
+ while (index < mediaCnt) {
+ msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(medialist_info, index);
+ int mediaType = 0;
+ _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ if (mediaType == MMS_SMIL_MEDIA_TEXT) {
+ newSlideContent->pageInfo->hasText = TRUE;
+ index++;
+ continue;
+ } else if (mediaType == MMS_SMIL_MEDIA_AUDIO) {
+ newSlideContent->pageInfo->hasAudio = TRUE;
+ index++;
+ continue;
+ } else if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_IMG_OR_VIDEO) {
+ newSlideContent->pageInfo->hasVideo = TRUE;
+ index++;
+ continue;
+ } else if (mediaType == MMS_SMIL_MEDIA_IMG || mediaType == MMS_SMIL_MEDIA_ANIMATE) {
+ newSlideContent->pageInfo->hasImage = TRUE;
+ index++;
+ continue;
+ } else {
+ index++;
+ }
+ }
+
+ //check isTexttop
+ if (newSlideContent->pageInfo->hasText &&
+ (newSlideContent->pageInfo->hasVideo || newSlideContent->pageInfo->hasImage)) {
+ int nTop_0 = 0;
+ int nTop_1 = 0;
+ int nHeight_0 = 0;
+ int nHeight_1 = 0;
+ char szID_0[MAX_SMIL_REGION_ID] = {0,};
+ char szID_1[MAX_SMIL_REGION_ID] = {0,};
+
+ msg_list_handle_t region_list = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_REGION_LIST_HND, (void **)&region_list);
+
+ /* Get 0th region */
+ msg_struct_t region_info_0 = (msg_struct_t)msg_list_nth_data(region_list, 0);
+ msg_get_str_value(region_info_0, MSG_MMS_REGION_ID_STR, szID_0, sizeof(szID_0));
+ msg_get_int_value(region_info_0, MSG_MMS_REGION_LENGTH_TOP_INT, &nTop_0);
+ msg_get_int_value(region_info_0, MSG_MMS_REGION_LENGTH_HEIGHT_INT, &nHeight_0);
+
+ /* Get 1th region */
+ msg_struct_t region_info_1 = (msg_struct_t)msg_list_nth_data(region_list, 1);
+ msg_get_str_value(region_info_1, MSG_MMS_REGION_ID_STR, szID_1, sizeof(szID_1));
+ msg_get_int_value(region_info_1, MSG_MMS_REGION_LENGTH_TOP_INT, &nTop_1);
+ msg_get_int_value(region_info_1, MSG_MMS_REGION_LENGTH_HEIGHT_INT, &nHeight_1);
+
+ /*check text top
+ * if (text's top == 0 & image's top != 0)
+ * text top
+ * else if (text's top < image's top)
+ * text top
+ * else if (text's top == 0 & image's top == 0) {
+ * if (text' height < image's height )
+ * text top
+ * }
+ */
+
+ /*find and set image, text region*/
+ if (!strcasecmp(szID_0, "Image")) { /*Image top region_info_0 is IMAGE REGION*/
+ if (nTop_1 == 0 && nTop_0 != 0) {
+ newSlideContent->pageInfo->isTexttop = TRUE;
+ } else if (nTop_1 < nTop_0) {
+ newSlideContent->pageInfo->isTexttop = TRUE;
+ } else if (nTop_1 == 0 && nTop_0 == 0) {
+ if (nHeight_1 < nHeight_0) {
+ newSlideContent->pageInfo->isTexttop = TRUE;
+ }
+ }
+
+ } else if (!strcasecmp(szID_1, "Image")) { /* region_info_1 is IMAGE_REGION */
+ if (nTop_0 == 0 && nTop_1 != 0) {
+ newSlideContent->pageInfo->isTexttop = TRUE;
+ } else if (nTop_0 < nTop_1) {
+ newSlideContent->pageInfo->isTexttop = TRUE;
+ } else if (nTop_0 == 0 && nTop_1 == 0) {
+ if (nHeight_0 < nHeight_1) {
+ newSlideContent->pageInfo->isTexttop = TRUE;
+ }
+ }
+ }
+ }
+
+ /*set prev, next slide pointer*/
+ newSlideContent->prevSlide = prev;
+ if (prev != NULL) {
+ prev->nextSlide = newSlideContent;
+ }
+
+ prev = newSlideContent;
+ pageIndex++;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "This is not related message");
+ }
+
+ if (attachCnt > 0) {
+ SMIL_SLIDE_INFO_S *lastSlide = NULL; /*last slide pointer to ref for help page */
+ newSlideContent = (SMIL_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_SLIDE_INFO_S));
+ if (newSlideContent == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return NULL;
+ }
+
+ newSlideContent->pageIdx = (bSkipEmptyPage) ? pageCnt-1 : pageCnt; //set last page
+ newSlideContent->slideStatus = PLAYER_STATUS_NONE;
+ newSlideContent->nextSlide = NULL;
+
+ if (firstSlide)
+ newSlideContent->commonData = firstSlide->commonData;
+ else
+ newSlideContent->commonData = __msg_smil_content_mgr_create_master_slide(msg_info_t);
+
+ /*set pageinfo */
+ newSlideContent->pageInfo = (SMIL_PAGE_INFO_S *)calloc(1, sizeof(SMIL_PAGE_INFO_S));
+ if (newSlideContent->pageInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ if (firstSlide == NULL) {
+ return NULL;
+ } else
+ goto FREE_SLIDE_LIST;
+ }
+
+ // Init
+ newSlideContent->pageInfo->mediaCnt = 0;
+ newSlideContent->pageInfo->isTexttop = FALSE;
+ newSlideContent->pageInfo->hasText = FALSE;
+ newSlideContent->pageInfo->hasImage = FALSE;
+ newSlideContent->pageInfo->hasVideo = FALSE;
+ newSlideContent->pageInfo->hasAudio = FALSE;
+ newSlideContent->pageInfo->pageDuration = MSG_MMS_SMIL_HELP_PAGE_DURATION;
+ _msg_smil_cont_mgr_set_cur_slide_help_page(newSlideContent, TRUE);
+
+ /* set no media contents */
+
+ if (firstSlide) {
+ lastSlide = firstSlide; //set first slide for searching last slide
+
+ for (; lastSlide->nextSlide != NULL ;)
+ lastSlide = lastSlide->nextSlide;
+
+ newSlideContent->prevSlide = lastSlide;
+ lastSlide->nextSlide = newSlideContent;
+
+ firstSlide->commonData->pageCnt += 1;
+ } else {
+ newSlideContent->prevSlide = NULL;
+ newSlideContent->nextSlide = NULL;
+
+ firstSlide = newSlideContent;
+ }
+ }
+
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return firstSlide;
+
+FREE_SLIDE_LIST:
+ /*free current slide data*/
+ if (newSlideContent) {
+ if (newSlideContent->pageInfo) {
+ free(newSlideContent->pageInfo);
+ newSlideContent->pageInfo = NULL;
+ }
+ free(newSlideContent);
+ newSlideContent = NULL;
+ }
+
+ __msg_smil_content_mgr_free_slide_list(firstSlide);
+
+ return NULL;
+}
+
+
+
+/*********************************************************************************************
+*This method allocates memory and does a deep copy of the message details received from the FW.
+*********************************************************************************************/
+static MSG_SMIL_ERROR_E __msg_smil_content_mgr_create_page_content(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, msg_struct_t msg_info_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+
+ MSG_BOOL isMixedMsg = FALSE;
+ int pageCnt = 0;
+ msg_list_handle_t pagelist_info = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ pageCnt = msg_list_length(pagelist_info);
+
+ isMixedMsg = (pageCnt == 0) ? TRUE : FALSE;
+
+ if (isMixedMsg) { /*multipart mixed mms*/
+ smilContMgrHndle->smilContent = __msg_smil_content_mgr_create_mixed_message(msg_info_t);
+ if (smilContMgrHndle->smilContent == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_mixed_message is failed");
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+ } else { /*multipart related mms*/
+ smilContMgrHndle->smilContent = __msg_smil_content_mgr_create_related_message(msg_info_t);
+ if (smilContMgrHndle->smilContent == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_mixed_message is failed");
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return MSG_SMIL_SUCCESS;
+}
+
+
+
+static void __msg_smil_content_mgr_free_slide_list(SMIL_SLIDE_INFO_S *deleteSlide)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, deleteSlide == NULL);
+
+ if (deleteSlide->nextSlide == NULL) { /*Single Slide message*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Freeing smilContent if MMS has one page");
+ /*free commonData*/
+ if (deleteSlide->commonData != NULL) {
+ free(deleteSlide->commonData);
+ deleteSlide->commonData = NULL;
+ }
+ /*free page data*/
+ if (deleteSlide->pageInfo != NULL) {
+ free(deleteSlide->pageInfo);
+ deleteSlide->pageInfo = NULL;
+ }
+ free(deleteSlide);
+
+ return;
+ } else { /*Multiple Slides message*/
+ SMIL_SLIDE_INFO_S *nextSlide = NULL;
+ while (deleteSlide->nextSlide != NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Freeing smilContent: page = %d ", deleteSlide->pageIdx);
+ nextSlide = deleteSlide->nextSlide;
+ /*free commonData*/
+ if (deleteSlide->pageIdx == 0) {
+ if (deleteSlide->commonData != NULL) {
+ free(deleteSlide->commonData);
+ deleteSlide->commonData = NULL;
+ }
+ }
+
+ free(deleteSlide);
+
+ deleteSlide = nextSlide;
+ }
+
+ /*free the last slide data*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Freeing smilContent last page");
+ /*free page data*/
+ if (deleteSlide->pageInfo != NULL) {
+ free(deleteSlide->pageInfo);
+ deleteSlide->pageInfo = NULL;
+ }
+ free(deleteSlide);
+
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+void _msg_smil_destroy_content_mgr(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL);
+ SMIL_SLIDE_INFO_S *deleteSlide = smilContMgrHndle->smilContent;
+
+ __msg_smil_content_mgr_free_slide_list(deleteSlide);
+ smilContMgrHndle->smilContent = NULL;
+
+ free(smilContMgrHndle);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+static MSG_BOOL __msg_smil_cont_mgr_is_valid_slide(SMIL_MASTER_SLIDE_INFO_S *commonData, int curSlideIdx)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, commonData == NULL, FALSE);
+
+ if (commonData->pageCnt > 0) { /*Multipart Related message*/
+ if (curSlideIdx > (commonData->pageCnt - 1) || curSlideIdx < 0)
+ return FALSE;
+ } else if (commonData->pageCnt == 0) { /*Multipart Mixed message*/
+ if (curSlideIdx > (commonData->pageCnt) || curSlideIdx < 0)
+ return FALSE;
+ } else {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, SMIL_PLAYER_STATUS_E event)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, FALSE);
+ SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent;
+ int count = 0;
+
+ if (__msg_smil_cont_mgr_is_valid_slide(findSlide->commonData, slideIdx) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid");
+ return FALSE;
+ }
+
+ while (count < slideIdx) {
+ findSlide = findSlide->nextSlide;
+ count++;
+ }
+ findSlide->slideStatus = event;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Slide number = %d", findSlide->pageIdx);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Slide Status = %d", findSlide->slideStatus);
+
+ return TRUE;
+}
+
+
+SMIL_PLAYER_STATUS_E _msg_smil_cont_mgr_get_cur_slide_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, PLAYER_STATUS_INVALID);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, PLAYER_STATUS_INVALID);
+ SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent;
+ int count = 0;
+
+ while (count < smilContMgrHndle->curSlideIdx) {
+ findSlide = findSlide->nextSlide;
+ count++;
+
+ if (findSlide == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilContMgrHndle->smilContent is NULL");
+ return PLAYER_STATUS_INVALID;
+ }
+ }
+
+ return (findSlide->slideStatus);
+}
+
+
+int _msg_smil_cont_mgr_get_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_MMS_SLIDE_INVALID);
+
+ return smilContMgrHndle->curSlideIdx;
+}
+
+
+MSG_BOOL _msg_smil_cont_mgr_set_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE);
+ SMIL_SLIDE_INFO_S *firstSlide = smilContMgrHndle->smilContent;
+
+ if (firstSlide->commonData) {
+ if (__msg_smil_cont_mgr_is_valid_slide(firstSlide->commonData, slideIdx) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid");
+ return FALSE;
+ }
+
+ smilContMgrHndle->curSlideIdx = slideIdx;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid");
+ return FALSE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+int _msg_smil_cont_mgr_get_total_slide_count(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_MMS_SLIDE_INVALID);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, MSG_MMS_SLIDE_INVALID);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, MSG_MMS_SLIDE_INVALID);
+
+ return smilContMgrHndle->smilContent->commonData->pageCnt;
+}
+
+
+SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_cur_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, NULL);
+ SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent;
+ int pageCnt = findSlide->commonData->pageCnt;
+ int count = 0;
+
+ while (count < pageCnt) {
+ if (count == smilContMgrHndle->curSlideIdx) {
+ return findSlide;
+ }
+ findSlide = findSlide->nextSlide;
+ count++;
+ }
+
+ //Adjust Mixed type msg, first slide should be set as cur slide
+ if (pageCnt == 0) {
+ msg_list_handle_t page_list_t = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ if (!page_list_t) {
+ return findSlide;
+ }
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return NULL;
+}
+
+
+SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, NULL);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slide Index = %d", slideIdx);
+ SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent;
+
+ if (findSlide->commonData) {
+ if (__msg_smil_cont_mgr_is_valid_slide(findSlide->commonData, slideIdx) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid");
+ return NULL;
+ }
+
+ while (findSlide->pageIdx < slideIdx) {
+ findSlide = findSlide->nextSlide;
+ if (findSlide == NULL)
+ break;
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return findSlide;
+}
+
+void _msg_smil_cont_mgr_set_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo, MSG_BOOL bSet)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, singleSlideInfo == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, singleSlideInfo->pageInfo == NULL);
+
+ singleSlideInfo->pageInfo->isHelpPage = bSet;
+
+ if (bSet) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page set as help page!");
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page set as normal page!");
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+MSG_BOOL _msg_smil_cont_mgr_is_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, singleSlideInfo == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, singleSlideInfo->pageInfo == NULL, FALSE);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "The result of checking help page = %d", singleSlideInfo->pageInfo->isHelpPage);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return singleSlideInfo->pageInfo->isHelpPage;
+}
+
+MSG_BOOL _msg_smil_cont_mgr_delete_help_page(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE);
+
+ MSG_BOOL isMixedMsg = FALSE;
+ msg_list_handle_t pagelist_info = NULL;
+ msg_struct_t page_info = NULL;
+ msg_list_handle_t medialist_info = NULL;
+ msg_list_handle_t attachlist_info = NULL;
+ int pageCnt = 0;
+ int mediaCnt = 0;
+ int attachCnt = 0;
+
+ SMIL_SLIDE_INFO_S *curSlide = smilContMgrHndle->smilContent;
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->commonData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->pageInfo == NULL, FALSE);
+
+ /* get page list info */
+ msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ pageCnt = msg_list_length(pagelist_info);
+
+ isMixedMsg = (pageCnt == 0) ? TRUE : FALSE;
+
+ if (isMixedMsg) {
+ /* change current slide page tag */
+ _msg_smil_cont_mgr_set_cur_slide_help_page(curSlide, FALSE);
+
+ /*set prev, next slide pointer*/
+ curSlide->prevSlide = NULL;
+ curSlide->nextSlide = NULL;
+ } else { // related msg
+
+ msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+ attachCnt = msg_list_length(attachlist_info);
+
+ //Check 1st page media info, media count
+ page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, 0);
+ medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ mediaCnt = msg_list_length(medialist_info);
+
+ if (attachCnt > 0) {
+ if (pageCnt == 1 && mediaCnt == 0) { // condition for skip and show Help page direct
+ /* change current slide page tag */
+ _msg_smil_cont_mgr_set_cur_slide_help_page(curSlide, FALSE);
+
+ /*set prev, next slide pointer*/
+ curSlide->prevSlide = NULL;
+ curSlide->nextSlide = NULL;
+ } else {
+ SMIL_SLIDE_INFO_S *firstSlide = NULL; /*first slide */
+ SMIL_SLIDE_INFO_S *lastSlide = NULL; /*last slide pointer to ref for help page */
+ SMIL_SLIDE_INFO_S *lastaheadSlide = NULL; /*last ahead slide pointer */
+
+ firstSlide = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0);
+ if (firstSlide == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "failed in getting firstSlide");
+ return FALSE;
+ }
+ lastSlide = firstSlide; //copy pointer to last slide
+
+ for(; lastSlide->nextSlide; )
+ lastSlide = lastSlide->nextSlide;
+
+ lastaheadSlide = lastSlide->prevSlide;
+
+ firstSlide->commonData->pageCnt -= 1;
+ lastaheadSlide->nextSlide = NULL;
+
+ if (lastSlide->pageInfo) {
+ free(lastSlide->pageInfo);
+ lastSlide->pageInfo = NULL;
+ }
+
+ free(lastSlide);
+ lastSlide = NULL;
+ }
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+/*
+ * functions for page/media struct handle with FW managed api
+ */
+msg_list_handle_t _msg_smil_cont_mgr_get_page_list_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL);
+ msg_struct_t msg_info_t = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL);
+
+ int pageCnt = 0;
+
+ /*Get struct handle of current page */
+ msg_list_handle_t pagelist_info = NULL;
+ msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+
+ pageCnt = msg_list_length(pagelist_info);
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, NULL);
+
+ return pagelist_info;
+}
+
+msg_struct_t _msg_smil_cont_mgr_get_nth_page_struct_handle(msg_list_handle_t pagelist_info_t, int pageIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pagelist_info_t == NULL, NULL);
+
+ int pageCnt = msg_list_length(pagelist_info_t);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, NULL, "page length is 0, no page is exist");
+
+ /*Get page*/
+ msg_struct_t page_info = NULL;
+ page_info = (msg_struct_t)msg_list_nth_data(pagelist_info_t, pageIdx);
+
+ return page_info;
+}
+
+int _msg_smil_cont_mgr_get_page_time_value(msg_struct_t pageInfo_t, int field)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageInfo_t == NULL, MSG_MMS_SLIDE_INVALID);
+ int time;
+
+ /*Get page nDur */
+ if (field == MSG_MMS_PAGE_PAGE_DURATION_INT) {
+ msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_PAGE_DURATION_INT, &time);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page duration time = %d", time);
+ } else if (field == MSG_MMS_PAGE_BEGIN_TIME_INT) {
+ msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_BEGIN_TIME_INT, &time);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page begin time = %d", time);
+ } else if (field == MSG_MMS_PAGE_END_TIME_INT) {
+ msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_END_TIME_INT, &time);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page end time = %d", time);
+ } else if (field == MSG_MMS_PAGE_MIN_INT) {
+ msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_MIN_INT, &time);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page min time = %d", time);
+ } else if (field == MSG_MMS_PAGE_MAX_INT) {
+ msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_MAX_INT, &time);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page max time = %d", time);
+ } else if (field == MSG_MMS_PAGE_REPEAT_INT) {
+ msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_REPEAT_INT, &time);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page repeat time = %d", time);
+ }
+
+ return time;
+}
+
+msg_list_handle_t _msg_smil_cont_mgr_get_page_media_list_handle(msg_struct_t pageInfo_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageInfo_t == NULL, NULL);
+
+ int mediaCnt = 0;
+ /*Get media list handler */
+ msg_list_handle_t medialist_info = NULL;
+ msg_get_list_handle(pageInfo_t, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+ mediaCnt = msg_list_length(medialist_info);
+
+ if (mediaCnt == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media count is 0, no medias in page");
+ return NULL;
+ }
+
+ return medialist_info;
+}
+
+msg_struct_t _msg_smil_cont_mgr_get_page_nth_media_struct_handle(msg_list_handle_t medialist_info_t, int mediaIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, medialist_info_t == NULL, NULL);
+
+ int mediaCnt = msg_list_length(medialist_info_t);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, mediaCnt == 0, NULL, "media count is 0, no medias in page");
+
+ /*Get media*/
+ msg_struct_t media_info = NULL;
+ media_info = (msg_struct_t)msg_list_nth_data(medialist_info_t, mediaIdx);
+
+ return media_info;
+}
+
+void _msg_smil_cont_mgr_get_media_str_value(msg_struct_t media_info_t, int strfield, char *rtnStr)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, media_info_t == NULL);
+
+ if (strfield == MSG_MMS_MEDIA_TYPE_INT ||
+ strfield == MSG_MMS_MEDIA_DRM_TYPE_INT ||
+ strfield == MSG_MMS_MEDIA_SMIL_TEXT_HND ||
+ strfield == MSG_MMS_MEDIA_SMIL_AVI_HND ) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "field value(%d) is not STRING type", strfield);
+ return;
+ }
+
+ char strbuf[2048] = {0,};
+
+ if (strfield == MSG_MMS_MEDIA_SRC_STR)
+ msg_get_str_value(media_info_t, MSG_MMS_MEDIA_SRC_STR, strbuf, sizeof(strbuf));
+ else if (strfield == MSG_MMS_MEDIA_FILENAME_STR)
+ msg_get_str_value(media_info_t, MSG_MMS_MEDIA_FILENAME_STR, strbuf, sizeof(strbuf));
+ else if (strfield == MSG_MMS_MEDIA_FILEPATH_STR)
+ msg_get_str_value(media_info_t, MSG_MMS_MEDIA_FILEPATH_STR, strbuf, sizeof(strbuf));
+ else if (strfield == MSG_MMS_MEDIA_CONTENT_ID_STR)
+ msg_get_str_value(media_info_t, MSG_MMS_MEDIA_CONTENT_ID_STR, strbuf, sizeof(strbuf));
+ else if (strfield == MSG_MMS_MEDIA_REGION_ID_STR)
+ msg_get_str_value(media_info_t, MSG_MMS_MEDIA_REGION_ID_STR, strbuf, sizeof(strbuf));
+ else if (strfield == MSG_MMS_MEDIA_ALTERNATIVE_STR)
+ msg_get_str_value(media_info_t, MSG_MMS_MEDIA_ALTERNATIVE_STR, strbuf, sizeof(strbuf));
+ else if (strfield == MSG_MMS_MEDIA_DRM_FULLPATH_STR)
+ msg_get_str_value(media_info_t, MSG_MMS_MEDIA_DRM_FULLPATH_STR, strbuf, sizeof(strbuf));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "STRING field value(%d) is %s", strfield, strbuf);
+ strncpy(rtnStr, strbuf, strlen(strbuf));
+}
+
+void _msg_smil_cont_mgr_get_media_int_value(msg_struct_t media_info_t, int intfield, int* rtnVal)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, media_info_t == NULL);
+
+ if (intfield != MSG_MMS_MEDIA_TYPE_INT && intfield != MSG_MMS_MEDIA_DRM_TYPE_INT) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "field value(%d) is not INT type", intfield);
+ return;
+ }
+
+ if (intfield == MSG_MMS_MEDIA_TYPE_INT)
+ msg_get_int_value(media_info_t, MSG_MMS_MEDIA_TYPE_INT, rtnVal);
+ else if (intfield == MSG_MMS_MEDIA_DRM_TYPE_INT)
+ msg_get_int_value(media_info_t, MSG_MMS_MEDIA_DRM_TYPE_INT, rtnVal);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "field value(%d) is %d", intfield, *rtnVal);
+}
+
+msg_struct_t _msg_smil_cont_mgr_get_mms_body_struct_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smilContMgrHndle->msg_info_t = 0x%x", smilContMgrHndle->msg_info_t);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return smilContMgrHndle->msg_info_t;
+}
+
+MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, MSG_BOOL bExcludeHp, double *time)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE);
+
+ SMIL_SLIDE_INFO_S *curSlide = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->commonData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->pageInfo == NULL, FALSE);
+
+ MSG_BOOL is_mixed_msg = FALSE;
+ double total_time = 0;
+ char szFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+ msg_list_handle_t page_list_info = NULL;
+ msg_struct_t page_info = NULL;
+
+ is_mixed_msg = (curSlide->commonData->pageCnt == 0) ? TRUE : FALSE;
+
+ //check validity input page index
+ if ((curSlide =_msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx)) == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Current msg is Multipart related msg, but there's no page with given index (%d)!", slideIdx);
+ return FALSE;
+ }
+
+ if (is_mixed_msg) {
+ if (slideIdx != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Mixed msg cannot have 1 more page!");
+ return FALSE;
+ }
+ total_time = (double)MSG_MMS_SMIL_HELP_PAGE_DURATION;
+ } else {
+ while (slideIdx < curSlide->commonData->pageCnt) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d", slideIdx);
+ double pagetime = 0.0;
+ int duration = 0;
+ double maximum_time = 0.0;
+
+ curSlide =_msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx);
+ if (curSlide->pageInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page of current slide is NULL!");
+ return FALSE;
+ }
+
+ if (bExcludeHp && curSlide->pageInfo->isHelpPage) {
+ if (slideIdx == 0 && curSlide->commonData->pageCnt == 1) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total page count = 1, And if there's only 1 help page, set default time for duration.");
+ total_time = (double)MSG_MMS_SMIL_HELP_PAGE_DURATION;
+ break;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current page(%d) is Help page and bExcludeHp flag is %d, skip calculating this page", curSlide->pageIdx, bExcludeHp);
+ slideIdx++;
+ continue;
+ }
+ }
+ //set pagetime as duration time
+ pagetime = (double)(curSlide->pageInfo->pageDuration);
+
+ // get media time value for pagetime is not valid
+ if (pagetime < 0) {
+ /*Get Media List.*/
+ page_list_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ if (page_list_info)
+ page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(page_list_info, curSlide->pageIdx);
+
+ if (page_info && curSlide->pageInfo->mediaCnt > 0) {
+ int index = 0;
+ int mediaCnt = 0;
+ msg_list_handle_t media_list_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ mediaCnt = msg_list_length(media_list_info);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaCnt = %d", mediaCnt);
+ while (index < mediaCnt) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+ int mediaType = 0;
+ msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(media_list_info, index);
+
+ if (media_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is Null");
+ return FALSE;
+ }
+
+ bzero(szFilePath, sizeof(szFilePath));
+ _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath);
+ _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ if (mediaType == MMS_SMIL_MEDIA_VIDEO ||
+ mediaType == MMS_SMIL_MEDIA_AUDIO ||
+ mediaType == MMS_SMIL_MEDIA_IMG_OR_VIDEO) {
+ bool is_drm = FALSE;
+ bool is_available_play = FALSE;
+
+ //check DRM
+ drm_bool_type_e is_drm_file = DRM_UNKNOWN;
+ int ret = DRM_RETURN_SUCCESS;
+
+ ret = drm_is_drm_file(szFilePath, &is_drm_file);
+ is_drm = (ret == DRM_RETURN_SUCCESS && is_drm_file == DRM_TRUE) ? TRUE : FALSE;
+ if (is_drm) {
+ int ret = DRM_RETURN_SUCCESS;
+ drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;
+ ret = drm_get_license_status(szFilePath, DRM_PERMISSION_TYPE_PLAY, &license_status);
+ if (ret != DRM_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_get_license_status is failed ret = %d", ret);
+ is_available_play = FALSE;
+ }
+
+ if (license_status != DRM_LICENSE_STATUS_VALID) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "license_status = %d", license_status);
+ is_available_play = FALSE;
+ } else {
+ is_available_play = TRUE;
+ }
+ } else {
+ is_available_play = TRUE;
+ }
+
+ if (is_available_play) {
+ int ret = 0;
+ MMHandleType content_attrs = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tempMedia->szFilePath is %s", szFilePath);
+
+ ret = mm_file_create_content_attrs(&content_attrs, szFilePath);
+
+ if (ret == MM_ERROR_NONE) {
+ char *error = NULL;
+
+ ret = mm_file_get_attrs(content_attrs, &error, MM_FILE_CONTENT_DURATION, &duration, NULL);
+
+ if (ret != MM_ERROR_NONE) {
+ if (error) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_get_attrs is failed - ret(%x), error(%s)", ret, error);
+ free(error);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_get_attrs is failed - ret(%x)", ret);
+ }
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file : %s, duration : %f", szFilePath, (double)duration);
+
+ if (content_attrs)
+ mm_file_destroy_content_attrs(content_attrs);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_create_content_attrs is failed - ret(%x)", ret);
+ }
+ }
+
+
+ //ceiling duration time
+ double ceilvalue = ceil((double)duration/1000)*1000;
+ if (maximum_time <= ceilvalue)
+ maximum_time = ceilvalue;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current media type(%d) is follow page duration time. skip checking..", mediaType);
+ }
+ index++;
+ }
+ }
+
+ pagetime = maximum_time;
+ }
+
+ total_time += pagetime;
+
+ slideIdx++;
+ }
+ }
+
+ *time = total_time;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total slide time is %f", *time);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return TRUE;
+}
diff --git a/viewer/smil-player/src/msg-smil-event-manager.c b/viewer/smil-player/src/msg-smil-event-manager.c
new file mode 100755
index 0000000..0af9ffe
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-event-manager.c
@@ -0,0 +1,1299 @@
+/*
+ * 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-smil-event-manager.h"
+#include "msg-smil-content-manager.h"
+#include "msg-smil-player.h"
+#include "msg-smil-util.h"
+
+/*For Multimedia element duration calculation.*/
+#include "mm_file.h"
+#include <mm_player.h>
+#include <mm_error.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define MSG_MMS_SMIL_TIMER_DEFAULT_DUR 5000
+#define MSG_MMS_SMIL_TIMER_DUR_INDEFINITE -1
+#define MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN 0
+#define MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE (0.0)
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/*
+*@fn __msg_smil_event_mgr_fill_media_time_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData);
+*@brief Fill the Media elements timer related data for UI usage and return the timer duration required for timer registry.
+*@return timerDuration value. Zero if no timer value.
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[in] callbackData
+*/
+static double __msg_smil_event_mgr_fill_media_time_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData);
+
+/*
+*@fn __msg_smil_event_mgr_set_media_time_info(SMIL_TIMER_CALLBACK_DATA_S *callbackData);
+*@brief set Media timer related data and create and sort the data.
+*@param[in] callbackData
+*/
+static void __msg_smil_event_mgr_set_media_time_info(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData);
+
+/*
+*@fn __msg_smil_event_mgr_set_page_time(SMIL_SLIDE_INFO_S *pageData);
+*@brief set page time info(begin, dur, end) of MMS_PAGE_S
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[in] pageData page time info. of MMS_PAGE_S will be set
+*/
+static void __msg_smil_event_mgr_set_page_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *pageData);
+
+/*
+*@fn __msg_smil_event_mgr_check_media_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData);
+*@brief check specific media type(video or invalid type)
+*@param[out] callbackData video or invalid type will be set if there is the media
+*/
+static void __msg_smil_event_mgr_check_media_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData);
+
+/*
+*@fn __msg_smil_event_mgr_change_media_time(msg_struct_t media_info, MmsSmilMediaType mediaType);
+*@brief Change media time(begin, dur, end) to process invalid receiving media time datas
+*@param[in] mediaType media type info.
+*@param[out] mediaList changed media time will be set
+*/
+static void __msg_smil_event_mgr_change_media_time(msg_struct_t media_info, MmsSmilMediaType mediaType);
+
+/*
+*@fn __msg_smil_event_mgr_register_timer(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, void *cb, double duration);
+*@brief Register call timer
+*@return MSG_SUCCESS on success , else failure return code
+*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager.
+*@param[in] cb Timer callback function
+*@param[in] duration Timer duration
+*@param[out] callbackData.
+*/
+static MSG_SMIL_ERROR_E __msg_smil_event_mgr_register_timer(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, void *cb, double duration);
+
+MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_idx(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int slideIdx);
+MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_count(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int pageCnt);
+
+
+/*================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_SMIL_ERROR_E _msg_smil_create_event_mgr(void *cb, void *data, SMIL_EVENT_MGR_HANDLE_S **smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, cb == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+
+ /*allocate memory to handler*/
+ *smilEvntMgrHndle = (SMIL_EVENT_MGR_HANDLE_S *)calloc(1, sizeof(SMIL_EVENT_MGR_HANDLE_S));
+ if (*smilEvntMgrHndle == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+
+ (*smilEvntMgrHndle)->slideTimerCbData = (SMIL_TIMER_CALLBACK_DATA_S *)calloc(1, sizeof(SMIL_TIMER_CALLBACK_DATA_S));
+ if ((*smilEvntMgrHndle)->slideTimerCbData == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ if (*smilEvntMgrHndle != NULL) {
+ free(*smilEvntMgrHndle);
+ *smilEvntMgrHndle = NULL;
+ }
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+
+ (*smilEvntMgrHndle)->slideTimerCbData->appSmilCb = (pfnSMILPlayerCb)cb;
+ (*smilEvntMgrHndle)->slideTimerCbData->appUserData = data;
+ (*smilEvntMgrHndle)->slideTimerCbData->curSlideParam = (SMIL_SLIDE_EVENT_PARAM_S *)calloc(1, sizeof(SMIL_SLIDE_EVENT_PARAM_S));
+ if ((*smilEvntMgrHndle)->slideTimerCbData->curSlideParam == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ if ((*smilEvntMgrHndle)->slideTimerCbData != NULL) {
+ free((*smilEvntMgrHndle)->slideTimerCbData);
+ (*smilEvntMgrHndle)->slideTimerCbData = NULL;
+ }
+
+ if (*smilEvntMgrHndle != NULL) {
+ free(*smilEvntMgrHndle);
+ *smilEvntMgrHndle = NULL;
+ }
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+void _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL);
+
+ if (smilEvntMgrHndle->slideTimerCbData != NULL) {
+ if (smilEvntMgrHndle->slideTimerCbData->timerHandle != NULL) {
+ void *timerRet = ecore_timer_del(smilEvntMgrHndle->slideTimerCbData->timerHandle);
+ if (timerRet == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Registry Failed");
+ }
+ }
+
+ if (smilEvntMgrHndle->slideTimerCbData->curSlideParam != NULL) {
+ free(smilEvntMgrHndle->slideTimerCbData->curSlideParam);
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam = NULL;
+ }
+
+ free(smilEvntMgrHndle->slideTimerCbData);
+ smilEvntMgrHndle->slideTimerCbData = NULL;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilEvntMgrHndle->slideTimerCbData is NULL");
+ }
+
+ free(smilEvntMgrHndle);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->smilhandle == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
+
+ double timerDuration = 0;
+ MSG_BOOL haspageinfo = TRUE;
+ SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
+ SMIL_SLIDE_INFO_S *singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
+
+ if (curSlideIdx < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid slide index = %d", curSlideIdx);
+ return MSG_ERR_SMIL_INVALID_SLIDE;
+ }
+
+ /*fetching the slide data for the first slide*/
+ if (singleSlideInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Getting Slide info from content mgr");
+ SMIL_SLIDE_INFO_S *slideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, curSlideIdx);
+ if (slideInfo == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide info fetch failed.");
+ return MSG_ERR_SMIL_INVALID_SLIDE;
+ }
+ _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, slideInfo);
+ singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
+ }
+
+ if (_msg_smil_cont_mgr_set_cur_slide_idx(smilContMgrHndle, curSlideIdx) == FALSE)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_cur_slide_idx is failed");
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current slide idx = %d", _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle));
+
+ int pageCnt = _msg_smil_cont_mgr_get_total_slide_count(smilContMgrHndle);
+ __msg_smil_event_mgr_set_client_cb_page_idx(smilEvntMgrHndle, curSlideIdx);
+ __msg_smil_event_mgr_set_client_cb_page_count(smilEvntMgrHndle, pageCnt);
+
+/********CallBack for Timer is needed only for Multipart Related MMS -
+ *Currently implementing for Only Three Media types as there are only two regions supported********/
+ if (pageCnt > 0) {
+ while (1) {
+ if (singleSlideInfo && singleSlideInfo->pageInfo) {
+ int durTime = 0;
+ int endTime = 0;
+ SMIL_PLAYER_PAGE_EVENT_E actionTypeOnPage = _msg_smil_event_mgr_get_page_action_type(smilEvntMgrHndle);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
+ switch (actionTypeOnPage) {
+ case PAGE_EVENT_PLAY:
+ /* Check for validity of Page Timer Values and Assign Default Values if required */
+ __msg_smil_event_mgr_set_page_time(smilEvntMgrHndle, singleSlideInfo);
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_PLAY_START);
+
+ /* check current page is help page and skip internal media play */
+ if (_msg_smil_cont_mgr_is_cur_slide_help_page(singleSlideInfo)) {
+ haspageinfo = FALSE;
+ break;
+ }
+
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_INTERNAL_MEDIA);
+ continue;
+ case PAGE_EVENT_INTERNAL_MEDIA:
+ /*Populate and sort Media Timer Info into the slideTimerInfo Array*/
+ __msg_smil_event_mgr_set_media_time_info(smilEvntMgrHndle, slideTimerCbData);
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START);
+ /*Considering the fact that there can be less than three media, we need to perform a check for
+ * if there is any media related information in the array for the sake of a boundary condition check.
+ * Also we need to take the Begin and End time of the Page into consideration*/
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE);
+ __msg_smil_event_mgr_check_media_type(smilEvntMgrHndle, slideTimerCbData);
+ timerDuration = __msg_smil_event_mgr_fill_media_time_data(smilEvntMgrHndle, slideTimerCbData);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "timerDuration = %lf", timerDuration);
+
+ /*Get page handle - Do not null check, it is not needed from here*/
+ msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ msg_struct_t page_info =_msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, singleSlideInfo->pageIdx);
+
+ durTime = _msg_smil_cont_mgr_get_page_time_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT);
+ if (timerDuration == 0) {
+ /* If there is no media Handle - Show the blank slide for the duration of the slide and then move to the next slide if the page->nDur is Valid. */
+ if (durTime != MSG_MMS_SMIL_TIMER_DUR_INDEFINITE) {
+ timerDuration = durTime;
+ } else {
+ /* if the page->nDur is Invalid do no timer interacton and wait for user action.*/
+ }
+ }
+
+ /* Calculation of timerDuration basing on the End Time/Duration of the page - This case arises if there is no media or in case the end time of all media > the end time of the slide. */
+ endTime = _msg_smil_cont_mgr_get_page_time_value(page_info, MSG_MMS_PAGE_END_TIME_INT);
+ if (endTime > 0) {
+ if (timerDuration > durTime) {
+ timerDuration = durTime;
+ }
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "timerDuration = %lf", timerDuration);
+
+ if (singleSlideInfo->nextSlide == NULL)/* If the current slide is the last slide */
+ _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
+
+ _msg_smil_event_mgr_set_slide_time(smilEvntMgrHndle, timerDuration);
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_END);
+ break;
+ case PAGE_EVENT_END:
+ break;
+ case PAGE_EVENT_MOVE_TO_NEXT:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PAGE_EVENT_MOVE_TO_NEXT");
+ if (singleSlideInfo->nextSlide != NULL) {
+ /* Move to next slide*/
+ _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, singleSlideInfo->nextSlide);
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_PLAY);
+ singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
+ if (singleSlideInfo && singleSlideInfo->nextSlide == NULL)
+ _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
+ } else {
+ /* Last Slide*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Last Slide - so do nothing");
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE);
+ break;
+ }
+ continue;
+ case PAGE_EVENT_MOVE_TO_PREV:
+ if (singleSlideInfo->prevSlide != NULL) {
+ /* Move to prev slide*/
+ _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, singleSlideInfo->prevSlide);
+ singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_PLAY);
+ _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, FALSE);
+ } else {
+ /*First Slide*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "First Slide");
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE);
+ break;
+ }
+ continue;
+ default:
+ break;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "slide page is NULL");
+ }
+ break;
+ }
+ } else {
+ /*invalide message without page info or multipart.mixed message*/
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_PLAY_START);
+ haspageinfo = FALSE;
+ }
+
+ if (slideTimerCbData->slideTimerInfo.actionTypeOnPage != PAGE_EVENT_NONE) {
+ MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+ int slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+
+ _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_PLAYING);
+
+ /*calling renderhandler to draw content*/
+ MSG_BOOL rendering_failed = FALSE;
+ SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle);
+ if (smilRenderer) {
+ err = _msg_smil_render_on_slide_render_handler(smilRenderer, slideTimerCbData->curSlideParam);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err);
+ rendering_failed = TRUE;
+
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_ERROR);
+ slideTimerCbData->appSmilCb(&(slideTimerCbData->curSlideParam->clientCbParam), slideTimerCbData->appUserData);
+
+ return err;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilRenderer is NULL");
+ rendering_failed = TRUE;
+ }
+
+ /*Calling the callback function of Client.*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Calling the Client callback");
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "RENDEREVENT = %d", slideTimerCbData->curSlideParam->renderEvent);
+ err = slideTimerCbData->appSmilCb(&(slideTimerCbData->curSlideParam->clientCbParam), slideTimerCbData->appUserData);
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_NONE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Client CB failed with error = %d", err);
+ _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_NONE);
+ return MSG_ERR_SMIL_UI_DISPLAY_FAIURE;
+ }
+
+ /*Timer Registration -- needed for Multipart Related MMS only.*/
+ MSG_BOOL is_video_media = _msg_smil_event_mgr_get_is_video_media(smilEvntMgrHndle);
+ MSG_BOOL binvalid_ro = _msg_smil_event_mgr_get_invalid_video_ro(smilEvntMgrHndle);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "binvalid_ro = %d", binvalid_ro);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isVideoMedia = %d", is_video_media);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timerDuration = %lf", timerDuration);
+
+ //for UI progressbar. ceiling duration time to second
+ double ceiled_duration = ceil(timerDuration/1000)*1000;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ceiling timerDuration = %lf", ceiled_duration);
+
+ if (is_video_media) { /*video*/
+ if (rendering_failed) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for invalid case of video content or etc");
+ if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+ return err;
+ }
+ } else if (binvalid_ro == TRUE) { /*video is an invalid ro drm content*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for invalid ro drm video content");
+ double time_dur = _msg_smil_event_mgr_get_slide_time(smilEvntMgrHndle);
+ double ceiled_duration = ceil(time_dur/1000)*1000;
+ if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+ return err;
+ }
+ } else { //valid ro video file. now we insure page duration for at least video duration
+ double remain_current_slide = 0.0;
+ double remain_next_Slide = 0.0;
+ double current_slide_time = 0.0;
+ if (_msg_smil_cont_mgr_get_slide_time(smilContMgrHndle, slideIdx, FALSE, &remain_current_slide)) {
+ if (_msg_smil_cont_mgr_get_slide_time(smilContMgrHndle, slideIdx+1, FALSE, &remain_next_Slide))
+ current_slide_time = remain_current_slide - remain_next_Slide;
+ else
+ current_slide_time = remain_current_slide;
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current slide(include video) time is %f", current_slide_time);
+
+ double duration_time = (current_slide_time >= ceiled_duration) ? current_slide_time : ceiled_duration;
+
+ if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, duration_time)) != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+ return err;
+ }
+ }
+ } else if (timerDuration > 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for normal case");
+ if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+ return err;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not created. PLAYSLIDEEVENT : timerDuration = %lf", timerDuration);
+ if (haspageinfo == FALSE) { /*for invalid page info message or multipart.mixed message*/
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_END);
+ timerDuration = MSG_MMS_SMIL_TIMER_DEFAULT_DUR;
+ if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, timerDuration)) != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+ return err;
+ }
+ } else if (_msg_smil_event_mgr_get_unsupported_content(smilEvntMgrHndle)) { /*if unsupported content has no duration time*/
+ timerDuration = MSG_MMS_SMIL_TIMER_DEFAULT_DUR;
+ if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, timerDuration)) != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+ return err;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not registerd actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
+ }
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Page event is error actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+static MSG_SMIL_ERROR_E __msg_smil_event_mgr_register_timer(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, void *cb, double duration)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYSLIDEEVENT : timerDuration = %lf", duration);
+ /*Start Timer.*/
+ duration = duration / MSG_MMS_SMIL_TIMER_CONVERT;
+ slideTimerCbData->timerHandle = ecore_timer_add(duration, cb, (void *)smilEvntMgrHndle);
+ if (slideTimerCbData->timerHandle == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Registry Failed");
+ return MSG_ERR_SMIL_TIMER_FAILURE;
+ }
+ return MSG_SMIL_SUCCESS;
+}
+
+
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_stop_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
+ void *timerRet = NULL;
+
+ /*Delete the Timer.*/
+ if (slideTimerCbData->timerHandle != NULL) {
+ timerRet = ecore_timer_del(slideTimerCbData->timerHandle);
+ if (timerRet == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Deletion Failed");
+ return MSG_ERR_SMIL_TIMER_FAILURE;
+ }
+ slideTimerCbData->timerHandle = NULL;
+ }
+
+ /* Update status as PLAYER_STATUS_PLAY_END */
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAY END");
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+ int curSlideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+ if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAY_END) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed");
+ return MSG_ERR_SMIL_NULL_MESSAGE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_pause_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
+
+ if (slideTimerCbData->timerHandle != NULL)
+ ecore_timer_freeze(slideTimerCbData->timerHandle);
+
+ /* Update status as PLAYER_EVENT_PAUSED */
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAY PAUSE");
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+ int curSlideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+ if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PAUSED) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed");
+ return MSG_ERR_SMIL_NULL_MESSAGE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_resume_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_BOOL isVideoMedia = _msg_smil_event_mgr_get_is_video_media(smilEvntMgrHndle);
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isVideoMedia = %d", isVideoMedia);
+
+ if (smilEvntMgrHndle->slideTimerCbData->timerHandle) {
+ ecore_timer_thaw(smilEvntMgrHndle->slideTimerCbData->timerHandle);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAY RESUME");
+ if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAYING) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed");
+ return MSG_ERR_SMIL_NULL_MESSAGE;
+ }
+ } else {
+ MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+ if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAYING) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed");
+ return MSG_ERR_SMIL_NULL_MESSAGE;
+ }
+
+ curSlideIdx += MSG_MMS_SMIL_SLIDEIDX_INCREMENT;
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT);
+
+ // Call Event Manager for playing the slide and starting the timer.
+ err = _msg_smil_event_mgr_play_slide(smilEvntMgrHndle, curSlideIdx);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed :PLAYER_EVENT_NEXT_SLIDE");
+ return err;
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+Eina_Bool _msg_smil_event_mgr_slide_timer_cb(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE);
+ MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+ MSG_SMIL_ERROR_E error = MSG_ERR_SMIL_UNKNOWN;
+ SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = (SMIL_EVENT_MGR_HANDLE_S *)data;
+ SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
+ SMIL_SLIDE_INFO_S *singleSlideInfo = NULL;
+ void *timerRet = NULL;
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, slideTimerCbData == NULL, EINA_FALSE);
+
+ /*Delete the Current timer and then start a fresh timer.*/
+ if (slideTimerCbData->timerHandle != NULL) {
+ timerRet = ecore_timer_del(slideTimerCbData->timerHandle);
+ if (timerRet == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Deletion Failed");
+ return EINA_FALSE;
+ }
+ slideTimerCbData->timerHandle = NULL;
+ }
+
+ int cur_slide = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+
+ singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, singleSlideInfo == NULL, EINA_FALSE);
+ while (1) {
+ switch (slideTimerCbData->slideTimerInfo.actionTypeOnPage) {
+ case PAGE_EVENT_END:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "actionTypeOnPage = PAGE_EVENT_END");
+ slideTimerCbData->elementIdx = -1;
+ if (singleSlideInfo->nextSlide != NULL) { /* Not the last slide*/
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT);
+ continue;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LAST SLIDE CASE");
+ /* If Delayed client cb only after timer expiry. */
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE);
+ _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE);
+ _msg_smil_cont_mgr_set_status(smilContMgrHndle, cur_slide, PLAYER_STATUS_PLAY_END);
+
+ /*call renderhandler to draw content*/
+ SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle);
+ error = _msg_smil_render_on_slide_render_handler(smilRenderer, slideTimerCbData->curSlideParam);
+ if (error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err);
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_ERROR);
+ }
+
+ /*Calling the callback of Client.*/
+ err = slideTimerCbData->appSmilCb(&(slideTimerCbData->curSlideParam->clientCbParam), slideTimerCbData->appUserData);
+ _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, FALSE);
+
+ if (err != MSG_SMIL_SUCCESS || error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Client CB failed");
+ return EINA_FALSE;
+ }
+ break;
+ }
+ case PAGE_EVENT_MOVE_TO_NEXT:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "actionTypeOnPage = PAGE_EVENT_MOVE_TO_NEXT");
+ _msg_smil_cont_mgr_set_status(smilContMgrHndle, cur_slide, PLAYER_STATUS_PLAY_END);
+ err = _msg_smil_event_mgr_move_to_next_slide(smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_move_to_next_slide is failed = %d", err);
+ }
+ break;
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
+ break;
+ }
+ break;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SLIDE IDX = %d", _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle));
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SLIDE STATUS = %d", _msg_smil_cont_mgr_get_cur_slide_status(smilContMgrHndle));
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return EINA_FALSE;
+}
+
+
+static double __msg_smil_event_mgr_fill_media_time_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callbackData == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam->singleSlideInfo == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+ int mediaCnt = 0;
+ int pageCnt = 0;
+ int count = 0;
+ double timerDuration = 0;
+ int value = 0;
+ int mediaIdxCnt = 0;
+
+ /*Get contentMgr */
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+
+ /*Get page list handler of current page of callbackData*/
+ msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ pageCnt = msg_list_length(pagelist_info);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+
+ /*Get page handler */
+ msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, callbackData->curSlideParam->singleSlideInfo->pageIdx);
+
+ /*Get media list handler */
+ msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ mediaCnt = msg_list_length(medialist_info);
+
+ while (count < MSG_MMS_SMIL_MEDIA_TYPES) {
+ callbackData->curSlideParam->timerDataMedia[count].mediaIdx = 0;
+ callbackData->curSlideParam->timerDataMedia[count].actionTypeOnMedia = MEDIA_EVENT_NONE;
+ count++;
+ }
+ count = 0;
+ if (callbackData->slideTimerInfo.actionTypeOnPage != PAGE_EVENT_INTERNAL_MEDIA) {
+ /* If it is not an internal media timer expiry, then the loop should start from 0 */
+ count = 0;
+ value = 0;
+ } else {
+ /* else the loop may start from the index pointed to by elementIdx. */
+ count = callbackData->elementIdx;
+ value = callbackData->slideTimerInfo.mediaTimerDur[callbackData->elementIdx][0];
+ }
+
+ while (count < mediaCnt * 2) {
+ if (callbackData->slideTimerInfo.mediaTimerDur[count][2] == MEDIA_EVENT_NONE) {
+ break;
+ } else {
+ /*only MEDIA_EVENT_BEGIN will be set to timerDatamedia, because begin = 0, dur and end = -1*/
+ if (callbackData->slideTimerInfo.mediaTimerDur[count][0] != MSG_MMS_SMIL_TIMER_DUR_INDEFINITE) {
+ if (callbackData->slideTimerInfo.mediaTimerDur[count][0] == value) {
+ callbackData->curSlideParam->timerDataMedia[mediaIdxCnt].mediaIdx = callbackData->slideTimerInfo.mediaTimerDur[count][1];
+ callbackData->curSlideParam->timerDataMedia[mediaIdxCnt].actionTypeOnMedia = callbackData->slideTimerInfo.mediaTimerDur[count][2];
+ count++;
+ mediaIdxCnt++;
+ } else if (count == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "count = %d, value = %d", count, value);
+ timerDuration = callbackData->slideTimerInfo.mediaTimerDur[count][0];
+ break;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "count2 = %d, value = %d", count, value);
+ timerDuration = (callbackData->slideTimerInfo.mediaTimerDur[count][0]) - (callbackData->slideTimerInfo.mediaTimerDur[count-1][0]);
+ break;
+ }
+ } else {
+ count++;
+ }
+ }
+ }
+
+ if ((count < (mediaCnt * 2)) && (callbackData->slideTimerInfo.mediaTimerDur[count][2] != MEDIA_EVENT_NONE))
+ callbackData->elementIdx = count;
+
+ return timerDuration;
+}
+
+
+static void __msg_smil_event_mgr_check_media_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam->singleSlideInfo == NULL);
+
+ int mediaIdx = 0;
+ int mediaCnt = 0;
+ int pageCnt = 0;
+
+ /*Get contentMgr */
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+
+ /*Get page list handler of current page of callbackData*/
+ msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ pageCnt = msg_list_length(pagelist_info);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, "page list is null, no pages in current message");
+
+ /*Get page handler */
+ msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, callbackData->curSlideParam->singleSlideInfo->pageIdx);
+ if (page_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in getting page(%d)", callbackData->curSlideParam->singleSlideInfo->pageIdx);
+ return;
+ }
+
+ /*Get media list handler */
+ msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ mediaCnt = msg_list_length(medialist_info);
+
+ while (mediaIdx < mediaCnt) {
+ int mediaType = 0;
+ msg_struct_t media_info = (msg_struct_t)msg_list_nth_data(medialist_info, mediaIdx);
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ if (mediaType == MMS_SMIL_MEDIA_VIDEO) {
+ callbackData->curSlideParam->isVideoMedia = TRUE;
+ } else if (mediaType == MMS_SMIL_MEDIA_INVALID) { /*unsupported contents*/
+ callbackData->curSlideParam->isUnsupportedContent = TRUE;
+ }
+ mediaIdx++;
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "callbackData->curSlideParam->isVideoMedia = %d", callbackData->curSlideParam->isVideoMedia);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "callbackData->curSlideParam->isUnsupportedContent = %d", callbackData->curSlideParam->isUnsupportedContent);
+}
+
+
+static void __msg_smil_event_mgr_set_media_time_info(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam->singleSlideInfo == NULL);
+
+ int pageCnt = 0;
+ int count = 0;
+ int holder = 0;
+ int subCount = 0;
+ int swapCount = 0;
+ int mediaCnt = 0;
+
+ /*Get contentMgr */
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+
+ /*Get page list handler of current page of callbackData*/
+ msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ pageCnt = msg_list_length(pagelist_info) ;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pageCnt== 0, "page count is 0, no pages in current message");
+
+ /*Get page handler */
+ msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, callbackData->curSlideParam->singleSlideInfo->pageIdx);
+
+ /*Get media list handler */
+ msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ int len = msg_list_length(medialist_info);
+
+ mediaCnt = len * 2;/* 2 is multiplied considering that at max for every media we may have two timers- 1. Begin, 2. End. */
+
+ memset(callbackData->slideTimerInfo.mediaTimerDur, 0, (MSG_MMS_SMIL_MAX_TIMER_IDX * MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION) * sizeof(int));
+ /*Populate Media Timer Info into the slideTimerInfo Array*/
+ while (count < mediaCnt) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "count = %d, mediaCnt = %d", count, mediaCnt);
+ int mediaType = 0;
+ int timeBegin;
+ int timeEnd;
+ msg_struct_t media_info = (msg_struct_t)msg_list_nth_data(medialist_info, count/2);
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "media type = %d", mediaType);
+
+ __msg_smil_event_mgr_change_media_time(media_info, mediaType);
+
+ /*Media Index in the array will be filled as 0,1,2,3*/
+ if (mediaType == MMS_SMIL_MEDIA_TEXT) {
+ msg_struct_t sText;
+ msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, &sText);
+
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_BEGIN_INT, &timeBegin);
+ callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeBegin;
+ callbackData->slideTimerInfo.mediaTimerDur[count][1] = count / 2;/*This division by 2 is done to keep the media count value in the array appropriate*/
+ callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_BEGIN;
+
+ count++;
+
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_END_INT, &timeEnd);
+ callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeEnd;
+ callbackData->slideTimerInfo.mediaTimerDur[count][1] = (count - 1) / 2;/*This subtraction and division by 2 is done to keep the media count value in the array appropriate*/
+ callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_END;
+ } else if (mediaType != MMS_SMIL_MEDIA_INVALID) {
+ msg_struct_t sAvi;
+ msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_AVI_HND, &sAvi);
+
+ msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_BEGIN_INT, &timeBegin);
+ callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeBegin;
+ callbackData->slideTimerInfo.mediaTimerDur[count][1] = count / 2;/*This division by 2 is done to keep the media count value in the array appropriate*/
+ callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_BEGIN;
+
+ count++;
+
+ msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_END_INT, &timeEnd);
+ callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeEnd;
+ callbackData->slideTimerInfo.mediaTimerDur[count][1] = (count - 1) / 2; /*This subtraction and division by 2 is done to keep the media count value in the array appropriate*/
+ callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_END;
+ } else if (mediaType == MMS_SMIL_MEDIA_INVALID) { /*unsupported contents*/
+ callbackData->slideTimerInfo.mediaTimerDur[count][0] = 0;
+ callbackData->slideTimerInfo.mediaTimerDur[count][1] = count / 2;/*This division by 2 is done to keep the media count value in the array appropriate*/
+ callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_BEGIN;
+
+ count++;
+
+ callbackData->slideTimerInfo.mediaTimerDur[count][0] = 0;
+ callbackData->slideTimerInfo.mediaTimerDur[count][1] = (count - 1) / 2; /*This subtraction and division by 2 is done to keep the media count value in the array appropriate*/
+ callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_END;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalide mediaType Error = %d", mediaType);
+ }
+
+ count++;
+ }
+
+ /*Sort timer Data*/
+ count = 0;
+ for (count = 1 ; count < mediaCnt ; count++) {
+ for (subCount = 0; subCount < (mediaCnt - count); subCount++) {
+ if (callbackData->slideTimerInfo.mediaTimerDur[subCount][0] > callbackData->slideTimerInfo.mediaTimerDur[subCount + 1][0]) {
+ swapCount = 0;
+ while (swapCount < MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION) {
+ holder = callbackData->slideTimerInfo.mediaTimerDur[subCount + 1][swapCount];
+ callbackData->slideTimerInfo.mediaTimerDur[subCount + 1][swapCount] = callbackData->slideTimerInfo.mediaTimerDur[subCount][swapCount];
+ callbackData->slideTimerInfo.mediaTimerDur[subCount][swapCount] = holder;
+ swapCount++;
+ }
+ }
+ }
+ }
+}
+
+
+static void __msg_smil_event_mgr_set_page_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *pageData)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, pageData == NULL);
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL);
+ int duration = 0 ;
+ int end = 0;
+ int pageCnt = 0;
+
+ /*Get struct handle of current page */
+ msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ pageCnt = msg_list_length(pagelist_info);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, "page count is 0, no pages in current message");
+
+ /*Get page*/
+ msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, pageData->pageIdx);
+
+ /*Get page nDur */
+ msg_get_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, &duration);
+
+ if (duration > 0) {
+ msg_set_int_value(page_info, MSG_MMS_PAGE_END_TIME_INT, duration);
+ } else {
+ /* Assigining Default Value */
+ msg_set_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, MSG_MMS_SMIL_TIMER_DUR_INDEFINITE);
+ msg_set_int_value(page_info, MSG_MMS_PAGE_END_TIME_INT, MSG_MMS_SMIL_TIMER_DUR_INDEFINITE);
+ }
+
+ msg_get_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, &duration);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PAGE----nDur = %d", duration);
+
+ msg_get_int_value(page_info, MSG_MMS_PAGE_END_TIME_INT, &end);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PAGE----nEnd = %d", end);
+}
+
+
+static void __msg_smil_event_mgr_change_media_time(msg_struct_t media_info, MmsSmilMediaType mediaType)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, media_info == NULL);
+ int timeBegin = 0;
+ int timeEnd = 0;
+ int timeDur = 0;
+
+#ifdef SMIL_MEDIA_TIMER
+ /*get media time*/
+ switch (mediaType) {
+ case MMS_SMIL_MEDIA_TEXT:
+ case MMS_SMIL_MEDIA_IMG:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Inside TXT/IMG Case");
+ msg_struct_t sText;
+ msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, (void**)&sText);
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_BEGIN_INT, &timeBegin);
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_END_INT, &timeEnd);
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_DURTIME_INT, &timeDur);
+
+ if (timeDur <= 0) {
+ timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+ }
+ break;
+ case MMS_SMIL_MEDIA_AUDIO:
+ case MMS_SMIL_MEDIA_VIDEO:
+ case MMS_SMIL_MEDIA_ANIMATE:
+ case MMS_SMIL_MEDIA_IMG_OR_VIDEO:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Inside AUDIO/VIDEO/ANIMATE Case");
+ msg_struct_t sAvi;
+ msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_AVI_HND, (void**)&sAvi);
+ msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_BEGIN_INT, &timeBegin);
+ msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_END_INT, &timeEnd);
+ msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_DURTIME_INT, &timeDur);
+
+ /* Calculating media Duration if nDurTime is not specified */
+ if (!timeDur)
+ timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+ break;
+ default:
+ break;
+ }
+
+ /*change media time*/
+ if ((timeBegin > 0) && (timeEnd > 0)) {
+ if (timeDur > 0) {
+ int tempDur = 0;
+ /* If End time as well as Duration is available then consider the smallest of them. */
+ tempDur = timeEnd - timeBegin;
+ tempDur = _msg_smil_util_find_smallest(tempDur, timeDur);
+ timeEnd = timeBegin + tempDur;
+ timeDur = tempDur;
+ } else {
+ timeDur = timeEnd - timeBegin;
+ }
+ } else if ((timeBegin > 0) && (timeDur > 0)) {
+ timeEnd = timeBegin + timeDur;
+ } else if ((timeEnd > 0) && (timeDur > 0)) {
+ timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN;
+ timeDur = _msg_smil_util_find_smallest(timeDur, timeEnd);
+ timeEnd = timeBegin + timeDur;
+ } else if (timeDur > 0) {
+ timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN;
+ timeEnd = timeDur;
+ } else if (timeBegin > 0) {
+ /*set media timerBegin as 0. Media will be display at first time*/
+ timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN;
+ timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+ timeEnd = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+ } else if (timeEnd > 0) {
+ timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN;
+ timeDur = timeEnd;
+ } else {
+ timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN;
+ timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+ timeEnd = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+ }
+#else
+ /*set begin of media as 0, begin time is important */
+ timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN;
+ timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+ timeEnd = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE;
+#endif
+ msg_struct_t sText;
+ msg_struct_t sAvi;
+
+ /*set changed media time*/
+ switch (mediaType) {
+ case MMS_SMIL_MEDIA_TEXT:
+ msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, &sText);
+ msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_BEGIN_INT, timeBegin);
+ msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_END_INT, timeEnd);
+ msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_DURTIME_INT, timeDur);
+ break;
+ case MMS_SMIL_MEDIA_IMG:
+ case MMS_SMIL_MEDIA_AUDIO:
+ case MMS_SMIL_MEDIA_VIDEO:
+ case MMS_SMIL_MEDIA_ANIMATE:
+ case MMS_SMIL_MEDIA_IMG_OR_VIDEO:
+ msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_AVI_HND, &sAvi);
+ msg_set_int_value(sAvi, MSG_MMS_SMIL_AVI_BEGIN_INT, timeBegin);
+ msg_set_int_value(sAvi, MSG_MMS_SMIL_AVI_END_INT, timeEnd);
+ msg_set_int_value(sAvi, MSG_MMS_SMIL_AVI_DURTIME_INT, timeDur);
+ break;
+ default:
+ break;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Media timeBegin = %d", timeBegin);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Media timeDur = %d", timeDur);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Media timeEnd = %d", timeEnd);
+}
+
+
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_move_to_next_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ int slideIdx = 0;
+ MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+ SMIL_SLIDE_INFO_S *singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+
+ if (singleSlideInfo != NULL) {
+ /*Call the Event Manager to Stop the timer.*/
+ if (_msg_smil_cont_mgr_get_cur_slide_status(smilContMgrHndle) != PLAYER_STATUS_PLAY_END) {
+ err = _msg_smil_event_mgr_stop_slide(smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_NEXT_SLIDE");
+ return err;
+ }
+ }
+
+ /*Incrementing the slide index in order to move to the next slide*/
+ slideIdx = singleSlideInfo->pageIdx + 1;
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT);
+ _msg_smil_event_mgr_set_is_video_media(smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_unsupported_content(smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_invalid_video_ro(smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_video_endofstream(smilEvntMgrHndle, FALSE);
+ } else {
+ _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_PLAY);
+ }
+
+ err = _msg_smil_event_mgr_play_slide(smilEvntMgrHndle, slideIdx);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed %d", err);
+ return err;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_is_slide_active(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam->singleSlideInfo ? TRUE : FALSE;
+}
+
+
+SMIL_TIMER_CALLBACK_DATA_S *_msg_smil_event_mgr_get_timer_cb_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, NULL);
+
+ return smilEvntMgrHndle->slideTimerCbData;
+}
+
+
+SMIL_SLIDE_EVENT_PARAM_S *_msg_smil_event_mgr_get_slide_event_param_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, NULL);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam;
+}
+
+
+double _msg_smil_event_mgr_get_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam->timerDur;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, double duration)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->timerDur = duration;
+ return TRUE;
+}
+
+
+SMIL_PLAYER_PAGE_EVENT_E _msg_smil_event_mgr_get_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+
+ return smilEvntMgrHndle->slideTimerCbData->slideTimerInfo.actionTypeOnPage;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_PAGE_EVENT_E page_event)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->slideTimerInfo.actionTypeOnPage = page_event;
+ return TRUE;
+}
+
+
+SMIL_SLIDE_INFO_S *_msg_smil_event_mgr_get_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, NULL);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam->singleSlideInfo;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *singleSlide)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->singleSlideInfo = singleSlide;
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_get_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam->iseos;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL iseos)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->iseos = iseos;
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_get_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoMedia;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isvideo)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoMedia = isvideo;
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_get_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isUnsupportedContent;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isunsupported)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->isUnsupportedContent = isunsupported;
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_get_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoRoInvalid;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isinvalid_ro)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoRoInvalid = isinvalid_ro;
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL islast_slide)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->isLastSlide = islast_slide;
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.isLastSlide = islast_slide;
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_event_mgr_set_render_event(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_RENDER_EVENT_E render_event)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->renderEvent = render_event;
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.clientCbEvent = render_event;
+ return TRUE;
+}
+
+
+MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_idx(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int slideIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.pageIdx = slideIdx;
+ return TRUE;
+}
+
+
+MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_count(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int pageCnt)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+ smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.pageCnt = pageCnt;
+ return TRUE;
+}
+
diff --git a/viewer/smil-player/src/msg-smil-media-render.c b/viewer/smil-player/src/msg-smil-media-render.c
new file mode 100755
index 0000000..2855d96
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-media-render.c
@@ -0,0 +1,1411 @@
+/*
+ * 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-smil-types.h"
+#include "msg-smil-player.h"
+#include "msg-smil-render.h"
+#include "msg-smil-util.h"
+#include "msg-ui-viewer-drm-utility.h"
+#include "msg-ui-image-resource.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+
+#include <mm_error.h>
+#include <mm_player.h>
+#include <mm_session.h>
+#include <utilX.h>
+#include <Ecore_X.h>
+#include <E_DBus.h>
+/*For Multimedia element width, height.*/
+#include "mm_file.h"
+
+/*for direct video displaying*/
+#include <mm_player_internal.h>
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+ /*smil player sound and video related functions*/
+static MSG_BOOL __msg_smil_render_is_player_active(void);
+static MSG_BOOL __msg_smil_render_player_mgr_create(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_destroy(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_play(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_stop(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_realize(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_unrealize(void);
+static MSG_BOOL __msg_smil_render_player_mgr_pause(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_mute(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_set_msg_cb(MMMessageCallback cb, void *user_data);
+static MSG_BOOL __msg_smil_render_player_mgr_set_video_stream_cb(void *cb, void *user_data);
+static MSG_BOOL __msg_smil_render_player_mgr_set_attribute(void *data, const char *path, int mediaType);
+
+static MSG_BOOL __msg_smil_render_check_file_validity(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path);
+static MSG_BOOL __msg_smil_render_get_video_size(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path, int *width, int *height);
+static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_RENDER_IMAGE_TYPE_E imageType);
+static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+static MSG_BOOL __msg_smil_render_get_resized_content_size(void *data, int content_w, int content_h, int *w, int *h);
+static void __msg_smil_render_create_video_image(void *data);
+static void __msg_smil_render_start_video_timer(void *data);
+/*idle functions*/
+static Eina_Bool __msg_smil_render_player_mgr_get_content_duration(void *data);
+static Eina_Bool __msg_smil_render_end_of_stream(void *data);
+static Eina_Bool __msg_smil_render_resize_mm_video(void *data);
+static Eina_Bool __msg_smil_render_update_video_screen(void *data);
+
+/*cb functions*/
+static int __msg_smil_render_msg_cb(int msg_type, void *msg_param, void *user_param);
+static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void *user_param, int width, int height);
+
+/*================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+static MMHandleType _player = 0;
+
+static MSG_BOOL __msg_smil_render_is_player_active(void)
+{
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "_player : %x", _player);
+ return _player ? TRUE : FALSE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_create(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int err = MM_ERROR_NONE;
+
+ if (__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_create(&_player)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_create is failed err = %x", err);
+ return FALSE;
+ }
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_INIT;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_realize(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_realize(_player)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_realize Error = %x", err);
+ return FALSE;
+ }
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_READY;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_unrealize(void)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if (mm_player_unrealize(_player) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_unrealize is failed");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_destroy(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if (mm_player_destroy(_player) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_destroy is failed");
+ return FALSE;
+ }
+ _player = 0;
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_NONE;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_play(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_start(_player)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_start is failed err = 0x%x", err);
+ return FALSE;
+ }
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_PLAYING;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_pause(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_pause(_player)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_pause is failed err = 0x%x", err);
+ return FALSE;
+ }
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_PAUSED;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_resume(_player)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_resume is failed err = 0x%x", err);
+ return FALSE;
+ }
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_PLAYING;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_mute(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_set_mute(_player, TRUE)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_mute is failed err = 0x%x", err);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_stop(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ /*stop media player*/
+ if (__msg_smil_render_is_player_active() && viewerRenderData->player_state == MEDIA_PLAYER_STATE_PLAYING) {
+ int err = MM_ERROR_NONE;
+ if ((err = mm_player_stop(_player)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_stop is failed err = 0x%x", err);
+ return FALSE;
+ }
+ }
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_STOP;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_set_msg_cb(MMMessageCallback cb, void *user_data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_set_message_callback(_player, cb, user_data)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_message_callback is failed err = 0x%x", err);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_set_video_stream_cb(void *cb, void *user_data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if ((err = mm_player_set_video_stream_callback(_player, cb, user_data)) != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_video_stream_callback is failed err = 0x%x", err);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_player_mgr_set_attribute(void *data, const char *path, int mediaType)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int err = MM_ERROR_NONE;
+ char *perr_name = NULL;
+ int resized_width = 0;
+ int resized_height = 0;
+ int path_len = strlen(path);
+
+ if (!__msg_smil_render_is_player_active())
+ return FALSE;
+
+ /*avsysaudiosink volume table setting*/
+ err = mm_player_set_attribute(_player, &perr_name,
+ "sound_volume_type", MM_SOUND_VOLUME_TYPE_MEDIA,
+ "sound_priority", MM_SOUND_PRIORITY_1,
+ "sound_fadeup", 0,
+ "sound_route", MM_AUDIOROUTE_PLAYBACK_NORMAL,
+ NULL);
+ if (err != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
+ free(perr_name);
+ return FALSE;
+ }
+
+ err = mm_player_set_attribute(_player, &perr_name,
+ "profile_uri", path, path_len,
+ NULL);
+ if (err != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
+ free(perr_name);
+ return FALSE;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaType = %d", mediaType);
+ if (mediaType == MMS_SMIL_MEDIA_VIDEO) {
+ err = mm_player_set_attribute(_player, &perr_name,
+ "display_rotation", MM_DISPLAY_ROTATION_NONE,
+ NULL);
+ if (err != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
+ free(perr_name);
+ return FALSE;
+ }
+
+ if (!__msg_smil_render_get_resized_content_size(viewerRenderData, viewerRenderData->video_width, viewerRenderData->video_height, &resized_width, &resized_height)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_get_resized_content_size is failed");
+ resized_width = viewerRenderData->viewer_width;
+ resized_height = viewerRenderData->viewer_landscape_height;
+ }
+
+ err = mm_player_set_attribute(_player, &perr_name,
+ "display_width", resized_width,
+ "display_height", resized_height,
+ NULL);
+ if (err != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
+ free(perr_name);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+
+static Eina_Bool __msg_smil_render_player_mgr_get_content_duration(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int duration = 0;
+ char *perr_name = NULL;
+ int err = MM_ERROR_NONE;
+
+ if (!__msg_smil_render_is_player_active()) {
+ viewerRenderData->video_duration_idle = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ err = mm_player_get_attribute(_player, &perr_name, "content_duration", &duration, NULL);
+ if (err != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_get_attribute is failed err = %x, pErrName = (%s)", err, perr_name);
+ if (perr_name)
+ free(perr_name);
+ }
+
+ viewerRenderData->video_duration = duration;
+ viewerRenderData->video_duration_idle = NULL;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "video content duration = %d", viewerRenderData->video_duration);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+MSG_BOOL _msg_smil_render_pause(void *data, int mediaType)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ if (viewerRenderData->display_drm_consume.consume_handle)
+ msg_ui_viewer_consume_ro_pause(&viewerRenderData->display_drm_consume);
+
+ if (viewerRenderData->play_drm_consume.consume_handle)
+ msg_ui_viewer_consume_ro_pause(&viewerRenderData->play_drm_consume);
+
+ if (viewerRenderData->video_update_timer)
+ ecore_timer_freeze(viewerRenderData->video_update_timer);
+
+ if (viewerRenderData->insert_image && elm_icon_animated_available_get(viewerRenderData->insert_image))
+ elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_FALSE);
+
+ /* enable copy and paste popup */
+ elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+ elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+
+ if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_AUDIO) {
+ SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
+ if (smil_handler->smilEvntMgrHndle->slideTimerCbData->curSlideParam->iseos == FALSE)
+ return __msg_smil_render_player_mgr_pause(viewerRenderData);
+ }
+
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_render_resume(void *data, int mediaType)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ if (viewerRenderData->display_drm_consume.consume_handle)
+ msg_ui_viewer_consume_ro_resume(&viewerRenderData->display_drm_consume);
+
+ if (viewerRenderData->play_drm_consume.consume_handle)
+ msg_ui_viewer_consume_ro_resume(&viewerRenderData->play_drm_consume);
+
+ if (viewerRenderData->video_update_timer)
+ ecore_timer_thaw(viewerRenderData->video_update_timer);
+
+ if (viewerRenderData->insert_image && elm_icon_animated_available_get(viewerRenderData->insert_image))
+ elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_TRUE);
+
+ /* disable copy and paste popup */
+ elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+ elm_entry_select_none(viewerRenderData->viewer_body);
+
+ if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_AUDIO) {
+ SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
+ if (_msg_smil_event_mgr_get_video_endofstream(smil_handler->smilEvntMgrHndle) == FALSE)
+ return __msg_smil_render_player_mgr_resume(viewerRenderData);
+ }
+
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_render_stop_playing_file(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ if (viewerRenderData->display_drm_consume.consume_handle) {
+ msg_ui_viewer_consume_ro_stop(&viewerRenderData->display_drm_consume);
+ viewerRenderData->display_drm_consume.consume_handle = NULL;
+ }
+
+ if (viewerRenderData->play_drm_consume.consume_handle) {
+ msg_ui_viewer_consume_ro_stop(&viewerRenderData->play_drm_consume);
+ viewerRenderData->play_drm_consume.consume_handle = NULL;
+ }
+
+ if (viewerRenderData->video_update_timer) {
+ ecore_timer_del(viewerRenderData->video_update_timer);
+ viewerRenderData->video_update_timer = NULL;
+ }
+
+ if (viewerRenderData->insert_image && elm_icon_animated_available_get(viewerRenderData->insert_image))
+ elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_FALSE);
+
+ /* enable copy and paste popup */
+ elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+ elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+
+ __msg_smil_render_player_mgr_stop(data);
+ __msg_smil_render_player_mgr_unrealize();
+ __msg_smil_render_player_mgr_destroy(data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+static Eina_Bool __msg_smil_render_update_video_screen(void *data)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ if (viewerRenderData->video_image) {
+ if (viewerRenderData->video_image_buffer) {
+ int video_width = 0;
+ int video_height = 0;
+ evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height);
+ evas_object_image_data_update_add(viewerRenderData->video_image, 0, 0, video_width, video_height);
+ }
+ return EINA_TRUE;
+ }
+
+ viewerRenderData->video_update_timer = NULL;
+ return EINA_FALSE;
+}
+
+
+static void __msg_smil_render_start_video_timer(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ if (viewerRenderData->video_update_timer == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "add timer");
+ viewerRenderData->video_update_timer = ecore_timer_add(0.03, __msg_smil_render_update_video_screen, viewerRenderData); /* more than 30 frames/sec*/
+ } else {
+ ecore_timer_thaw(viewerRenderData->video_update_timer);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ecore_timer_thaw");
+ }
+
+ return;
+}
+
+
+static Eina_Bool __msg_smil_render_resize_mm_video(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ if (viewerRenderData->video_image) {
+ int video_width = 0;
+ int video_height = 0;
+ int err = MM_ERROR_NONE;
+ char *perr_name = NULL;
+
+ evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height);
+ err = mm_player_set_attribute(_player, &perr_name,
+ "display_width", video_width,
+ "display_height", video_height,
+ NULL);
+ if (err != MM_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x", err);
+ if (perr_name)
+ free(perr_name);
+
+ viewerRenderData->video_resize_idle = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ viewerRenderData->video_image_buffer = NULL;
+
+ if (!viewerRenderData->video_image_buffer) {
+ viewerRenderData->video_image_buffer = evas_object_image_data_get(viewerRenderData->video_image, EINA_TRUE);
+ evas_object_image_data_set(viewerRenderData->video_image, viewerRenderData->video_image_buffer);
+ __msg_smil_render_update_video_screen(viewerRenderData);
+ }
+ }
+
+ viewerRenderData->video_resize_idle = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void *user_param, int width, int height)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, stream == NULL || stream_size <= 0, MSG_UI_RET_ERR);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, user_param == NULL, MSG_UI_RET_ERR);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_param;
+ int video_width = 0;
+ int video_height = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "stream_size = %d, width = %d, height = %d", stream_size, width, height);
+ evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height);
+
+ if (viewerRenderData->is_skip_frame) { /*skip 1 frame*/
+ viewerRenderData->is_skip_frame = FALSE;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Skip 1 frame");
+ return MSG_UI_RET_SUCCESS;
+ }
+
+ if (width != video_width || height != video_height) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "size is different video_width = %d, video height = %d", video_width, video_height);
+ if (viewerRenderData->video_resize_idle) {
+ ecore_idler_del(viewerRenderData->video_resize_idle);
+ viewerRenderData->video_resize_idle = NULL;
+ }
+ viewerRenderData->video_resize_idle = ecore_idler_add(__msg_smil_render_resize_mm_video, (void *)viewerRenderData);
+ return MSG_UI_RET_SUCCESS;
+ }
+
+ if (viewerRenderData->video_image_buffer == NULL) {
+ viewerRenderData->video_image_buffer = evas_object_image_data_get(viewerRenderData->video_image, EINA_TRUE);
+ evas_object_image_data_set(viewerRenderData->video_image, viewerRenderData->video_image_buffer);
+ }
+
+ /*update evas image buffer*/
+ if (viewerRenderData->video_image_buffer)
+ memcpy(viewerRenderData->video_image_buffer, stream, stream_size);
+
+ return MSG_UI_RET_SUCCESS;
+}
+
+
+static Eina_Bool __msg_smil_render_end_of_stream(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ SMIL_SLIDE_INFO_S *current_slide_data = NULL;
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+ SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle);
+
+ current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle);
+ _msg_smil_event_mgr_set_video_endofstream(smilEvntMgrHndle, TRUE);
+ _msg_smil_render_stop_playing_file(data);
+
+ if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo) {
+ _msg_smil_event_mgr_set_is_video_media(smilEvntMgrHndle, FALSE);
+ viewerRenderData->video_duration = 0;
+ }
+
+ viewerRenderData->video_eos_idle = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+static int __msg_smil_render_msg_cb(int msg_type, void *msg_param, void *user_param)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, user_param == NULL, MSG_UI_RET_ERR);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_param;
+ MMMessageParamType *param = (MMMessageParamType *)msg_param;
+
+ if (!__msg_smil_render_is_player_active())
+ return MSG_UI_RET_ERR;
+
+ switch (msg_type) {
+ case MM_MESSAGE_BEGIN_OF_STREAM:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_BEGIN_OF_STREAM");
+ {
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+ SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle);
+
+ if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo) {
+ if (viewerRenderData->video_duration_idle) {
+ ecore_idler_del(viewerRenderData->video_duration_idle);
+ viewerRenderData->video_duration_idle = NULL;
+ }
+ viewerRenderData->video_duration_idle = ecore_idler_add(__msg_smil_render_player_mgr_get_content_duration, (void *)viewerRenderData);
+ }
+ viewerRenderData->is_skip_frame = TRUE;
+ }
+ break;
+
+ case MM_MESSAGE_ERROR:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_ERROR");
+ break;
+
+ case MM_MESSAGE_WARNING:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_WARNING");
+ break;
+
+ case MM_MESSAGE_END_OF_STREAM:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_END_OF_STREAM");
+ if (viewerRenderData->video_eos_idle) {
+ ecore_idler_del(viewerRenderData->video_eos_idle);
+ viewerRenderData->video_eos_idle = NULL;
+ }
+ viewerRenderData->video_eos_idle = ecore_idler_add(__msg_smil_render_end_of_stream, (void *)viewerRenderData);
+ break;
+
+ case MM_MESSAGE_STATE_CHANGED:
+ if (param) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_STATE_CHANGED with[%d]", param->state.current);
+ switch (param->state.current) {
+ case MM_PLAYER_STATE_NONE:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [NONE]");
+ break;
+ case MM_PLAYER_STATE_READY:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [READY]");
+ break;
+ case MM_PLAYER_STATE_PLAYING:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [PLAYING]");
+ {
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+ SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle);
+
+ if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo)
+ __msg_smil_render_start_video_timer(viewerRenderData);
+ }
+ break;
+ case MM_PLAYER_STATE_PAUSED:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [PAUSED]");
+ break;
+ case MM_PLAYER_STATE_NULL:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [NULL]");
+ break;
+ }
+ }
+ break;
+
+ case MM_MESSAGE_STATE_INTERRUPTED:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_STATE_INTERRUPTED");
+ if (param) {
+ switch (param->code) {
+ case MM_MSG_CODE_INTERRUPTED_BY_OTHER_APP:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_ERROR_PLAYER_BT_CONNECTION");
+ break;
+
+ case MM_MSG_CODE_INTERRUPTED_BY_CALL_START:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_CALL_START");
+ break;
+
+ case MM_MSG_CODE_INTERRUPTED_BY_CALL_END:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_CALL_END");
+ break;
+
+ case MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG");
+ {
+ SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
+ SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle);
+ SMIL_SLIDE_EVENT_PARAM_S *curSlideParam = _msg_smil_event_mgr_get_slide_event_param_data(smilEvntMgrHndle);;
+ SMIL_TIMER_CALLBACK_DATA_S *timer_cb_data = _msg_smil_event_mgr_get_timer_cb_data(smilEvntMgrHndle);
+
+ _msg_smil_player_on_slide_event_handler((void **)&smil_handler, PLAYER_EVENT_PAUSE);
+ if (curSlideParam && timer_cb_data) {
+ _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE);
+ timer_cb_data->appSmilCb(&(curSlideParam->clientCbParam), timer_cb_data->appUserData);
+ }
+ }
+ break;
+
+ case MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT");
+ /*It is called when vtcall is receiving during video play*/
+ break;
+
+ case MM_MSG_CODE_INTERRUPTED_BY_ALARM_START:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_ALARM_START");
+ break;
+
+ case MM_MSG_CODE_INTERRUPTED_BY_ALARM_END:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_ALARM_END");
+ break;
+ }
+ }
+ break;
+
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid msg_type = %d", msg_type);
+ return MSG_UI_RET_ERR;
+ }
+
+ return MSG_UI_RET_SUCCESS;
+}
+
+
+static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
+
+ if (__msg_smil_render_is_player_active())
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_create((void *)viewerRenderData))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_set_attribute(viewerRenderData, path, MMS_SMIL_MEDIA_AUDIO))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_set_msg_cb(__msg_smil_render_msg_cb, (void *)viewerRenderData))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_play((void *)viewerRenderData)) {
+ return FALSE;
+ }
+
+ /*if silent and mute mode*/
+ if (viewerRenderData->ismute) {
+ if (!__msg_smil_render_player_mgr_mute((void *)viewerRenderData))
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_mute is Fail");
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
+
+ if (msg_common_is_connected_call()) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Unable to play during call");
+ return FALSE;
+ }
+
+ if (!ecore_file_exists(path)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media file is not exist!");
+ return FALSE;
+ }
+
+ if (msg_ui_viewer_is_drm_file(path)) {
+ if (msg_ui_viewer_check_drm_ro_valid(path, MSG_UI_DRM_RIGHT_PLAY)) {
+ /*consume ro and play content*/
+ if (viewerRenderData->play_drm_consume.consume_handle) {
+ msg_ui_viewer_consume_ro_stop(&viewerRenderData->play_drm_consume);
+ viewerRenderData->play_drm_consume.consume_handle = NULL;
+ }
+
+ //copy drm file temporarily, because drm file is created by MF with read right and drm_svc try to open file with append mode.
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]= {0,};
+ const char *filename = (const char *)ecore_file_file_get(path);
+
+ snprintf(dst_path, sizeof(dst_path),"%s%s", viewerRenderData->working_path, filename);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = %s", dst_path);
+
+ char *app_drm_path = msg_ui_viewer_util_copy_file(path, dst_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "app_drm_path = %s", app_drm_path);
+ //copy drm content to app path end
+
+ /*play original sound(drm)*/
+ if (__msg_smil_render_play_audio_file(viewerRenderData, app_drm_path) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_audio_file is failed");
+ _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+
+ if (app_drm_path) {
+ g_free(app_drm_path);
+ app_drm_path = NULL;
+ }
+
+ return FALSE;
+ }
+
+ msg_ui_viewer_consume_ro_start(path, MSG_UI_DRM_RIGHT_PLAY, &viewerRenderData->play_drm_consume);
+
+ if (app_drm_path) {
+ g_free(app_drm_path);
+ app_drm_path = NULL;
+ }
+ } else { /*there is no valid ro case*/
+ /*display drm icon*/
+ __msg_smil_render_show_image_file(viewerRenderData, MSG_VIEWER_IMAGE_DRM_ICON, VIEWER_IMAGE_TYPE_DRM_SOUND);
+ }
+ } else {
+ /*normal case -- no drm*/
+ if (__msg_smil_render_play_audio_file(viewerRenderData, path) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_audio_file is failed");
+ _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+ return FALSE;
+ }
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+void _msg_smil_render_rotate_video_window(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+ viewerRenderData->main_win_rotate = elm_win_rotation_get(viewerRenderData->main_window);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "main_win_rotate = %d", viewerRenderData->main_win_rotate);
+}
+
+
+static MSG_BOOL __msg_smil_render_check_file_validity(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_path == NULL, FALSE);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file_path = (%s)", file_path);
+
+ MMHandleType content = (MMHandleType)NULL;
+ int err = 0;
+
+ err = mm_file_create_content_attrs(&content, file_path);
+ if (err == 0) {
+ err = mm_file_destroy_content_attrs(content);
+ if (err != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_destroy_content_attrs FAILED err = %x", err);
+ return FALSE;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_create_content_attrs FAILED err = %x", err);
+ return FALSE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_get_video_size(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path, int *width, int *height)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_path == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, width == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, height == NULL, FALSE);
+ MMHandleType content = (MMHandleType)NULL;
+ int err = 0;
+ char *err_msg = NULL;
+ MSG_BOOL iserror = FALSE;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file_path = (%s)", file_path);
+ err = mm_file_create_content_attrs(&content, file_path);
+
+ if (err == 0) {
+ err = mm_file_get_attrs(content, &err_msg,
+ MM_FILE_CONTENT_VIDEO_WIDTH, width,
+ MM_FILE_CONTENT_VIDEO_HEIGHT, height,
+ /*MM_FILE_CONTENT_VIDEO_THUMBNAIL, &thumbnail, &thumbnail_size,*/
+ NULL);
+ if (err != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_get_attrs FAILED err = %d", err);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_get_attrs err_msg = %s", err_msg);
+ if (err_msg) {
+ free(err_msg);
+ err_msg = NULL;
+ }
+ iserror = TRUE;
+ }
+
+ err = mm_file_destroy_content_attrs(content);
+ if (err != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_destroy_content_attrs FAILED err = %x", err);
+ iserror = TRUE;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_create_content_attrs FAILED err = %x", err);
+ iserror = TRUE;
+ }
+
+ if (iserror)
+ return FALSE;
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_get_resized_content_size(void *data, int content_w, int content_h, int *w, int *h)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, w == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, h == NULL, FALSE);
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ int viewer_width = viewerRenderData->viewer_width > viewerRenderData->viewer_landscape_width ? viewerRenderData->viewer_landscape_width : viewerRenderData->viewer_width;
+ int viewer_height = viewerRenderData->viewer_height > viewerRenderData->viewer_landscape_height ? viewerRenderData->viewer_landscape_height : viewerRenderData->viewer_height;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_width = %d, height = %d", viewer_width, viewer_height);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "content_w = %d, content_h = %d", content_w, content_h);
+
+ /*check image size*/
+ if (content_w > viewer_width) {
+ *w = viewer_width;
+ *h = content_h * viewer_width / content_w;
+
+ if (*h > viewer_height) {
+ *w = content_w * viewer_height / content_h;
+ *h = viewer_height;
+ }
+ } else if (content_h > viewer_height) {
+ *w = content_w * viewer_height / content_h;
+ *h = viewer_height;
+
+ if (*w > viewer_width) {
+ *w = viewer_width;
+ *h = content_h * viewer_width / content_w;
+ }
+ } else if (content_w <= viewer_width && content_h <= viewer_height) {
+ *w = content_w;
+ *h = content_h;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid case");
+ *w = content_w;
+ *h = content_h;
+ }
+
+ /*make size as even number becasue of hardware limitation*/
+ if (*w % 2)
+ *w = *w - 1;
+
+ if (*h % 2)
+ *h = *h - 1;
+
+ /*make size as multiples of 16 because of hardware limitation, C110*/
+ int remained = 0;
+ if ((remained = *w % 16))
+ *w = *w - remained;
+
+ if ((remained = *h % 16))
+ *h = *h - remained;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Result content width = %d, height = %d", *w, *h);
+ return TRUE;
+}
+
+
+static void __msg_smil_render_create_video_image(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
+ SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+ Evas_Object *ic = NULL;
+ int resized_width = 0;
+ int resized_height = 0;
+
+ if (!__msg_smil_render_get_resized_content_size(viewerRenderData, viewerRenderData->video_width, viewerRenderData->video_height, &resized_width, &resized_height)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_get_resized_content_size is failed");
+ resized_width = viewerRenderData->viewer_width;
+ resized_height = viewerRenderData->viewer_landscape_height;
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image resized_width = %d, resized_height = %d", resized_width, resized_height);
+
+ /*create image object for video image*/
+ Evas *evas = NULL;
+ evas = evas_object_evas_get(viewerRenderData->main_window);
+ ic = evas_object_image_add(evas);
+ viewerRenderData->video_image = ic;
+
+ evas_object_image_colorspace_set(ic, EVAS_COLORSPACE_ARGB8888);
+ evas_object_image_size_set(ic, resized_width, resized_height);
+ evas_object_image_fill_set(ic, 0, 0, resized_width, resized_height);
+ evas_object_image_smooth_scale_set(ic, EINA_TRUE);
+ evas_object_resize(ic, resized_width, resized_height);
+ evas_object_move(ic, 0, 0);
+ evas_object_size_hint_min_set(ic, resized_width, resized_height);
+
+ /*set video image buffer to display as black screen*/
+ viewerRenderData->video_image_buffer = evas_object_image_data_get(ic, EINA_TRUE);
+ if (viewerRenderData->video_image_buffer) {
+ memset(viewerRenderData->video_image_buffer, 0, (resized_width * resized_height * 4));
+ evas_object_image_data_set(ic, viewerRenderData->video_image_buffer);
+ }
+
+ /*video top*/
+ elm_box_pack_start(viewerRenderData->viewer_content_box, ic);
+
+#ifdef MSG_VIEWER_ENABLE_VIDEO_TOP_AND_BOTTOM /*Set image top as defalt region in case of video*/
+ SMIL_SLIDE_INFO_S *curSlideInfo = NULL;
+ MSG_BOOL istexttop = FALSE;
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+
+ curSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0);
+ if (curSlideInfo && curSlideInfo->pageInfo)
+ istexttop = curSlideInfo->pageInfo->isTexttop;
+
+ if (istexttop) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message");
+ elm_box_unpack(viewerRenderData->viewer_content_box, ic);
+ elm_box_pack_end(viewerRenderData->viewer_content_box, ic); /*Text top*/
+ } else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image top message");
+#endif
+ evas_object_show(ic);
+}
+
+
+static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
+ int video_width = 0;
+ int video_height = 0;
+
+ /*get width, height size of video content*/
+ if (!__msg_smil_render_get_video_size(viewerRenderData, path, &video_width, &video_height))
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_get_video_size is failed");
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "video_width = %d, video_height = %d", video_width, video_height);
+ if (video_width == 0 || video_height == 0) {
+ video_width = VIEWER_VIDEO_WIDTH;
+ video_height = VIEWER_VIDEO_HEIGHT;
+ }
+
+ /*set original video content size.*/
+ viewerRenderData->video_width = video_width;
+ viewerRenderData->video_height = video_height;
+
+ /*create Evas object image for video*/
+ if (!viewerRenderData->video_image)
+ __msg_smil_render_create_video_image(viewerRenderData);
+
+ if (!__msg_smil_render_player_mgr_create(viewerRenderData))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_set_attribute(viewerRenderData, path, MMS_SMIL_MEDIA_VIDEO))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_set_msg_cb(__msg_smil_render_msg_cb, (void *)viewerRenderData))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_set_video_stream_cb(__msg_smil_render_video_stream_cb, (void *)viewerRenderData))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData))
+ return FALSE;
+
+ if (!__msg_smil_render_player_mgr_play((void *)viewerRenderData)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
+ SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle);
+
+ if (msg_common_is_connected_call()) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Unable to play during call");
+ return FALSE;
+ }
+
+ if (!ecore_file_exists(path)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media file is not exist!");
+ return FALSE;
+ }
+
+ if (!__msg_smil_render_check_file_validity(viewerRenderData, path)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_check_file_validity is failed");
+ return FALSE;
+ }
+
+ _msg_smil_event_mgr_set_invalid_video_ro(smilEvntMgrHndle, FALSE);
+
+ if (msg_ui_viewer_is_drm_file(path)) {
+ if (msg_ui_viewer_check_drm_ro_valid(path, MSG_UI_DRM_RIGHT_PLAY)) {
+ /*consume ro and play content*/
+ if (viewerRenderData->play_drm_consume.consume_handle) {
+ msg_ui_viewer_consume_ro_stop(&viewerRenderData->play_drm_consume);
+ viewerRenderData->play_drm_consume.consume_handle = NULL;
+ }
+
+ //copy drm file temporarily, because drm file is created by MF with read right and drm_svc try to open file with append property.
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]= {0,};
+ const char *filename = (const char *)ecore_file_file_get(path);
+
+ snprintf(dst_path, sizeof(dst_path),"%s%s", viewerRenderData->working_path, filename);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = %s", dst_path);
+
+ char *app_drm_path = msg_ui_viewer_util_copy_file(path, dst_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "app_drm_path = %s", app_drm_path);
+ //copy drm content to app path end
+
+ /*play drm video file*/
+ if (__msg_smil_render_play_video_file(viewerRenderData, app_drm_path) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_video_file is failed");
+ _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+
+ if (app_drm_path) {
+ g_free(app_drm_path);
+ app_drm_path = NULL;
+ }
+
+ return FALSE;
+ }
+
+ msg_ui_viewer_consume_ro_start(path, MSG_UI_DRM_RIGHT_PLAY, &viewerRenderData->play_drm_consume);
+
+ if (app_drm_path) {
+ g_free(app_drm_path);
+ app_drm_path = NULL;
+ }
+ } else { /*drm, but no ro case*/
+ _msg_smil_event_mgr_set_invalid_video_ro(smilEvntMgrHndle, TRUE);
+ /*display drm icon*/
+ __msg_smil_render_show_image_file(viewerRenderData, MSG_VIEWER_IMAGE_DRM_ICON, VIEWER_IMAGE_TYPE_DRM_VIDEO);
+ }
+ } else {
+ /*normal case -- no drm*/
+ if (__msg_smil_render_play_video_file(viewerRenderData, path) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_video_file is failed");
+ _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+ return FALSE;
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_RENDER_IMAGE_TYPE_E imageType)
+{
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, "viewerRenderData is NULL");
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, path == NULL, "path is NULL");
+ Evas_Object *image_layout = NULL;
+ Evas_Object *ic = NULL;
+ int contnet_w = 0;
+ int contnet_h = 0;
+ int tmp_w = 0;
+ int tmp_h = 0;
+ int layout_width = viewerRenderData->viewer_width - (2 * (viewerRenderData->viewer_width * VIEWER_XPAD_RATIO));
+ int layout_height = viewerRenderData->viewer_height;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "path = %s", path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "imageType = %d", imageType);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "layout_width = %d, layout_height = %d", layout_width, layout_height);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, viewerRenderData->viewer_content_box == NULL, "Invalid argument: viewer_content_box is NULL");
+ /*get image's content size*/
+ Evas *evas = evas_object_evas_get(viewerRenderData->main_window);
+ Evas_Object *img = evas_object_image_add(evas);
+ evas_object_image_file_set(img, path, NULL);
+ evas_object_image_size_get(img, &contnet_w, &contnet_h);
+ evas_object_del(img);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "image_width = %d, image_height = %d", contnet_w, contnet_h);
+
+ /*create layout for image*/
+ image_layout = elm_layout_add(viewerRenderData->layout_main);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, image_layout == NULL, "failed to create viewerRenderData->viewer_content_layout");
+
+ elm_layout_file_set(image_layout, MSG_VIEWER_THEME, "viewer_main");
+ evas_object_size_hint_weight_set(image_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(image_layout, 0.0, 0.0);
+ evas_object_show(image_layout);
+
+
+ /*create icon above image_layout*/
+ ic = elm_icon_add(image_layout);
+
+ if (imageType == VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA) { // rendering drm image by raw data
+ unsigned char *drm_raw_data = NULL;
+ unsigned int buf_size = 0;
+
+ drm_raw_data = msg_ui_viewer_get_buffer_from_drm_file(path, MSG_UI_DRM_RIGHT_DISPLAY, &buf_size);
+ if (drm_raw_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "buf_size = %d", buf_size);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "image buf size = %d", (contnet_w * contnet_h * 4));
+
+ Eina_Bool result = elm_icon_memfile_set(ic, drm_raw_data, buf_size, NULL, NULL);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "result = %d", result);
+
+ free(drm_raw_data);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_raw_data is NULL");
+ elm_icon_file_set(ic, MSG_VIEWER_IMAGE_DRM_ICON, NULL);
+ }
+ } else {
+ elm_icon_file_set(ic, path, NULL);
+ }
+
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, ic == NULL, "attached image add failed");
+
+ if (elm_icon_animated_available_get(ic)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Animated image");
+ elm_icon_animated_set(ic, EINA_TRUE);
+ elm_icon_animated_play_set(ic, EINA_TRUE);
+ }
+
+ /*check and set image size*/
+ if (contnet_w > layout_width) {
+ tmp_w = layout_width;
+ tmp_h = contnet_h * layout_width / contnet_w;
+
+ if (tmp_h > layout_height) {
+ tmp_w = contnet_w * layout_height / contnet_h;
+ tmp_h = layout_height;
+ }
+ evas_object_size_hint_min_set(ic, tmp_w, tmp_h);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tmp_w = %d, tmp_h = %d", tmp_w, tmp_h);
+ } else if (contnet_h > layout_height) {
+ tmp_w = contnet_w * layout_height / contnet_h;
+ tmp_h = layout_height;
+
+ if (tmp_w > layout_width) {
+ tmp_w = layout_width;
+ tmp_h = contnet_h * layout_width / contnet_w;
+ }
+ evas_object_size_hint_min_set(ic, tmp_w, tmp_h);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tmp_w = %d, tmp_h = %d", tmp_w, tmp_h);
+ } else if (contnet_w <= layout_width && contnet_h <= layout_height) {
+ evas_object_size_hint_min_set(ic, contnet_w , contnet_h);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid case");
+ }
+
+ elm_object_part_content_set(image_layout, "viewer.body.content", ic);
+
+ if (imageType == VIEWER_IMAGE_TYPE_DRM_SOUND) {
+ if (!viewerRenderData->insert_sound_icon) {
+ elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout); /*sound drm icon*/
+ viewerRenderData->insert_sound_icon = image_layout;
+ evas_object_show(ic);
+ } else {
+ evas_object_del(ic);
+ }
+ } else if (imageType == VIEWER_IMAGE_TYPE_UNSUPPORTED) {
+ if (!viewerRenderData->insert_unsupported_icon) {
+ elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout); /*unsupported file icon*/
+ viewerRenderData->insert_unsupported_icon = image_layout;
+ evas_object_show(ic);
+ } else {
+ evas_object_del(ic);
+ }
+ } else {
+ elm_box_pack_start(viewerRenderData->viewer_content_box, image_layout);/*image top*/
+ viewerRenderData->insert_image = image_layout;
+
+ /*display region area according to Region info*/
+ MSG_BOOL istexttop = FALSE;
+ SMIL_SLIDE_INFO_S *curSlideInfo = NULL;
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+
+ curSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0);
+
+ if (curSlideInfo && curSlideInfo->pageInfo)
+ istexttop = curSlideInfo->pageInfo->isTexttop;
+
+ if (istexttop) {
+ if (viewerRenderData->insert_sound_icon || viewerRenderData->insert_unsupported_icon) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message. And there is a drm sound or unsupported icon");
+ elm_box_unpack(viewerRenderData->viewer_content_box, image_layout);
+ elm_box_pack_after(viewerRenderData->viewer_content_box, image_layout, viewerRenderData->viewer_body);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message");
+ elm_box_unpack(viewerRenderData->viewer_content_box, image_layout);
+ elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image top message");
+ }
+
+ evas_object_show(ic);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+MSG_BOOL _msg_smil_render_show_inserted_image(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
+
+ if (access(path, R_OK) == 0) {
+ if (msg_ui_viewer_is_drm_file(path)) {
+ if (msg_ui_viewer_check_drm_ro_valid(path, MSG_UI_DRM_RIGHT_DISPLAY)) {
+ /*consume ro and display content*/
+ if (viewerRenderData->display_drm_consume.consume_handle) {
+ msg_ui_viewer_consume_ro_stop(&viewerRenderData->display_drm_consume);
+ viewerRenderData->display_drm_consume.consume_handle = NULL;
+ }
+
+ //copy drm file temporarily, because drm file is created by MF with read right and drm_svc try to open file with append property.
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]= {0,};
+ const char *filename = (const char *)ecore_file_file_get(path);
+
+ snprintf(dst_path, sizeof(dst_path),"%s%s", viewerRenderData->working_path, filename);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = %s", dst_path);
+
+ char *app_drm_path = msg_ui_viewer_util_copy_file(path, dst_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "app_drm_path = %s", app_drm_path);
+ //copy drm content to app path end
+
+ /*display original image*/
+ __msg_smil_render_show_image_file(viewerRenderData, app_drm_path, VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA);
+
+ msg_ui_viewer_consume_ro_start(path, MSG_UI_DRM_RIGHT_DISPLAY, &viewerRenderData->display_drm_consume);
+
+ if (app_drm_path) {
+ free(app_drm_path);
+ app_drm_path = NULL;
+ }
+ } else {
+ /*there is no valid ro case*/
+ /*display drm icon*/
+ __msg_smil_render_show_image_file(viewerRenderData, MSG_VIEWER_IMAGE_DRM_ICON, VIEWER_IMAGE_TYPE_DRM_IMAGE);
+ }
+ } else { /*no drm case*/
+ MSG_BOOL unsupported_image = FALSE;
+ if (!strcmp(path, MSG_VIEWER_IMAGE_UNSUPPORT_ICON))
+ unsupported_image = TRUE;
+
+ if (unsupported_image)
+ __msg_smil_render_show_image_file(viewerRenderData, path, VIEWER_IMAGE_TYPE_UNSUPPORTED);
+ else
+ __msg_smil_render_show_image_file(viewerRenderData, path, VIEWER_IMAGE_TYPE_NORMAL);
+ }
+ } else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "access is failed");
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
diff --git a/viewer/smil-player/src/msg-smil-player-interface.c b/viewer/smil-player/src/msg-smil-player-interface.c
new file mode 100755
index 0000000..fb040b7
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-player-interface.c
@@ -0,0 +1,75 @@
+/*
+ * 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-smil-player-interface.h"
+#include "msg-smil-player.h"
+#include "msg-smil-util.h"
+
+/*================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_SMIL_ERROR_E msg_smil_create_smil_player(msg_struct_t msg_info_t, void *callBack, void *userData , void **instance)
+{
+ return _msg_smil_create_smil_player(msg_info_t, callBack, userData, instance);
+}
+
+void msg_smil_destroy_smil_player(void *smilhandle)
+{
+ _msg_smil_destroy_smil_player(smilhandle);
+}
+
+int msg_smil_get_current_slide_idx(void *hSmilHandle)
+{
+ return _msg_smil_get_current_slide_idx(hSmilHandle);
+}
+
+SMIL_PLAYER_STATUS_E msg_smil_get_current_slide_status(void *hSmilHandle)
+{
+ return _msg_smil_get_current_slide_status(hSmilHandle);
+}
+
+MSG_SMIL_ERROR_E msg_smil_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent)
+{
+ return _msg_smil_player_on_slide_event_handler(hSmilHandle, playerEvent);
+}
+
+MSG_BOOL msg_smil_create_smil_player_layout(void *hSmilHandle, void* layout)
+{
+ return _msg_smil_create_smil_player_layout(hSmilHandle, layout);
+}
+
+MSG_BOOL msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
+{
+ return _msg_smil_set_smil_player_layout_size(hSmilHandle, left_top, right_bottom);
+}
+
+MSG_BOOL msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void* callBack, void *userData)
+{
+ return _msg_smil_set_smil_player_help_page_cb(hSmilHandle, callBack, userData);
+}
+
+SMIL_SLIDE_INFO_S *msg_smil_get_current_slide_info(void *hSmilHandle)
+{
+ return _msg_smil_get_current_slide_info(hSmilHandle);
+}
+
+MSG_BOOL msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime)
+{
+ return _msg_smil_get_slide_time(hSmilHandle, slideIdx, bExcludeHp, slideTime);
+}
diff --git a/viewer/smil-player/src/msg-smil-player.c b/viewer/smil-player/src/msg-smil-player.c
new file mode 100755
index 0000000..4a09e1a
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-player.c
@@ -0,0 +1,449 @@
+/*
+ * 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-smil-types.h"
+#include "msg-smil-player.h"
+#include "msg-smil-util.h"
+
+/*================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_SMIL_ERROR_E _msg_smil_create_smil_player(msg_struct_t msg_info_t, void *callBack, void *userData, void **instance)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, userData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, instance == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+ SMIL_HANDLER_S *smilPlayerHndle = NULL;
+
+ /*Allocate memory for smilPlayerHandler*/
+ smilPlayerHndle = (SMIL_HANDLER_S *)calloc(1, sizeof(SMIL_HANDLER_S));
+ if (smilPlayerHndle == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ *instance = NULL;
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+
+ /*Create Content Manager Handler*/
+ err = _msg_smil_create_content_mgr(msg_info_t, &smilPlayerHndle->smilContMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_create_content_mgr is failed");
+ if (smilPlayerHndle) {
+ free(smilPlayerHndle);
+ smilPlayerHndle = NULL;
+ }
+ *instance = NULL;
+ return err;
+ }
+
+ /*Create Event Manager Handler*/
+ err = _msg_smil_create_event_mgr(callBack, userData, &smilPlayerHndle->smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_create_event_mgr is failed");
+ _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle);
+ smilPlayerHndle->smilContMgrHndle = NULL;
+
+ if (smilPlayerHndle) {
+ free(smilPlayerHndle);
+ smilPlayerHndle = NULL;
+ }
+ *instance = NULL;
+ return err;
+ }
+ smilPlayerHndle->smilEvntMgrHndle->smilhandle = smilPlayerHndle;
+
+ /*Create & Initialize Reder handle*/
+ err = _msg_smil_create_render(&smilPlayerHndle->smilRenderer);
+ if (err != MSG_SMIL_SUCCESS) {
+ _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle);
+ smilPlayerHndle->smilContMgrHndle = NULL;
+
+ _msg_smil_destroy_event_mgr(smilPlayerHndle->smilEvntMgrHndle);
+ smilPlayerHndle->smilEvntMgrHndle = NULL;
+
+ if (smilPlayerHndle) {
+ free(smilPlayerHndle);
+ smilPlayerHndle = NULL;
+ }
+ *instance = NULL;
+ return err;
+ }
+ _msg_smil_init_render(smilPlayerHndle->smilRenderer);
+ smilPlayerHndle->smilRenderer->msg_info_t = msg_info_t;
+ smilPlayerHndle->smilRenderer->smilhandle = smilPlayerHndle;
+
+ *instance = (void *)smilPlayerHndle;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+void _msg_smil_destroy_smil_player(void *smilhandle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)smilhandle;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilPlayerHndle == NULL);
+
+ _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle);
+ smilPlayerHndle->smilContMgrHndle = NULL;
+
+ _msg_smil_destroy_event_mgr(smilPlayerHndle->smilEvntMgrHndle);
+ smilPlayerHndle->smilEvntMgrHndle = NULL;
+
+ _msg_smil_destroy_render(smilPlayerHndle->smilRenderer);
+ smilPlayerHndle->smilRenderer = NULL;
+
+ free(smilPlayerHndle);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+SMIL_CONTENT_MGR_HANDLE_S *_msg_smil_get_content_mgr(void *hSmilHandle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return smilPlayerHndle->smilContMgrHndle;
+}
+
+
+SMIL_EVENT_MGR_HANDLE_S *_msg_smil_get_event_mgr(void *hSmilHandle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, NULL);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return smilPlayerHndle->smilEvntMgrHndle;
+}
+
+
+SMIL_RENDERER_DATA_S *_msg_smil_get_renderder(void *hSmilHandle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, NULL);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return smilPlayerHndle->smilRenderer;
+}
+
+
+int _msg_smil_get_current_slide_idx(void *hSmilHandle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, MSG_MMS_SLIDE_INVALID);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
+}
+
+
+SMIL_PLAYER_STATUS_E _msg_smil_get_current_slide_status(void *hSmilHandle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return _msg_smil_cont_mgr_get_cur_slide_status(smilPlayerHndle->smilContMgrHndle);
+}
+
+
+SMIL_SLIDE_INFO_S *_msg_smil_get_current_slide_info(void *hSmilHandle)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return _msg_smil_cont_mgr_get_cur_slide(smilPlayerHndle->smilContMgrHndle);
+}
+
+
+MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, playerEvent == PLAYER_EVENT_NONE, MSG_ERR_SMIL_EVENT_NONE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)(*hSmilHandle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilPlayerHndle == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
+ int slideIdx = 0;
+ int mediaType = MMS_SMIL_MEDIA_INVALID;
+ MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+ SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = _msg_smil_event_mgr_get_timer_cb_data(smilPlayerHndle->smilEvntMgrHndle);
+ SMIL_SLIDE_EVENT_PARAM_S *curSlideParam = _msg_smil_event_mgr_get_slide_event_param_data(smilPlayerHndle->smilEvntMgrHndle);
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, slideTimerCbData == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlideParam == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "playerEvent = %d", playerEvent);
+
+ if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) {
+ SMIL_SLIDE_INFO_S *curSlide = _msg_smil_cont_mgr_get_cur_slide(smilPlayerHndle->smilContMgrHndle);
+ if (curSlide->pageInfo) {
+ // if page has audio or video, image and text is not needed to checked.
+ if (curSlide->pageInfo->hasAudio )
+ mediaType = MMS_SMIL_MEDIA_AUDIO;
+ else if (curSlide->pageInfo->hasVideo)
+ mediaType = MMS_SMIL_MEDIA_VIDEO;
+ else if (curSlide->pageInfo->hasImage)
+ mediaType = MMS_SMIL_MEDIA_IMG;
+ else if (curSlide->pageInfo->hasText)
+ mediaType = MMS_SMIL_MEDIA_TEXT;
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaType = %d", mediaType);
+ }
+
+ /* PREV/NEXT EVENT skip condition*/
+ if (playerEvent == PLAYER_EVENT_PREV_SLIDE) {
+ if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) {
+ int current_slide = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
+ int total_page_count = _msg_smil_cont_mgr_get_total_slide_count(smilPlayerHndle->smilContMgrHndle);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current_slide = %d, total_page_count = %d", current_slide, total_page_count);
+
+ /*if first page or multipart.mixed message, then return err*/
+ if (current_slide == 0 || total_page_count == 0) {
+ return MSG_ERR_SMIL_INVALID_SLIDE;
+ }
+ }
+ } else if (playerEvent == PLAYER_EVENT_NEXT_SLIDE) {
+ if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) {
+ MSG_BOOL isLastSlide = curSlideParam->isLastSlide;
+ int total_page_count = _msg_smil_cont_mgr_get_total_slide_count(smilPlayerHndle->smilContMgrHndle);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isLastSlide = %d, total_page_count = %d", isLastSlide, total_page_count);
+
+ /*if last page or multipart.mixed message, then return err*/
+ if (isLastSlide || total_page_count == 0) {
+ return MSG_ERR_SMIL_INVALID_SLIDE;
+ }
+ }
+ }
+
+ switch (playerEvent) {
+ case PLAYER_EVENT_ROTATE_WINDOW:
+ _msg_smil_render_rotate_video_window(smilPlayerHndle->smilRenderer);
+ err = MSG_SMIL_SUCCESS;
+ break;
+ case PLAYER_EVENT_PLAY:
+ _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ if (slideTimerCbData->timerHandle) {
+ err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE");
+ return err;
+ }
+
+ _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
+ }
+
+ _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL);
+ _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY);
+ err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PLAY");
+ return err;
+ }
+ break;
+ case PLAYER_EVENT_PREVIEW_PLAY:
+ _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ if (slideTimerCbData->timerHandle) {
+ err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE");
+ return err;
+ }
+
+ _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
+ }
+
+ _msg_smil_cont_mgr_delete_help_page(smilPlayerHndle->smilRenderer->msg_info_t, smilPlayerHndle->smilContMgrHndle); //delete help page
+ _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL);
+ _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY);
+ err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PREVIEW_PLAY");
+ return err;
+ }
+ break;
+ case PLAYER_EVENT_PAUSE:
+ err = _msg_smil_event_mgr_pause_slide(smilPlayerHndle->smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_pause_slide is failed: PLAYER_EVENT_PAUSE");
+ if (slideTimerCbData->timerHandle == NULL) {
+ int pageIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
+ _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, pageIdx);
+ }
+
+ return err;
+ }
+
+ if (_msg_smil_render_pause(smilPlayerHndle->smilRenderer, mediaType) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_pause is failed: PLAYER_EVENT_PAUSE");
+ int pageIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
+ _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, pageIdx);
+
+ return MSG_ERR_SMIL_PAUSE_SLIDE_RENDER_FAILURE;
+ }
+ break;
+ case PLAYER_EVENT_STOP:
+ /*reset event media info*/
+ _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_last_slide(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+
+ err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_STOP");
+ return err;
+ }
+ _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
+ break;
+ case PLAYER_EVENT_RESUME:
+ err = _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle));
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_resume_slide is failed; PLAYER_EVENT_RESUME");
+ return err;
+ }
+
+ if (_msg_smil_render_resume(smilPlayerHndle->smilRenderer, mediaType) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_resume is failed: PLAYER_EVENT_RESUME");
+ return MSG_ERR_SMIL_RESUME_SLIDE_RENDER_FAILURE;
+ }
+ break;
+ case PLAYER_EVENT_NEXT_SLIDE:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_NEXT_SLIDE");
+ err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_NEXT_SLIDE");
+ return err;
+ }
+ _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
+
+ _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT);
+
+ /*Incrementing the slide index in order to move to the next slide*/
+ slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
+ slideIdx += MSG_MMS_SMIL_SLIDEIDX_INCREMENT;
+ _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
+
+ err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed :PLAYER_EVENT_NEXT_SLIDE");
+ slideIdx -= MSG_MMS_SMIL_SLIDEIDX_INCREMENT;
+ _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
+ return err;
+ }
+ break;
+ case PLAYER_EVENT_PREV_SLIDE:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_PREV_SLIDE");
+ err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PREV_SLIDE");
+ return err;
+ }
+ _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
+
+ _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
+ _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_PREV);
+
+ /*Decrement the Slide Index for fetching the appropriate slide content.*/
+ slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
+ slideIdx -= MSG_MMS_SMIL_SLIDEIDX_DECREMENT;
+ _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
+
+ err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PREV_SLIDE");
+ slideIdx += MSG_MMS_SMIL_SLIDEIDX_DECREMENT;
+ _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
+ return err;
+ }
+ break;
+ case PLAYER_EVENT_DESTROY_SCREEN:
+ _msg_smil_event_mgr_set_render_event(smilPlayerHndle->smilEvntMgrHndle, SMIL_RENDER_EVENT_DESTROY_SCREEN);
+ err = _msg_smil_render_on_slide_render_handler(smilPlayerHndle->smilRenderer, curSlideParam);
+ if (err != MSG_SMIL_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err);
+ break;
+ case PLAYER_EVENT_MUTE:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_MUTE");
+ _msg_smil_render_set_mute(smilPlayerHndle->smilRenderer, TRUE);
+ err = MSG_SMIL_SUCCESS;
+ break;
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "In default");
+ err = MSG_ERR_SMIL_UNKNOWN;
+ break;
+ }
+
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_player_on_slide_event_handler is failed %d", err);
+ return err;
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+
+MSG_BOOL _msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return _msg_smil_render_create_layout(smilPlayerHndle->smilRenderer, (Evas_Object *)layout);
+}
+
+
+MSG_BOOL _msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return _msg_smil_render_set_layout_size(smilPlayerHndle->smilRenderer, left_top, right_bottom);
+}
+
+MSG_BOOL _msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, FALSE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return _msg_smil_render_set_help_page_cb(smilPlayerHndle->smilRenderer, callBack, userData);
+}
+
+MSG_BOOL _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
+ SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+ return _msg_smil_cont_mgr_get_slide_time(smilPlayerHndle->smilContMgrHndle, slideIdx, bExcludeHp, slideTime);
+} \ No newline at end of file
diff --git a/viewer/smil-player/src/msg-smil-render.c b/viewer/smil-player/src/msg-smil-render.c
new file mode 100755
index 0000000..d0e558f
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-render.c
@@ -0,0 +1,681 @@
+/*
+ * 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-smil-render.h"
+#include "msg-smil-player.h"
+#include "msg-smil-content-manager.h"
+#include "msg-smil-util.h"
+#include "msg-ui-image-resource.h"
+#include "msg-ui-viewer-utility.h"
+#include <Elementary.h>
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData);
+/*================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_SMIL_ERROR_E _msg_smil_create_render(SMIL_RENDERER_DATA_S **viewerRenderData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+
+ *viewerRenderData = (SMIL_RENDERER_DATA_S *)calloc(1, sizeof(SMIL_RENDERER_DATA_S));
+ if (*viewerRenderData == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+
+ (*viewerRenderData)->working_path = msg_ui_viewer_util_create_working_dir();
+ if (!(*viewerRenderData)->working_path) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_create_working_dir is failed");
+ return MSG_ERR_SMIL_INVALID_STORAGE;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "*viewerRenderData->working_path= %s", (*viewerRenderData)->working_path);
+
+ return MSG_SMIL_SUCCESS;
+}
+
+
+void _msg_smil_destroy_render(SMIL_RENDERER_DATA_S *viewerRenderData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL);
+
+ if (viewerRenderData->viewer_body_text) {
+ free(viewerRenderData->viewer_body_text);
+ viewerRenderData->viewer_body_text = NULL;
+ }
+
+ if (viewerRenderData->video_image) {
+ evas_object_del(viewerRenderData->video_image);
+ viewerRenderData->video_image = NULL;
+ }
+
+ if (viewerRenderData->attach_list) {
+ evas_object_del(viewerRenderData->attach_list);
+ viewerRenderData->attach_list = NULL;
+ }
+
+ if (viewerRenderData->viewer_bg_rect) {
+ evas_object_del(viewerRenderData->viewer_bg_rect);
+ viewerRenderData->viewer_bg_rect = NULL;
+ }
+
+ if (viewerRenderData->video_update_timer) {
+ ecore_timer_del(viewerRenderData->video_update_timer);
+ viewerRenderData->video_update_timer = NULL;
+ }
+
+ if (viewerRenderData->video_resize_idle) {
+ ecore_idler_del(viewerRenderData->video_resize_idle);
+ viewerRenderData->video_resize_idle = NULL;
+ }
+
+ if (viewerRenderData->video_duration_idle) {
+ ecore_idler_del(viewerRenderData->video_duration_idle);
+ viewerRenderData->video_duration_idle = NULL;
+ }
+
+ if (viewerRenderData->video_eos_idle) {
+ ecore_idler_del(viewerRenderData->video_eos_idle);
+ viewerRenderData->video_eos_idle = NULL;
+ }
+
+ if (viewerRenderData->working_path) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "remove temp path");
+ ecore_file_recursive_rm(viewerRenderData->working_path);
+ g_free(viewerRenderData->working_path);
+ viewerRenderData->working_path = NULL;
+ }
+
+ free(viewerRenderData);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+MSG_BOOL _msg_smil_init_render(SMIL_RENDERER_DATA_S *viewerRenderData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+
+ viewerRenderData->viewer_bg_rect = NULL;
+ viewerRenderData->msg_info_t = NULL;
+ viewerRenderData->viewer_body_text = NULL;
+ viewerRenderData->viewer_content_box = NULL;
+ viewerRenderData->insert_image = NULL;
+ viewerRenderData->viewer_scroller = NULL;
+ viewerRenderData->viewer_body = NULL;
+ viewerRenderData->smilhandle = NULL;
+ viewerRenderData->player_state = MEDIA_PLAYER_STATE_NONE;
+ viewerRenderData->viewer_height = 0;
+ viewerRenderData->viewer_width = 0;
+ viewerRenderData->viewer_landscape_width = 0;
+ viewerRenderData->viewer_landscape_height = 0;
+ viewerRenderData->button_height = 0;
+ viewerRenderData->video_width = 0;
+ viewerRenderData->video_height = 0;
+ viewerRenderData->video_duration = 0;
+ viewerRenderData->video_resize_idle = NULL;
+ viewerRenderData->video_duration_idle = NULL;
+ viewerRenderData->video_eos_idle = NULL;
+ viewerRenderData->bgcolor = 0;
+ viewerRenderData->ismute = FALSE;
+ viewerRenderData->display_drm_consume.consume_handle = NULL;
+ viewerRenderData->play_drm_consume.consume_handle = NULL;
+ viewerRenderData->insert_sound_icon = NULL;
+ viewerRenderData->insert_unsupported_icon = NULL;
+ viewerRenderData->main_window = ug_get_window();
+ viewerRenderData->main_win_rotate = 0;
+ viewerRenderData->video_image = NULL;
+ viewerRenderData->video_image_buffer = NULL;
+ viewerRenderData->is_skip_frame = FALSE;
+
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_render_set_layout_size(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, left_top == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, right_bottom == NULL, FALSE);
+ int x = 0;
+ int y = 0;
+ int w = 0;
+ int play_control_height = 0;
+ int window_width = 0;
+ int window_height = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "left_top (%d, %d)", left_top->x, left_top->y);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "right_bottom (%d, %d)", right_bottom->x, right_bottom->y);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height);
+ edje_object_part_geometry_get(_EDJ(viewerRenderData->layout_main), "viewer.swallow.play.controller", &x, &y, &w, &play_control_height);
+
+ viewerRenderData->viewer_width = window_width;
+ viewerRenderData->viewer_height = (right_bottom->y - left_top->y - play_control_height);
+ viewerRenderData->button_height = (window_height - right_bottom->y);
+
+ viewerRenderData->viewer_landscape_width = window_height;
+ viewerRenderData->viewer_landscape_height = (window_width - (left_top->y + play_control_height + viewerRenderData->button_height));
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_width = %d, viewer_height = %d", viewerRenderData->viewer_width, viewerRenderData->viewer_height);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "landscape viewer_width = %d, landscape viewer_height = %d", viewerRenderData->viewer_landscape_width, viewerRenderData->viewer_landscape_height);
+
+ return TRUE;
+}
+
+
+MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData, Evas_Object *layout)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
+ Evas_Object *eo = NULL;
+ Evas_Object *entry = NULL;
+
+ viewerRenderData->layout_main = layout;
+
+ /*create scroller*/
+ if (!viewerRenderData->viewer_scroller) {
+ eo = elm_scroller_add(layout);
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_scroller_bounce_set(eo, FALSE, TRUE);
+ elm_scroller_policy_set(eo, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+ elm_object_part_content_set(layout, "viewer.body", eo);
+ evas_object_show(eo);
+ viewerRenderData->viewer_scroller = eo;
+ }
+
+ /* create content box */
+ if (!viewerRenderData->viewer_content_box) {
+ viewerRenderData->viewer_content_box = eo = elm_box_add(layout);
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
+ elm_box_homogeneous_set(eo, EINA_FALSE);
+ evas_object_show(eo);
+ }
+
+ elm_object_content_set(viewerRenderData->viewer_scroller, viewerRenderData->viewer_content_box);
+
+ /* create entry */
+ if (!viewerRenderData->viewer_body) {
+ entry = elm_entry_add(layout);
+ elm_entry_entry_set(entry, "");
+ elm_entry_editable_set(entry, 0);
+ elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
+ 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_box_pack_end(viewerRenderData->viewer_content_box, entry);
+ evas_object_show(entry);
+ viewerRenderData->viewer_body = entry;
+ }
+
+ /*bg color rectangular*/
+ if (!viewerRenderData->viewer_bg_rect) {
+ eo = evas_object_rectangle_add(evas_object_evas_get(layout));
+ evas_object_color_set(eo, 255, 0, 0, 255);
+ elm_object_part_content_set(layout, "viewer.body.bg", eo);
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
+ evas_object_show(eo);
+ viewerRenderData->viewer_bg_rect = eo;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+MSG_BOOL _msg_smil_render_set_help_page_cb(SMIL_RENDERER_DATA_S *viewerRenderData, void *callBack, void *userData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, FALSE);
+
+ viewerRenderData->appUserData = userData;
+ viewerRenderData->appSmilHelpPageCb = (pfnSMILHelpPageCb)callBack;
+
+ return TRUE;
+}
+
+MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+
+ switch (eventStatus->renderEvent) {
+ case SMIL_RENDER_EVENT_PAGE_PLAY_START:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAGE_PLAY_START");
+
+ if (viewerRenderData->insert_image) {
+ evas_object_del(viewerRenderData->insert_image);
+ viewerRenderData->insert_image = NULL;
+ }
+
+ if (viewerRenderData->video_image) {
+ evas_object_del(viewerRenderData->video_image);
+ viewerRenderData->video_image = NULL;
+ viewerRenderData->video_image_buffer = NULL;
+ }
+
+ if (viewerRenderData->insert_sound_icon) {
+ evas_object_del(viewerRenderData->insert_sound_icon);
+ viewerRenderData->insert_sound_icon = NULL;
+ }
+
+ if (viewerRenderData->insert_unsupported_icon) {
+ evas_object_del(viewerRenderData->insert_unsupported_icon);
+ viewerRenderData->insert_unsupported_icon = NULL;
+ }
+
+ if (viewerRenderData->attach_list) {
+ evas_object_del(viewerRenderData->attach_list);
+ viewerRenderData->attach_list = NULL;
+ }
+
+ _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+ elm_entry_entry_set(viewerRenderData->viewer_body, "");
+
+ /* disable copy and paste popup */
+ elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+ elm_entry_select_none(viewerRenderData->viewer_body);
+
+ /* set viewer bg color */
+ __msg_smil_render_set_bg_color(viewerRenderData);
+ break;
+
+ case SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START");
+
+ if (viewerRenderData->insert_image) {
+ evas_object_del(viewerRenderData->insert_image);
+ viewerRenderData->insert_image = NULL;
+ }
+
+ if (viewerRenderData->video_image) {
+ evas_object_del(viewerRenderData->video_image);
+ viewerRenderData->video_image = NULL;
+ viewerRenderData->video_image_buffer = NULL;
+ }
+
+ if (viewerRenderData->insert_sound_icon) {
+ evas_object_del(viewerRenderData->insert_sound_icon);
+ viewerRenderData->insert_sound_icon = NULL;
+ }
+
+ if (viewerRenderData->insert_unsupported_icon) {
+ evas_object_del(viewerRenderData->insert_unsupported_icon);
+ viewerRenderData->insert_unsupported_icon = NULL;
+ }
+
+ if (viewerRenderData->attach_list) {
+ evas_object_del(viewerRenderData->attach_list);
+ viewerRenderData->attach_list = NULL;
+ }
+
+ _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+ elm_entry_entry_set(viewerRenderData->viewer_body, "");
+
+ /* disable copy and paste popup */
+ elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+ elm_entry_select_none(viewerRenderData->viewer_body);
+
+ /* set viewer bg color */
+ __msg_smil_render_set_bg_color(viewerRenderData);
+ /*move scroll to top*/
+ elm_scroller_region_show(viewerRenderData->viewer_scroller, 0, 0, 0, 0);
+ break;
+
+ case SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE");
+ _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+ return MSG_SMIL_SUCCESS;
+
+ case SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE");
+ return MSG_SMIL_SUCCESS;
+
+ case SMIL_RENDER_EVENT_DESTROY_SCREEN:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_DESTROY_SCREEN");
+ elm_entry_entry_set(viewerRenderData->viewer_body, "");
+
+ if (viewerRenderData->insert_image) {
+ evas_object_del(viewerRenderData->insert_image);
+ viewerRenderData->insert_image = NULL;
+ }
+
+ if (viewerRenderData->video_image) {
+ evas_object_del(viewerRenderData->video_image);
+ viewerRenderData->video_image = NULL;
+ viewerRenderData->video_image_buffer = NULL;
+ }
+
+ if (viewerRenderData->insert_sound_icon) {
+ evas_object_del(viewerRenderData->insert_sound_icon);
+ viewerRenderData->insert_sound_icon = NULL;
+ }
+
+ if (viewerRenderData->insert_unsupported_icon) {
+ evas_object_del(viewerRenderData->insert_unsupported_icon);
+ viewerRenderData->insert_unsupported_icon = NULL;
+ }
+ return MSG_SMIL_SUCCESS;
+
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "abnormal renderEvent : %d", eventStatus->renderEvent);
+ return MSG_ERR_SMIL_EVENT_NONE;
+ }
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo->commonData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+ int pageCnt = _msg_smil_cont_mgr_get_total_slide_count(smilContMgrHndle);
+ if (pageCnt > 0) { //Multipart related
+ if (_msg_smil_cont_mgr_is_cur_slide_help_page(eventStatus->singleSlideInfo)) {
+ char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, };
+ snprintf(buf_font, sizeof(buf_font), "<font_size=%d color=#6ca8c7>%s",
+ MMS_SMIL_FONT_SIZE_NORMAL,
+ dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
+
+ elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
+
+ _msg_smil_render_show_help_page_attach_list(viewerRenderData);
+
+ } else {
+ if (_msg_smil_render_reload_mms(viewerRenderData, eventStatus) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_reload_mms is failed");
+ return MSG_ERR_SMIL_UI_DISPLAY_FAIURE;
+ }
+ }
+ } else { //Multipart mixed
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "eventStatus->singleSlideInfo->commonData->attachCnt : %d", eventStatus->singleSlideInfo->commonData->attachCnt);
+
+ if (_msg_smil_cont_mgr_is_cur_slide_help_page(eventStatus->singleSlideInfo)) {
+ msg_list_handle_t attachlist_info = NULL;
+ msg_struct_t attach_info = NULL;
+ int nAttachCnt = 0;
+ int mediaType = 0;
+
+ msg_struct_t mmsData_h = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, mmsData_h == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+
+ msg_get_list_handle(mmsData_h, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+ nAttachCnt = msg_list_length(attachlist_info);
+
+ if (nAttachCnt == 1) {
+ attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, 0);
+
+ msg_get_int_value(attach_info, MSG_MMS_ATTACH_MIME_TYPE_INT, &mediaType);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment mediatype : 0x%x", mediaType);
+
+ if (mediaType == MIME_TEXT_TXT || mediaType == MIME_TEXT_PLAIN) {
+ char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+ msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath));
+ _msg_smil_render_show_inserted_text(viewerRenderData, strFilePath);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Attachment is not TEXT type, Display help page");
+
+ char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, };
+ snprintf(buf_font, sizeof(buf_font), "<font_size=%d color=#6ca8c7>%s",
+ MMS_SMIL_FONT_SIZE_NORMAL,
+ dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
+
+ elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
+
+ _msg_smil_render_show_help_page_attach_list(viewerRenderData);
+ }
+ } else { //nAttachCnt > 1
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Attachment count is over than 1, Display help page");
+
+ char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, };
+ snprintf(buf_font, sizeof(buf_font), "<font_size=%d color=#6ca8c7>%s",
+ MMS_SMIL_FONT_SIZE_NORMAL,
+ dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
+
+ elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
+
+ _msg_smil_render_show_help_page_attach_list(viewerRenderData);
+ }
+ } else {
+ elm_entry_entry_set(viewerRenderData->viewer_body, "");
+ }
+ }
+
+ return MSG_SMIL_SUCCESS;
+}
+
+
+MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo->commonData == NULL, FALSE);
+
+ int i = 0;
+ int bgColor;
+ int width;
+ int height;
+ int pageCnt;
+ int mediaCnt;
+ int mediaType;
+
+ MSG_BOOL isTextUsed = FALSE;
+ MSG_BOOL isImageUsed = FALSE;
+ MSG_BOOL isSoundUsed = FALSE;
+ bool widthPercent;
+ bool heightPercent;
+
+ char szFileName[MSG_FILENAME_LEN_MAX] = {0,};
+ char szFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+ char regionId[MAX_SMIL_REGION_ID] = {0,};
+
+ /*Get smil handler*/
+ SMIL_HANDLER_S *smilHandle = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilHandle == NULL, FALSE);
+
+ /*Get contentMgr */
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilHandle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE);
+
+ /*Get Mms body data */
+ msg_struct_t msgMmsBody = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
+
+ msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_WIDTH_INT, &width);
+ msg_get_bool_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_WIDTH_PERCENT_BOOL, &widthPercent);
+ msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_HEIGHT_INT, &height);
+ msg_get_bool_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_HEIGHT_PERCENT_BOOL, &heightPercent);
+ msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ROOT LAYOUT INFO width: %d %s height: %d %s bgColor:0x%x",
+ width,
+ widthPercent ? "%" : "",
+ height,
+ heightPercent ? "%" : "",
+ bgColor);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page : %d/%d",
+ eventStatus->singleSlideInfo->pageIdx + 1, eventStatus->singleSlideInfo->commonData->pageCnt);
+
+ /*Get page list handler of current page of callbackData*/
+ msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ pageCnt = msg_list_length(pagelist_info);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, FALSE, "page length is 0, no pages is current message");
+
+ /*Get page handler */
+ msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, eventStatus->singleSlideInfo->pageIdx);
+
+ /*Get media list handler */
+ msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ mediaCnt = msg_list_length(medialist_info);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d page's media count: %d",
+ eventStatus->singleSlideInfo->pageIdx + 1, mediaCnt);
+
+ for (i = 0 ; i < mediaCnt ; ++i) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "eventStatus->timerDataMedia[%d].actionTypeOnMedia = %d", i, eventStatus->timerDataMedia[i].actionTypeOnMedia);
+ if (eventStatus->timerDataMedia[i].actionTypeOnMedia == MEDIA_EVENT_BEGIN) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MEDIA_EVENT_BEGIN : ");
+ msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(medialist_info, eventStatus->timerDataMedia[i].mediaIdx);
+
+ if (media_info) {
+ bzero(szFileName, sizeof(szFileName));
+ bzero(szFilePath, sizeof(szFilePath));
+
+ _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, szFileName);
+ _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath);
+ _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_REGION_ID_STR, regionId);
+ _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "\n%d media's filename: %s\n%d media's filepath: %s\n%d media's regionId: %s\n%d media's mediatype: 0x%04X",
+ eventStatus->timerDataMedia[i].mediaIdx,
+ szFileName,
+ eventStatus->timerDataMedia[i].mediaIdx,
+ szFilePath,
+ eventStatus->timerDataMedia[i].mediaIdx,
+ regionId,
+ eventStatus->timerDataMedia[i].mediaIdx,
+ mediaType);
+
+ switch (mediaType) {
+ case MMS_SMIL_MEDIA_IMG:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_IMG");
+ if (isImageUsed) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Image media is already added");
+ break;
+ } else
+ isImageUsed = TRUE;
+
+ if (_msg_smil_render_show_inserted_image(viewerRenderData, szFilePath) == FALSE)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_image is failed");
+
+ break;
+ case MMS_SMIL_MEDIA_TEXT:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_TEXT");
+ if (isTextUsed) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Text media is already added");
+ break;
+ } else
+ isTextUsed = TRUE;
+
+ if (_msg_smil_render_show_inserted_text(viewerRenderData, szFilePath) == FALSE)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_text is failed");
+
+ break;
+ case MMS_SMIL_MEDIA_AUDIO:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_AUDIO");
+ if (isSoundUsed) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Sound media is already added");
+ break;
+ } else
+ isSoundUsed = TRUE;
+
+ if (_msg_smil_render_show_inserted_audio(viewerRenderData, szFilePath) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_audio is failed");
+ return FALSE;
+ }
+
+ break;
+ case MMS_SMIL_MEDIA_VIDEO:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_VIDEO");
+ if (isSoundUsed || isImageUsed) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Image or sound media is already added");
+ break;
+ } else {
+ isSoundUsed = TRUE;
+ isImageUsed = TRUE;
+ }
+
+ if (_msg_smil_render_show_inserted_video(viewerRenderData, szFilePath) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_video is failed");
+ return FALSE; /*returning FALSE is required to register timer in case of failed video play*/
+ }
+
+ break;
+ case MMS_SMIL_MEDIA_INVALID: /*unsupported content*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_INVALID");
+ if (_msg_smil_render_show_inserted_image(viewerRenderData, MSG_VIEWER_IMAGE_UNSUPPORT_ICON) == FALSE)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_image is failed");
+
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL);
+
+ /*Get smil handler*/
+ SMIL_HANDLER_S *smilHandle = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilHandle == NULL);
+
+ /*Get contentMgr */
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilHandle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL);
+
+ /*Get Mms body data */
+ msg_struct_t msgMmsBody = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
+ int bgColor = 0;
+
+ msg_list_handle_t page_list_t = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+
+ if (page_list_t)
+ msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
+ else //Mixed msg
+ bgColor = 0xffffff; // set WHITE directly
+
+ SMIL_RGB_UNION rgbUnion;
+
+ memset(&rgbUnion, 0x00, sizeof(SMIL_RGB_UNION));
+ rgbUnion.rgbColor = bgColor;
+
+ memset(&viewerRenderData->bgcolor, 0x00, sizeof(VIEWER_COLORREF));
+ viewerRenderData->bgcolor = bgColor;
+
+ evas_object_color_set(viewerRenderData->viewer_bg_rect, rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue, 255);
+ evas_object_show(viewerRenderData->viewer_bg_rect);
+}
+
+
+MSG_BOOL _msg_smil_render_set_mute(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_BOOL ismute)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+
+ viewerRenderData->ismute = ismute;
+ return TRUE;
+}
+
diff --git a/viewer/smil-player/src/msg-smil-text-render.c b/viewer/smil-player/src/msg-smil-text-render.c
new file mode 100755
index 0000000..1c1895f
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-text-render.c
@@ -0,0 +1,253 @@
+/*
+ * 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-smil-types.h"
+#include "msg-smil-player.h"
+#include "msg-smil-render.h"
+#include "msg-smil-util.h"
+
+#include "msg-ui-common-utility.h"
+#include <Elementary.h>
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static MSG_BOOL __msg_smil_render_get_font_style(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_FONT_SYTLE_S *pfont_style);
+
+/*================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_BOOL _msg_smil_render_show_inserted_text(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "path : (%s)", path);
+ FILE *fp = NULL;
+
+ fp = fopen(path, "r");
+ if (fp) {
+ struct stat stat_buf;
+ if (stat(path, &stat_buf) != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Getting file information Error");
+ fclose(fp);
+ return FALSE;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "FileSize : %d", (int)stat_buf.st_size);
+ if (stat_buf.st_size > 0) {
+ if (viewerRenderData->viewer_body_text) {
+ free(viewerRenderData->viewer_body_text);
+ viewerRenderData->viewer_body_text = NULL;
+ }
+
+ viewerRenderData->viewer_body_text = (void *)calloc(1, (size_t)stat_buf.st_size + 1);
+
+ if (viewerRenderData->viewer_body_text == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ fclose(fp);
+ return FALSE;
+ } else {
+ int result = fread(viewerRenderData->viewer_body_text, sizeof(char), stat_buf.st_size, fp);
+ if (result != stat_buf.st_size) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "fread is failed result : %d", result);
+ }
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_body_text : (%s)", (char *)viewerRenderData->viewer_body_text);
+
+ if (viewerRenderData->viewer_body_text[0] != '\0') {
+ /*get font size, color and style*/
+ SMIL_FONT_SYTLE_S text_style = {0,};
+ if (__msg_smil_render_get_font_style(viewerRenderData, &text_style) == FALSE) {
+ text_style.font_size = MMS_SMIL_FONT_SIZE_NORMAL;
+ snprintf(text_style.font_color, sizeof(text_style.font_color), "#%s", "#000000");
+ }
+
+ /* get marked up text */
+ Eina_Strbuf *markup_text = NULL;
+ markup_text = msg_common_get_markup_text((const char *)viewerRenderData->viewer_body_text,text_style.font_size, text_style.font_color, text_style.font_style);
+
+ if (markup_text) {
+ elm_entry_entry_set(viewerRenderData->viewer_body, eina_strbuf_string_get(markup_text));
+ eina_strbuf_free(markup_text);
+ } else {
+ elm_entry_entry_set(viewerRenderData->viewer_body, "");
+ }
+ }
+
+ /*free message text after displaying*/
+ if (viewerRenderData->viewer_body_text) {
+ free(viewerRenderData->viewer_body_text);
+ viewerRenderData->viewer_body_text = NULL;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid file size");
+ }
+
+ fclose(fp);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File Open Error");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+static MSG_BOOL __msg_smil_render_get_font_style(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_FONT_SYTLE_S *pfont_style)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pfont_style == NULL, FALSE);
+ int pageCnt = 0;
+ int mediaCnt = 0;
+ int mediaTotalCnt = 0;
+ int font_size = 0;
+ char szColor[VIEWER_RGB_COLOR_BUF_LEN] = {0x00, };
+ char font_style[VIEWER_FONT_STYLE_BUF_LEN + 1] = {0, };
+ SMIL_RGB_UNION rgbUnion;
+ SMIL_SLIDE_INFO_S *curSlide = NULL;
+ SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle);
+
+ curSlide = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->commonData == NULL, FALSE);
+
+ memset(&rgbUnion, 0x00, sizeof(SMIL_RGB_UNION));
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "curSlide->commonData->pageCnt : %d", curSlide->commonData->pageCnt);
+
+ /*Get contentMgr */
+ SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE);
+
+ /*Get page list handler of current page of callbackData*/
+ msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+ pageCnt = msg_list_length(pagelist_info);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, FALSE);
+
+ /*Get page handler */
+ msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, curSlide->pageIdx);
+
+ /*Get media list handler */
+ msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info);
+ mediaTotalCnt = msg_list_length(medialist_info);
+
+ /*get font size, color and style*/
+ if (curSlide->commonData->pageCnt != 0) { /*multipart.related*/
+ mediaCnt = 0;
+
+ while (mediaCnt < mediaTotalCnt) {
+ msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(medialist_info, mediaCnt);
+ int mediaType = 0;
+ //msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+ _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ if (mediaType == MMS_SMIL_MEDIA_TEXT) {
+ msg_struct_t sText;
+ int fontSize = 0;
+ int fontColor = 0;
+ msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, &sText);
+
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_SIZE_INT, &fontSize);
+
+ if (fontSize == 0)
+ msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_SIZE_INT, MMS_SMIL_FONT_SIZE_NORMAL);
+
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_SIZE_INT, &fontSize);
+ font_size = fontSize;
+
+ msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_COLOR_INT, &fontColor);
+ rgbUnion.rgbColor = fontColor;
+
+ /*change font color when both bgcolor and font color are same(black or white case)*/
+ if ((viewerRenderData->bgcolor == fontColor) &&
+ (viewerRenderData->bgcolor == 0xffffff)) {
+ rgbUnion.rgbColor = 0x000000; /*chagne font color as black*/
+ } else if ((viewerRenderData->bgcolor == fontColor) &&
+ (viewerRenderData->bgcolor == 0x000000)) {
+ rgbUnion.rgbColor = 0xffffff; /*chagne font color as white*/
+ }
+
+ _msg_smil_util_get_color_string(szColor, sizeof(szColor), rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sMedia.sText.nSize = %d", fontSize);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font color : #%s", szColor);
+
+ bool bBold;
+ bool bUnderline;
+ bool bItalic;
+
+ msg_get_bool_value(sText, MSG_MMS_SMIL_TEXT_BOLD_BOOL, &bBold);
+ msg_get_bool_value(sText, MSG_MMS_SMIL_TEXT_UNDERLINE_BOOL, &bUnderline);
+ msg_get_bool_value(sText, MSG_MMS_SMIL_TEXT_ITALIC_BOOL, &bItalic);
+
+ if (bBold) {
+ snprintf(font_style, sizeof(font_style), "hilight");
+ } else if (bUnderline) {
+ snprintf(font_style, sizeof(font_style), "link");
+ } else if (bItalic) {
+ snprintf(font_style, sizeof(font_style), "em");
+ }
+
+ break;
+ }
+
+ mediaCnt++;
+ }
+
+ /*rollback mediaList pointer*/
+ //curSlide->page->mediaList = tmpmedia;
+ } else { /*invalide message without page info or multipart.mixed message*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid message or multipart.related message");
+ font_size = MMS_SMIL_FONT_SIZE_NORMAL;
+
+ if (viewerRenderData->bgcolor == 0xffffff) {
+ rgbUnion.rgbColor = 0x000000; /*set font color as black(0x000000)*/
+ } else {
+ rgbUnion.rgbColor = 0xffffff; /*set font color as white(0xffffff)*/
+ }
+ _msg_smil_util_get_color_string(szColor, sizeof(szColor), rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font color : #%s", szColor);
+ }
+
+ if (font_size == 0)
+ font_size = MMS_SMIL_FONT_SIZE_NORMAL;
+
+ /*get pfont_style*/
+ pfont_style->font_size = font_size;
+ snprintf(pfont_style->font_color, sizeof(pfont_style->font_color), "#%s", szColor);
+
+ if (font_style[0] != '\0')
+ snprintf(pfont_style->font_style, sizeof(pfont_style->font_style), "%s", font_style);
+
+ return TRUE;
+}
+
+MSG_BOOL _msg_smil_render_show_help_page_attach_list(SMIL_RENDERER_DATA_S *viewerRenderData)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_DEBUG, viewerRenderData->viewer_content_box == NULL, FALSE, "Invalid argument: viewer_content_box is NULL");
+
+ if (viewerRenderData->appSmilHelpPageCb) {
+ viewerRenderData->appSmilHelpPageCb(viewerRenderData->appUserData, (void**)&(viewerRenderData->attach_list), viewerRenderData->viewer_content_box);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
diff --git a/viewer/smil-player/src/msg-smil-util.c b/viewer/smil-player/src/msg-smil-util.c
new file mode 100755
index 0000000..d9adbf8
--- /dev/null
+++ b/viewer/smil-player/src/msg-smil-util.c
@@ -0,0 +1,75 @@
+/*
+ * 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-smil-util.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static void __msg_smil_util_get_color_code(int color_dec);
+
+/*================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+char hexa[VIEWER_COLOR_HEXA_BUFFER_LEN];
+char colorMap[VIEWER_HEXA_SIZE] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+static void __msg_smil_util_get_color_code(int color_dec)
+{
+ int col = color_dec;
+ int rem = 0;
+
+ memset(hexa, 0x00, sizeof(hexa));
+ rem = col % VIEWER_HEXA_SIZE;
+ col = col / VIEWER_HEXA_SIZE;
+ hexa[0] = colorMap[col];
+ hexa[1] = colorMap[rem];
+}
+
+
+void _msg_smil_util_get_color_string(char *pszBuffer, int pszBuffer_len, int r, int g, int b)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, pszBuffer == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, pszBuffer_len < VIEWER_RGB_COLOR_BUF_LEN);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "r : %x, g : %x, b : %x", r, g, b);
+ char col_hex[VIEWER_RGB_COLOR_BUF_LEN] = {0x0, };
+
+ __msg_smil_util_get_color_code(r);
+ col_hex[0] = hexa[0];
+ col_hex[1] = hexa[1];
+ __msg_smil_util_get_color_code(g);
+ col_hex[2] = hexa[0];
+ col_hex[3] = hexa[1];
+ __msg_smil_util_get_color_code(b);
+ col_hex[4] = hexa[0];
+ col_hex[5] = hexa[1];
+ col_hex[6] = '\0';
+
+ strncpy(pszBuffer, col_hex, strlen(col_hex));
+}
+
+
+int _msg_smil_util_find_smallest(int num1, int num2)
+{
+ return num1 > num2 ? num2 : num1;
+}
+
+
diff --git a/viewer/src/msg-ui-viewer-callback.c b/viewer/src/msg-ui-viewer-callback.c
new file mode 100755
index 0000000..fdc3363
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-callback.c
@@ -0,0 +1,132 @@
+/*
+ * 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-viewer-main.h"
+#include "msg-ui-common-utility.h"
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+void msg_ui_viewer_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ Evas_Object *base = NULL;
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+
+ base = ug_get_layout(ug);
+ if (!base) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "base is NULL");
+ ug_destroy(ug);
+ return;
+ }
+
+ Evas_Object *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:
+ elm_object_part_content_set(viewer_main_data->layout_main, "content", base);
+ break;
+ default:
+ break;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+void msg_ui_viewer_result_cb(ui_gadget_h ug, service_h service, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+
+Eina_Bool msg_ui_viewer_ug_quit(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+ if (viewer_main_data != NULL) {
+ /*destroy captured image and resource.*/
+ if (viewer_main_data->SmilHandle) {
+ msg_smil_destroy_smil_player(viewer_main_data->SmilHandle);
+ msg_ui_viewer_set_smilhandle(viewer_main_data, NULL);
+
+ if (viewer_main_data->player_view)
+ viewer_main_data->player_view->SmilHandle = NULL;
+ }
+
+ if (viewer_main_data->viewer_ug) {
+ msg_common_reset_font_size("entry");
+ ug_destroy_me(viewer_main_data->viewer_ug);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "viewer_main_data is NULL");
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+void msg_ui_viewer_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+
+ if (viewer_main_data->loaded_ug) {
+ ug_destroy(viewer_main_data->loaded_ug);
+ viewer_main_data->loaded_ug = NULL;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
+ if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+ if (viewer_main_data->player_view) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type);
+ if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_UG_MODE &&
+ (viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT ||
+ viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER ||
+ viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER)) {
+
+ /*update title button text after contact sync */
+ if (viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT)
+ msg_ui_viewer_contact_info_update(viewer_main_data->player_view);
+
+ /*connect handler again*/
+ if (!viewer_main_data->player_view->mouse_down_event_handler)
+ viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view);
+
+ viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
diff --git a/viewer/src/msg-ui-viewer-drm-list.c b/viewer/src/msg-ui-viewer-drm-list.c
new file mode 100755
index 0000000..6172db4
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-drm-list.c
@@ -0,0 +1,505 @@
+/*
+ * 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.h>
+#include <msg_storage.h>
+
+#include "msg-ui-viewer-drm-list.h"
+#include "msg-ui-viewer-drm-utility.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-common-utility.h"
+#include "msg-ui-image-resource.h"
+
+#include <bundle.h>
+#include "aul.h"
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+#define DRM_LIST_DATA_KEY "drm_list_view_data"
+
+static Elm_Genlist_Item_Class gdrm_list_itc;
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static void __drm_list_back_button_cb(void *data, Evas_Object *obj, void *event_info);
+static void __drm_list_play_button_cb(void *data, Evas_Object *obj, void *event_info);
+static char *__drm_list_genlist_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__drm_list_genlist_content_get(void *data, Evas_Object *obj, const char *part);
+static void __drm_list_genlist_del(void *data, Evas_Object *obj);
+static MSG_BOOL __msg_ui_viewer_drm_list_get_message(void *data);
+static Evas_Object *__msg_ui_viewer_drm_list_create_navibar(Evas_Object *parent);
+static void __drm_list_genlist_sel_cb(void *data, Evas_Object *obj, void *event_info);
+static MSG_BOOL __msg_ui_viewer_drm_list_create_view(void *data);
+
+/*==================================================================================================
+* FUNCTION IMPLEMENTATIONS
+*==================================================================================================*/
+void msg_ui_viewer_destroy_drm_list_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+
+ if (drm_list_data->genlist) {
+ evas_object_data_del(drm_list_data->genlist, DRM_LIST_DATA_KEY);
+ evas_object_del(drm_list_data->genlist);
+ drm_list_data->genlist = NULL;
+ }
+
+
+ /*free the list*/
+ int index = 0;
+ if (drm_list_data->drm_list) {
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
+ int ntotal = eina_list_count(drm_list_data->drm_list);
+
+ for (index = 0; index < ntotal; index++) {
+ pmedia_info = eina_list_nth(drm_list_data->drm_list, index);
+ if (pmedia_info) {
+ free(pmedia_info);
+ pmedia_info = NULL;
+ }
+ }
+ eina_list_free(drm_list_data->drm_list);
+ drm_list_data->drm_list = NULL;
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __drm_list_back_button_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, "data is NULL");
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+
+ msg_common_reset_font_size("entry");
+ ug_destroy_me(msg_ui_viewer_get_viewer_ug(drm_list_data->viewer_main));
+ elm_object_disabled_set(obj, TRUE);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __drm_list_play_button_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, "data is NULL");
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+
+ msg_ui_viewer_show_view_by_mode(drm_list_data->viewer_main, MSG_VIEWER_PLAYER_VIEW, MSG_VIEWER_VIEW_CMD_NONE);
+ elm_object_disabled_set(obj, TRUE);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static char *__drm_list_genlist_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)data;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name [%s]", pmedia_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path [%s]", pmedia_info->pfile_path);
+
+ if (strcmp(part, "elm.text") == 0) {
+
+ if (strlen(pmedia_info->pfile_name)) {
+ return strdup(pmedia_info->pfile_name);
+ }
+ }
+ return NULL;
+}
+
+static Evas_Object *__drm_list_genlist_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)data;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name [%s]", pmedia_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path [%s]", pmedia_info->pfile_path);
+
+ if (strcmp(part, "elm.icon") == 0) {
+ Evas_Object *image = elm_icon_add(obj);
+
+ elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL);
+ evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+ return image;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
+ }
+
+ return NULL;
+}
+
+static void __drm_list_genlist_del(void *data, Evas_Object *obj)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+MSG_BOOL msg_ui_viewer_get_invalid_ro_drm_list(msg_struct_t mms_t, Eina_List **drm_list)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, mms_t == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, drm_list == NULL, FALSE);
+
+ msg_list_handle_t pagelist_info = NULL;
+ msg_struct_t page_info = NULL;
+ msg_list_handle_t medialist_info = NULL;
+ msg_struct_t media_info = NULL;
+
+ int nPageCnt = 0;
+ int nmedia_count = 0;
+
+ msg_get_list_handle(mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+
+ nPageCnt = msg_list_length(pagelist_info);
+
+ if (nPageCnt) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart Related");
+ int page_idx = 0;
+ char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
+ char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+
+ for (page_idx = 0; page_idx < nPageCnt; ++page_idx) {
+ page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
+
+ msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+
+ int mediaCnt = msg_list_length(medialist_info);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, mediaCnt);
+
+ int media_idx = 0;
+ for (media_idx = 0; media_idx < mediaCnt; ++media_idx) {
+ int mediaType = 0;
+ int drmType = 0;
+ media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
+
+ if (!media_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is NULL");
+ return FALSE;
+ }
+
+ bzero(strFileName, sizeof(strFileName));
+ bzero(strFilePath, sizeof(strFilePath));
+
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName));
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "media filename = [%s], media filepath = [%s]", strFileName, strFilePath);
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ /*skip the text file*/
+ if (mediaType == MMS_SMIL_MEDIA_TEXT)
+ continue;
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType);
+
+ if (drmType != MSG_DRM_TYPE_NONE) {
+ char szDrmFullPath[MSG_FILEPATH_LEN_MAX] = {0,};
+ bzero(szDrmFullPath, sizeof(szDrmFullPath));
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_DRM_FULLPATH_STR, szDrmFullPath, sizeof(szDrmFullPath));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drmtype: %d drmpath: %s", drmType, szDrmFullPath);
+
+ /*TODO : actually pMedia->szDrm2FullPath should be used to get drm type, if it works correctly*/
+ MSG_UI_DRM_TYPE_E drm_type = msg_ui_viewer_get_drm_type(strFilePath);
+ if (drm_type == MSG_UI_DRM_TYPE_SD) {
+ MSG_UI_DRM_RIGHT_TYPE_E permission_type;
+
+ if (mediaType == MMS_SMIL_MEDIA_IMG)
+ permission_type = MSG_UI_DRM_RIGHT_DISPLAY;
+ else
+ permission_type = MSG_UI_DRM_RIGHT_PLAY;
+
+ if (!msg_ui_viewer_check_drm_ro_valid(strFilePath, permission_type)) {
+ /*append drm list*/
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_MEDIA_INFO_S));
+ if (!pmedia_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return FALSE;
+ }
+
+ if (strlen(strFileName)) {
+ strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
+ } else {
+ const char *file_name = NULL;
+ file_name = ecore_file_file_get(strFilePath);
+ if (file_name)
+ strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
+ else
+ strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
+ }
+ strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
+ pmedia_info->media_type = mediaType;
+
+ *drm_list = eina_list_append(*drm_list, pmedia_info);
+ nmedia_count++;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "valid ro content");
+ }
+ }
+ }
+ }
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Multipart Mixed");
+ return FALSE;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "nmedia_count [%d]", nmedia_count);
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ if (nmedia_count)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static MSG_BOOL __msg_ui_viewer_drm_list_get_message(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE, "data is NULL");
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+
+ if (!drm_list_data->mms_t) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_list_data->mms_t is null");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static Evas_Object *__msg_ui_viewer_drm_list_create_navibar(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 = NULL;
+
+ 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;
+}
+
+static void __drm_list_genlist_sel_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 == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)data;
+ Elm_Object_Item *selected_item = (Elm_Object_Item *)event_info;
+ char szurl[MSG_UI_URL_MAX_LEN + 1] = {0x00};
+ MSG_DRM_LIST_DATA_S *drm_list_data = NULL;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "media_type [%d]", pmedia_info->media_type);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name [%s]", pmedia_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path [%s]", pmedia_info->pfile_path);
+
+ elm_genlist_item_selected_set(selected_item, FALSE);
+ drm_list_data = (MSG_DRM_LIST_DATA_S *)evas_object_data_get(obj, DRM_LIST_DATA_KEY);
+
+ if (msg_ui_viewer_get_drm_url(pmedia_info->pfile_path, szurl, sizeof(szurl)-1)) {
+ if (drm_list_data) {
+ drm_list_data->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER;
+ drm_list_data->selected_item = selected_item;
+ drm_list_data->selected_file_info = pmedia_info;
+ } else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_list_data is NULL");
+
+ /*launch browser to buy ro*/
+ aul_open_content(szurl);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_get_drm_url is failed");
+ }
+
+ return;
+}
+
+static MSG_BOOL __msg_ui_viewer_drm_list_create_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+ Evas_Object *genlist = NULL;
+ Evas_Object *back_button = NULL;
+ Evas_Object *toolbar = NULL;
+ Elm_Object_Item *pitem = NULL;
+ int index = 0;
+ int ntotal_cnt = 0;
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
+ Elm_Object_Item *toolbar_item = NULL;
+
+ /*create genlist*/
+ genlist = elm_genlist_add(drm_list_data->navi_frame);
+ 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);
+ drm_list_data->genlist = genlist;
+
+ /*set drm_list_data*/
+ evas_object_data_set(genlist, DRM_LIST_DATA_KEY, drm_list_data);
+
+ /*set items style*/
+ gdrm_list_itc.item_style = "1text.1icon.2";
+ gdrm_list_itc.func.text_get = __drm_list_genlist_text_get;
+ gdrm_list_itc.func.content_get = __drm_list_genlist_content_get;
+ gdrm_list_itc.func.del = __drm_list_genlist_del;
+
+ /*add items*/
+ if (drm_list_data->drm_list) {
+ ntotal_cnt = eina_list_count(drm_list_data->drm_list);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ntotal_cnt [%d]", ntotal_cnt);
+
+ for (index = 0; index < ntotal_cnt; index++) {
+ pmedia_info = eina_list_nth(drm_list_data->drm_list, index);
+ pitem = elm_genlist_item_append(genlist, &gdrm_list_itc, (void *)pmedia_info, NULL, ELM_GENLIST_ITEM_NONE, __drm_list_genlist_sel_cb, (void *)pmedia_info);
+ pmedia_info = NULL;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no drm content. drm_list_data->drm_list is NULL");
+ }
+
+ /*create controlbar*/
+ toolbar = elm_toolbar_add(drm_list_data->navi_frame);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, toolbar == NULL, FALSE);
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+
+ toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(toolbar_item, EINA_TRUE);
+ toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(toolbar_item, EINA_TRUE);
+ toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(toolbar_item, EINA_TRUE);
+
+ elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_PLAY, NULL, __drm_list_play_button_cb, drm_list_data);
+
+ /*create back button*/
+ back_button = elm_button_add(drm_list_data->navi_frame);
+ elm_object_style_set(back_button, "naviframe/back_btn/default");
+ evas_object_smart_callback_add(back_button, "clicked", __drm_list_back_button_cb, (void *)drm_list_data);
+
+ Elm_Object_Item *navi_it = elm_naviframe_item_push(drm_list_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_DRM_CONTENT"), back_button, NULL, genlist, NULL);
+ elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
+
+ return TRUE;
+}
+
+void msg_ui_viewer_drm_list_init(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+
+ drm_list_data->viewer_main = NULL;
+ drm_list_data->main_window = NULL;
+ drm_list_data->navi_frame = NULL;
+ drm_list_data->genlist = NULL;
+ drm_list_data->msgID = -1;
+ drm_list_data->mms_t= NULL;
+ drm_list_data->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_NONE;
+ drm_list_data->drm_list = NULL;
+}
+
+MSG_BOOL msg_ui_viewer_create_drm_list_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+ Evas_Object *layout = NULL;
+
+ layout = msg_ui_viewer_get_main_layout(drm_list_data->viewer_main);
+ if (layout == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "layout is NULL");
+ return FALSE;
+ } else {
+ /*create Navigation Bar */
+ if (!drm_list_data->navi_frame) {
+ drm_list_data->navi_frame = __msg_ui_viewer_drm_list_create_navibar(layout);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, drm_list_data->navi_frame == NULL, FALSE);
+ msg_ui_viewer_set_navi_frame(drm_list_data->viewer_main, drm_list_data->navi_frame);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "navi_frame is already created");
+ }
+
+ /*get invlaid ro drm list */
+ if (!drm_list_data->drm_list) {
+ /*get the message content*/
+ if (__msg_ui_viewer_drm_list_get_message(drm_list_data) == FALSE) {
+ msg_ui_viewer_destroy_drm_list_view(drm_list_data);
+ return FALSE;
+ }
+
+ if (msg_ui_viewer_get_invalid_ro_drm_list(drm_list_data->mms_t, &drm_list_data->drm_list) == FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "there is no invalid drm list");
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm_list is already created");
+ }
+
+ /*create view layout like list, button and controlbar*/
+ if (__msg_ui_viewer_drm_list_create_view(drm_list_data) == FALSE)
+ return FALSE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+void msg_ui_viewer_drm_list_delete_current_list(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+
+ if (drm_list_data->selected_item) {
+ elm_object_item_del(drm_list_data->selected_item);
+ drm_list_data->selected_item = NULL;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no selected_item");
+ }
+}
+
+MSG_BOOL msg_ui_viewer_drm_list_check_current_ro_valid(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE, "data is NULL");
+ MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
+
+ if (drm_list_data->selected_file_info) {
+ MSG_UI_DRM_RIGHT_TYPE_E permission_type;
+
+ if (drm_list_data->selected_file_info->media_type == MMS_SMIL_MEDIA_IMG)
+ permission_type = MSG_UI_DRM_RIGHT_DISPLAY;
+ else
+ permission_type = MSG_UI_DRM_RIGHT_PLAY;
+
+ if (msg_ui_viewer_check_drm_ro_valid(drm_list_data->selected_file_info->pfile_path, permission_type))
+ return TRUE;
+ else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_viewer_check_drm_ro_valid is failed");
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "selected_file_info is NULL");
+ }
+
+ return FALSE;
+}
diff --git a/viewer/src/msg-ui-viewer-drm-utility.c b/viewer/src/msg-ui-viewer-drm-utility.c
new file mode 100755
index 0000000..0f79a11
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-drm-utility.c
@@ -0,0 +1,392 @@
+/*
+ * 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-viewer-drm-utility.h"
+#include "msg-ui-viewer-utility.h"
+#include <msg-ui-util.h>
+#include <memory.h>
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static drm_permission_type_e __get_permission_type(MSG_UI_DRM_RIGHT_TYPE_E permission_type);
+static MSG_BOOL __get_drm_license_status(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type);
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_BOOL msg_ui_viewer_is_drm_file(const char *filepath)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ drm_bool_type_e is_drm_file = DRM_UNKNOWN;
+ int ret = DRM_RETURN_SUCCESS;
+
+ ret = drm_is_drm_file(filepath, &is_drm_file);
+
+ if (ret == DRM_RETURN_SUCCESS && is_drm_file == DRM_TRUE) {
+ return TRUE;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret);
+ return FALSE;
+ }
+}
+
+static MSG_BOOL __get_drm_license_status(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE);
+
+ int ret = DRM_RETURN_SUCCESS;
+ drm_permission_type_e permission = DRM_PERMISSION_TYPE_ANY;
+ drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;
+
+ permission = __get_permission_type(permission_type);
+
+ ret = drm_get_license_status(filepath, permission, &license_status);
+ if (ret != DRM_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_get_license_status is failed ret = %d", ret);
+ return FALSE;
+ }
+
+ if (license_status != DRM_LICENSE_STATUS_VALID) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "license_status = %d", license_status);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+MSG_UI_DRM_TYPE_E msg_ui_viewer_get_drm_type(const char *filepath)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, MSG_UI_DRM_UNDEFINED);
+ MSG_UI_DRM_TYPE_E drm_type = MSG_UI_DRM_UNDEFINED;
+ drm_file_type_e file_type = DRM_TYPE_UNDEFINED;
+ int ret = DRM_RETURN_SUCCESS;
+
+ ret = drm_get_file_type(filepath, &file_type);
+ if (ret != DRM_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret);
+ return drm_type;
+ }
+
+ if (file_type == DRM_TYPE_OMA_V1) {
+ drm_file_info_s drmInfo;
+ memset(&drmInfo, 0x0, sizeof(drm_file_info_s));
+
+ ret = drm_get_file_info(filepath, &drmInfo);
+ if (ret != DRM_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret);
+ return drm_type;
+ }
+
+ switch (drmInfo.oma_info.method) {
+ case DRM_METHOD_TYPE_FORWARD_LOCK:
+ drm_type = MSG_UI_DRM_TYPE_FL;
+ break;
+ case DRM_METHOD_TYPE_COMBINED_DELIVERY:
+ drm_type = MSG_UI_DRM_TYPE_CD;
+ break;
+ case DRM_METHOD_TYPE_SEPARATE_DELIVERY:
+ drm_type = MSG_UI_DRM_TYPE_SD;
+ break;
+ default:
+ drm_type = MSG_UI_DRM_UNDEFINED;
+ break;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "This is not a DRM_TYPE_OMA_V1 type");
+ }
+
+ return drm_type;
+}
+
+MSG_BOOL msg_ui_viewer_check_drm_ro_valid(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type)
+{
+ return __get_drm_license_status(filepath, permission_type);
+}
+
+MSG_BOOL msg_ui_viewer_get_drm_url(const char *filepath, char *szurl, int szurl_len)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, szurl == NULL, FALSE);
+
+ int ret = DRM_RETURN_SUCCESS;
+ drm_content_info_s content_info;
+ memset(&content_info, 0x0, sizeof(drm_content_info_s));
+
+ ret = drm_get_content_info(filepath, &content_info);
+ if (ret != DRM_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_get_content_info is failed ret = %d", ret);
+ return FALSE;
+ }
+
+ strncpy(szurl, content_info.rights_url, szurl_len);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "szurl = [%s]", szurl);
+
+ return TRUE;
+}
+
+static drm_permission_type_e __get_permission_type(MSG_UI_DRM_RIGHT_TYPE_E permission_type)
+{
+ drm_permission_type_e drm_permission_type = DRM_PERMISSION_TYPE_ANY;
+
+ switch (permission_type) {
+ case MSG_UI_DRM_RIGHT_PLAY:
+ drm_permission_type = DRM_PERMISSION_TYPE_PLAY;
+ break;
+ case MSG_UI_DRM_RIGHT_DISPLAY:
+ drm_permission_type = DRM_PERMISSION_TYPE_DISPLAY;
+ break;
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid drm type");
+ }
+
+ return drm_permission_type;
+}
+
+MSG_BOOL msg_ui_viewer_consume_ro_start(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, MSG_UI_DRM_CONSUME_S *consume_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "permission_type is %d", permission_type);
+
+ drm_permission_type_e permission = DRM_PERMISSION_TYPE_ANY;
+ DRM_DECRYPT_HANDLE pHandle = NULL;
+ int ret = DRM_TRUSTED_RETURN_SUCCESS;
+
+ permission = __get_permission_type(permission_type);
+
+ /* Open Decrypt Session*/
+ drm_trusted_open_decrypt_info_s open_input_data;
+ drm_trusted_open_decrypt_resp_data_s open_output_data;
+
+ strncpy(open_input_data.filePath, filepath, sizeof(open_input_data.filePath)-1);
+ open_input_data.file_type = DRM_TRUSTED_TYPE_OMA_V1;
+ open_input_data.permission = permission;
+
+ ret = drm_trusted_open_decrypt_session(&open_input_data, &open_output_data, &pHandle);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_open_decrypt_session is failed ret = %d", ret);
+ return FALSE;
+ }
+ consume_t->consume_handle = pHandle;
+
+ /*Start the consumption*/
+ drm_trusted_set_consumption_state_info_s state_input_data;
+ state_input_data.state = DRM_CONSUMPTION_STARTED;
+
+ ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_STARTED is failed ret = %d", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+MSG_BOOL msg_ui_viewer_consume_ro_pause(MSG_UI_DRM_CONSUME_S *consume_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t->consume_handle == NULL, FALSE);
+
+ int ret = DRM_TRUSTED_RETURN_SUCCESS;
+
+ /* Pause the consumption*/
+ drm_trusted_set_consumption_state_info_s state_input_data;
+ state_input_data.state = DRM_CONSUMPTION_PAUSED;
+
+ ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_PAUSED is failed ret = %d", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+MSG_BOOL msg_ui_viewer_consume_ro_resume(MSG_UI_DRM_CONSUME_S *consume_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t->consume_handle == NULL, FALSE);
+
+ int ret = DRM_TRUSTED_RETURN_SUCCESS;
+
+ /*Resume the consumption*/
+ drm_trusted_set_consumption_state_info_s state_input_data;
+ state_input_data.state = DRM_CONSUMPTION_RESUMED;
+
+ ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_RESUMED is failed ret = %d", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+MSG_BOOL msg_ui_viewer_consume_ro_stop(MSG_UI_DRM_CONSUME_S *consume_t)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t->consume_handle == NULL, FALSE);
+
+ int ret = DRM_TRUSTED_RETURN_SUCCESS;
+
+ /*stop the consumption*/
+ drm_trusted_set_consumption_state_info_s state_input_data;
+ state_input_data.state = DRM_CONSUMPTION_STOPPED;
+
+ ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_STOPPED is failed ret = %d", ret);
+ return FALSE;
+ }
+
+ /*close the consumption*/
+ ret = drm_trusted_close_decrypt_session(&(consume_t->consume_handle));
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_close_decrypt_session is failed ret = %d", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+unsigned char *msg_ui_viewer_get_buffer_from_drm_file(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, unsigned int *buffer_size)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, buffer_size == NULL, NULL);
+
+ *buffer_size = 0;
+
+ if (!__get_drm_license_status(filepath, permission_type)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__get_drm_license_status is failed");
+ return NULL;
+ }
+
+ unsigned int size = 0;
+ drm_permission_type_e permission = __get_permission_type(permission_type);
+
+ /* Open Decrypt Session*/
+ drm_trusted_open_decrypt_info_s open_input_data;
+ drm_trusted_open_decrypt_resp_data_s open_output_data;
+ DRM_DECRYPT_HANDLE pHandle = NULL;
+ int ret = DRM_TRUSTED_RETURN_SUCCESS;
+ unsigned char *buffer = NULL;
+
+ memset(&open_input_data, 0x0, sizeof(drm_trusted_open_decrypt_info_s));
+ strncpy(open_input_data.filePath, filepath, sizeof(open_input_data.filePath)-1);
+ open_input_data.file_type = DRM_TRUSTED_TYPE_OMA_V1;
+ open_input_data.permission = permission;
+
+ ret = drm_trusted_open_decrypt_session(&open_input_data, &open_output_data, &pHandle);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_open_decrypt_session is failed ret = %d", ret);
+ return NULL;
+ }
+
+ /* Seek Decrypt Session*/
+ drm_trusted_seek_decrypt_info_s seek_input_data;
+ seek_input_data.offset = 0;
+ seek_input_data.seek_mode = DRM_SEEK_END;
+
+ ret = drm_trusted_seek_decrypt_session(pHandle, &seek_input_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_seek_decrypt_session is failed ret = %d", ret);
+ goto drm_error;
+ }
+
+ /* Tell Decrypt Session*/
+ drm_trusted_tell_decrypt_resp_data_s tell_output_data;
+
+ ret = drm_trusted_tell_decrypt_session(pHandle, &tell_output_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_tell_decrypt_session is failed ret = %d", ret);
+ goto drm_error;
+ }
+
+ if (tell_output_data.offset == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm file size is 0");
+ goto drm_error;
+ }
+
+ size = tell_output_data.offset;
+
+ /* Seek Decrypt Session*/
+ seek_input_data.offset = 0;
+ seek_input_data.seek_mode = DRM_SEEK_SET;
+
+ ret = drm_trusted_seek_decrypt_session(pHandle, &seek_input_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_seek_decrypt_session is failed ret = %d", ret);
+ goto drm_error;
+ }
+
+ buffer = (unsigned char *)malloc(size);
+ if (buffer == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "malloc is failed");
+ goto drm_error;
+ }
+
+ /* Read Decrypt Session */
+ drm_trusted_payload_info_s read_input_data = {0,};
+ drm_trusted_read_decrypt_resp_data_s read_output_data = {0, };
+
+ read_input_data.media_offset = 0;
+ read_input_data.payload_data = buffer;
+ read_input_data.payload_data_len = size;
+
+ ret = drm_trusted_read_decrypt_session(pHandle, &read_input_data, &read_output_data);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_read_decrypt_session is failed ret = %d", ret);
+ goto drm_error;
+ }
+
+ if (size != read_output_data.read_size)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "read is not perfect size = %d", size);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "read_size = %d", read_output_data.read_size);
+
+ *buffer_size = (unsigned int)size;
+
+ /* Close Decrypt Session */
+ ret = drm_trusted_close_decrypt_session(&pHandle);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_close_decrypt_session is failed ret = %d", ret);
+
+ return buffer;
+
+drm_error:
+ /* Close Decrypt Session */
+ ret = drm_trusted_close_decrypt_session(&pHandle);
+ if (ret != DRM_TRUSTED_RETURN_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_close_decrypt_session is failed ret = %d", ret);
+
+ if (buffer)
+ free(buffer);
+
+ return NULL;
+}
+
diff --git a/viewer/src/msg-ui-viewer-gadget.c b/viewer/src/msg-ui-viewer-gadget.c
new file mode 100755
index 0000000..623c5d5
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-gadget.c
@@ -0,0 +1,533 @@
+/*
+ * 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 HEADERS
+*==================================================================================================*/
+#include <msg.h>
+#include "msg-smil-player-interface.h"
+#include "msg-ui-common-utility.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-image-resource.h"
+#include <Ecore_X.h>
+#include <glib.h>
+#include <vconf.h>
+#include "msg-ui-common-utility.h"
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv);
+static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv);
+static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv);
+static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv);
+static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv);
+static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv);
+static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv);
+static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv);
+
+static void __msg_ui_viewer_destroy_viewer_ug(void *data);
+static unsigned int __msg_ui_viewer_convert_atoh(const char *string);
+static void __msg_ui_viewer_rotate_play_window(void *data, int rotate);
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+static unsigned int __msg_ui_viewer_convert_atoh(const char *string)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, string == NULL, 0);
+ unsigned int value = 0;
+ unsigned int digit = 0;
+ char c;
+
+ while ((c = *string++) != '\0') {
+ if (c >= '0' && c <= '9')
+ digit = (unsigned int) (c - '0');
+ else if (c >= 'a' && c <= 'f')
+ digit = (unsigned int) (c - 'a') + 10;
+ else if (c >= 'A' && c <= 'F')
+ digit = (unsigned int) (c - 'A') + 10;
+ else
+ break;
+
+ value = (value << 4) + digit;
+ }
+
+ return value;
+}
+
+static void __msg_ui_viewer_rotate_play_window(void *data, int rotate)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
+
+ if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+ if (viewer_main_data->player_view) {
+ MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
+
+ if ((Error = msg_smil_on_slide_event_handler(&(viewer_main_data->SmilHandle), PLAYER_EVENT_ROTATE_WINDOW)) != MSG_SMIL_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "PLAYER_EVENT_ROTATE_WINDOW failed : %d", Error);
+ }
+ }
+}
+
+static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, ug == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, svc_handle == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, priv == NULL, NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+ msg_error_t err = MSG_SUCCESS;
+ msg_handle_t msgHandle = NULL;
+ Evas_Object *layout = NULL;
+
+ /*Set Message Handler*/
+ err = msg_open_msg_handle(&msgHandle);
+
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_open_msg_handle failed, Error = %d", err);
+ ug_destroy_me(ug);
+ return NULL;
+ }
+
+ msg_ui_viewer_main_init(viewer_main_data);
+
+ viewer_main_data->viewer_ug = ug;
+ viewer_main_data->cbs.layout_cb = msg_ui_viewer_layout_cb;
+ viewer_main_data->cbs.result_cb = msg_ui_viewer_result_cb;
+ viewer_main_data->cbs.destroy_cb = msg_ui_viewer_destroy_cb;
+ viewer_main_data->cbs.priv = (void *)viewer_main_data;
+ viewer_main_data->msgHandle = msgHandle;
+ viewer_main_data->main_window = ug_get_window();
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_main_data->main_window == NULL, NULL);
+
+ if (svc_handle) {
+ char *mode_value = NULL;
+ /* get mode value */
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, &mode_value);
+
+ /*preview mode*/
+ if (!g_strcmp0(mode_value, MSG_BUNDLE_VALUE_PREVIEW_MODE)) {
+ unsigned int msg_t_pointer = 0;
+ char *preview_data = NULL;
+
+ viewer_main_data->launchmode = MSG_VIEWER_PREVIEW_MODE;
+
+ /* get data value */
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_PREVIEW_DATA, &preview_data);
+
+ if (preview_data) {
+ /* get subject text for preview msg - mms_t doesn't have subject string */
+ int strlenSubject = 0;
+ char strSubject[MAX_SUBJECT_LEN] = {0};
+ msg_t_pointer = __msg_ui_viewer_convert_atoh((const char*)preview_data);
+ msg_get_str_value((msg_struct_t)msg_t_pointer, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
+
+ /*create new msg info struct */
+ viewer_main_data->msg_t = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ strlenSubject = strlen(strSubject);
+ msg_set_str_value(viewer_main_data->msg_t, MSG_MESSAGE_SUBJECT_STR, strSubject, strlenSubject);
+
+ /*create mms_t*/
+ viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS);
+ err = msg_get_mms_struct((msg_struct_t)msg_t_pointer, viewer_main_data->mms_t);
+
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler");
+ return FALSE;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "preview_data is NULL");
+ return NULL;
+ }
+ } else { /*normal view mode*/
+ char *msgid = NULL;
+ service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
+ if (msgid) {
+ viewer_main_data->msgID = (int)atoi(msgid);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
+ }
+ else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgID");
+ return NULL;
+ }
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is NULL");
+ return NULL;
+ }
+
+ if (mode == UG_MODE_FULLVIEW) {
+ viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW;
+ /*create layout*/
+ Evas_Object *bg = msg_ui_viewer_create_bg(viewer_main_data, viewer_main_data->main_window);
+ layout = msg_ui_viewer_create_layout_main(viewer_main_data->main_window);
+ viewer_main_data->layout_main = layout;
+
+ if (bg)
+ elm_object_part_content_set(layout, "elm.swallow.bg", bg);
+ else
+ return NULL;
+ } else {
+ viewer_main_data->ug_launch_mode = MSG_UG_MODE_FRAMVIEW;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "framview is not supported");
+ return NULL;
+ }
+
+ return layout;
+}
+
+static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+
+ msg_common_apply_font_size("entry", viewer_main_data->layout_main);
+
+ if (msg_ui_viewer_launch(viewer_main_data) == FALSE) {
+ msg_common_reset_font_size("entry");
+ ug_destroy_me(viewer_main_data->viewer_ug);
+ }
+}
+
+static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
+
+ if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+ if (viewer_main_data->player_view) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Player view launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type);
+ /* viewer will be paused */
+ MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
+ msg_ui_viewer_disconnect_handler(viewer_main_data->player_view);
+
+ if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY) {
+ Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (Error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
+ }
+
+ Evas_Object *play_icon = elm_object_part_content_get(viewer_main_data->player_view->play_layout, "viewer.swallow.play.controller");
+ if (play_icon != NULL)
+ edje_object_signal_emit(_EDJ(play_icon), "play", "*");
+ viewer_main_data->player_view->status = MSG_VIEWER_PAUSE;
+ }
+ }
+ }
+}
+
+static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
+
+ msg_common_apply_font_size("entry", viewer_main_data->layout_main);
+
+ if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+ if (viewer_main_data->player_view) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Player view launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type);
+ /*connect handler again*/
+ if (!viewer_main_data->player_view->mouse_down_event_handler)
+ viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view);
+
+ if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_APP_MODE) {
+ /*reset launch_cmd and cmd_type*/
+ viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+ }
+ } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) {
+ if (viewer_main_data->drm_list_view) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm list view drm_list_cmd : %d", viewer_main_data->drm_list_view->drm_list_cmd);
+ if (viewer_main_data->drm_list_view->drm_list_cmd == MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER) {
+ if (msg_ui_viewer_drm_list_check_current_ro_valid(viewer_main_data->drm_list_view))
+ msg_ui_viewer_drm_list_delete_current_list(viewer_main_data->drm_list_view);
+
+ viewer_main_data->drm_list_view->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_NONE;
+ viewer_main_data->drm_list_view->selected_file_info = NULL;
+ }
+ }
+ }
+}
+
+static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+ msg_error_t err;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->SmilHandle : %x", viewer_main_data->SmilHandle);
+
+ if (viewer_main_data->item_list_view) {
+ msg_ui_viewer_destroy_item_list(viewer_main_data->item_list_view);
+ free(viewer_main_data->item_list_view);
+ viewer_main_data->item_list_view = NULL;
+ }
+
+ if (viewer_main_data->player_view) {
+ msg_ui_viewer_destroy_play_view(viewer_main_data->player_view);
+ free(viewer_main_data->player_view);
+ viewer_main_data->player_view = NULL;
+ }
+
+ if (viewer_main_data->drm_list_view) {
+ msg_ui_viewer_destroy_drm_list_view(viewer_main_data->drm_list_view);
+ free(viewer_main_data->drm_list_view);
+ viewer_main_data->drm_list_view = NULL;
+ }
+
+ if (viewer_main_data->bg) {
+ evas_object_del(viewer_main_data->bg);
+ viewer_main_data->bg = NULL;
+ }
+
+ if (viewer_main_data->layout_main) {
+ evas_object_del(viewer_main_data->layout_main);
+ viewer_main_data->layout_main = NULL;
+ }
+
+ /*destroy viewer_main data*/
+ /*free the drm list*/
+ if (viewer_main_data->drm_list) {
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
+ int ntotal = eina_list_count(viewer_main_data->drm_list);
+ int index = 0;
+
+ for (index = 0; index < ntotal; index++) {
+ pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
+ if (pmedia_info) {
+ free(pmedia_info);
+ pmedia_info = NULL;
+ }
+ }
+ eina_list_free(viewer_main_data->drm_list);
+ viewer_main_data->drm_list = NULL;
+ }
+
+ if (viewer_main_data->SmilHandle) {
+ msg_smil_destroy_smil_player(viewer_main_data->SmilHandle);
+ msg_ui_viewer_set_smilhandle(viewer_main_data, NULL);
+ }
+
+ /* release msg info struct handle */
+ if (viewer_main_data->msg_t) {
+ msg_release_struct(&viewer_main_data->msg_t);
+ viewer_main_data->msg_t = NULL;
+ }
+
+ /* release mms struct handle */
+ if (viewer_main_data->mms_t) {
+ msg_release_struct(&viewer_main_data->mms_t);
+ viewer_main_data->mms_t = NULL;
+ }
+
+ if ((err = msg_close_msg_handle(&viewer_main_data->msgHandle)) != MSG_SUCCESS)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_close_msg_handle, err=[%d]", err);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "event : %d", event);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+
+ switch (event) {
+ case UG_EVENT_LOW_MEMORY:
+ break;
+ case UG_EVENT_LOW_BATTERY:
+ {
+ int battey_level = 0;
+ vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW , &battey_level);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "battey_level = %d", battey_level);
+ if (battey_level == VCONFKEY_SYSMAN_BAT_POWER_OFF)
+ __msg_ui_viewer_destroy_viewer_ug(priv);
+
+ break;
+ }
+ case UG_EVENT_LANG_CHANGE:
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT");
+ __msg_ui_viewer_rotate_play_window(viewer_main_data, 0);
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN");
+ __msg_ui_viewer_rotate_play_window(viewer_main_data, 180);
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE");
+ __msg_ui_viewer_rotate_play_window(viewer_main_data, 270);
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN");
+ __msg_ui_viewer_rotate_play_window(viewer_main_data, 90);
+ break;
+ case UG_EVENT_REGION_CHANGE:
+ break;
+ default:
+ break;
+ }
+}
+
+static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+ MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
+ int ispopup = FALSE;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
+
+ switch (event) {
+ case UG_KEY_EVENT_END:
+ if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+ if (viewer_main_data->player_view) {
+ if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY ||
+ viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) {
+ Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP);
+ if (Error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
+ }
+
+ viewer_main_data->player_view->status = MSG_VIEWER_STOP;
+ msg_ui_viewer_update_play_controller(viewer_main_data->player_view, MSG_VIEWER_STOP);
+ }
+ }
+ } else if (viewer_main_data->view_mode == MSG_VIEWER_ITEM_LIST_VIEW) {
+ if (viewer_main_data->item_list_view) {
+ if (viewer_main_data->item_list_view->popup) {
+ elm_popup_timeout_set(viewer_main_data->item_list_view->popup, 0);
+ evas_object_del(viewer_main_data->item_list_view->popup);
+ viewer_main_data->item_list_view->popup = NULL;
+ ispopup = TRUE;
+ }
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Not required case");
+ }
+
+ if (ispopup == FALSE) {
+ if (!viewer_main_data->del_idler)
+ viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data);
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+
+static void __msg_ui_viewer_destroy_viewer_ug(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
+
+ if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+ if (viewer_main_data->player_view) {
+ if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY ||
+ viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) {
+ Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP);
+ if (Error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
+ } else
+ viewer_main_data->player_view->status = MSG_VIEWER_STOP;
+ }
+ }
+ } else if (viewer_main_data->view_mode == MSG_VIEWER_ITEM_LIST_VIEW) {
+ if (viewer_main_data->item_list_view) {
+ if (viewer_main_data->item_list_view->popup) {
+ elm_popup_timeout_set(viewer_main_data->item_list_view->popup, 0);
+ evas_object_del(viewer_main_data->item_list_view->popup);
+ viewer_main_data->item_list_view->popup = NULL;
+ }
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
+ }
+
+ if (!viewer_main_data->del_idler)
+ viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data);
+}
+
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
+
+ if (!ops)
+ return MSG_UI_RET_ERR;
+
+ viewer_main_data = calloc(1, sizeof(MSG_VIEWER_MAIN_DATA_S));
+ if (!viewer_main_data)
+ return MSG_UI_RET_ERR;
+
+ ops->create = __msg_ui_viewer_on_create;
+ ops->start = __msg_ui_viewer_on_start;
+ ops->pause = __msg_ui_viewer_on_pause;
+ ops->resume = __msg_ui_viewer_on_resume;
+ ops->destroy = __msg_ui_viewer_on_destroy;
+ ops->message = __msg_ui_viewer_on_message;
+ ops->event = __msg_ui_viewer_on_event;
+ ops->key_event = __msg_ui_viewer_on_key_event;
+ ops->priv = (void *)viewer_main_data;
+ 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);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
+
+ if (!ops)
+ return;
+
+ viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)ops->priv;
+
+ if (viewer_main_data)
+ free(viewer_main_data);
+}
diff --git a/viewer/src/msg-ui-viewer-item-list.c b/viewer/src/msg-ui-viewer-item-list.c
new file mode 100755
index 0000000..a95b689
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-item-list.c
@@ -0,0 +1,896 @@
+/*
+ * 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.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
+
+#include "msg-ui-viewer-item-list.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-image-resource.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+
+#include "aul.h"
+#include <glib.h>
+#include <Ecore_X.h>
+#include "appsvc.h"
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static void __viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_item_list_popup(void *data, Evas_Object *parent, char *pcontent);
+static void __viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
+
+static MSG_BOOL __msg_ui_viewer_auto_rename(char *src_path, char *dst_path);
+static void __viewer_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+
+static char *__msg_ui_viewer_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_viewer_content_get(void *data, Evas_Object *obj, const char *part);
+static char *__msg_ui_viewer_group_text_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_genlist_item_selected(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_item_selected(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_viewer_create_genlist(void *data);
+static void __msg_ui_viewer_set_list_styles(void *data);
+static void __msg_ui_viewer_item_list_set_list_data(Evas_Object *genlist, void *data);
+static MSG_BOOL __msg_ui_viewer_item_list_get_list_data(void *data);
+static MSG_BOOL __msg_ui_viewer_get_body_message(void *data);
+static void __viewer_toolbar_play_cb(void *data, Evas_Object *obj, void *event_info);
+static void __viewer_toolbar_save_all_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *__msg_ui_viewer_create_toolbar(Evas_Object *parent, void *data);
+
+/*==================================================================================================
+* FUNCTION IMPLEMENTATIONS
+*==================================================================================================*/
+void msg_ui_viewer_init_item_list(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ pitem_list_data->viewer_main = NULL;
+ pitem_list_data->main_window = NULL;
+ pitem_list_data->navi_frame = NULL;
+ pitem_list_data->popup = NULL;
+ pitem_list_data->genlist = NULL;
+ pitem_list_data->msgHandle = NULL;
+ pitem_list_data->msgID = 0;
+ pitem_list_data->mms_t = NULL;
+ pitem_list_data->insert_item_count = 0;
+ pitem_list_data->attach_item_count = 0;
+ pitem_list_data->insert_list = NULL;
+ pitem_list_data->attach_list = NULL;
+ pitem_list_data->group_list[0].index = 0;
+ pitem_list_data->group_list[0].group_label = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_INSERTED_ITEMS");
+ pitem_list_data->group_list[1].index = 1;
+ pitem_list_data->group_list[1].group_label = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_ATTACHED_ITEMS");
+
+ pitem_list_data->group_item_class = NULL;
+ memset(&pitem_list_data->item_class, 0x00, sizeof(Elm_Genlist_Item_Class));
+ memset(&pitem_list_data->title_class, 0x00, sizeof(Elm_Genlist_Item_Class));
+}
+
+void msg_ui_viewer_destroy_item_list(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ if (pitem_list_data->popup) {
+ evas_object_del(pitem_list_data->popup);
+ pitem_list_data->popup = NULL;
+ }
+
+
+ /*free insert list*/
+ if (pitem_list_data->insert_list) {
+ int index = 0;
+ int ntotal = 0;
+ ntotal = eina_list_count(pitem_list_data->insert_list);
+ for (index = 0; index < ntotal; index++) {
+ MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->insert_list, index);
+ if (pmedia_info) {
+ free(pmedia_info);
+ pmedia_info = NULL;
+ }
+ }
+ eina_list_free(pitem_list_data->insert_list);
+ pitem_list_data->insert_list = NULL;
+ }
+
+ /*free attach list*/
+ if (pitem_list_data->attach_list) {
+ int index = 0;
+ int ntotal = 0;
+ ntotal = eina_list_count(pitem_list_data->attach_list);
+ for (index = 0; index < ntotal; index++) {
+ MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->attach_list, index);
+ if (pmedia_info) {
+ free(pmedia_info);
+ pmedia_info = NULL;
+ }
+ }
+ eina_list_free(pitem_list_data->attach_list);
+ pitem_list_data->attach_list = NULL;
+ }
+
+ /* genlist must be destroyed before freeing itc */
+ if (pitem_list_data->genlist) {
+ evas_object_del(pitem_list_data->genlist);
+ pitem_list_data->genlist = NULL;
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __viewer_back_button_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 == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ msg_common_reset_font_size("entry");
+ ug_destroy_me(msg_ui_viewer_get_viewer_ug(pitem_list_data->viewer_main));
+ elm_object_disabled_set(obj, TRUE);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static MSG_BOOL __msg_ui_viewer_auto_rename(char *src_path, char *dst_path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src_path == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dst_path == NULL, FALSE);
+ char file_ext[MSG_VIEWER_FILE_EXT_MAX_LEN + 1] = {0};
+ char file_name_without_ext[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
+ char new_file_name[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
+ MSG_BOOL result = FALSE;
+ int ncount = 0;
+
+ strncpy(file_name_without_ext, dst_path, MSG_VIEWER_FILENAME_MAX_LEN);
+ result = msg_viewer_util_get_file_ext(dst_path, file_ext, MSG_VIEWER_FILE_EXT_MAX_LEN);
+ if (result)
+ file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0';
+
+ ncount = msg_viewer_util_get_next_number(file_name_without_ext);
+ if (ncount < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid filename");
+ return FALSE;
+ } else {
+ /*find new filename*/
+ Eina_Bool is_exists = FALSE;
+ do {
+ if (strlen(file_ext) > 0)
+ snprintf(new_file_name, sizeof(new_file_name), "%s_%d.%s", file_name_without_ext, ncount, file_ext);
+ else
+ snprintf(new_file_name, sizeof(new_file_name), "%s_%d", file_name_without_ext, ncount);
+ /*check for same file*/
+ is_exists = ecore_file_exists(new_file_name);
+ if (is_exists == EINA_TRUE) {
+ memset(new_file_name, 0x00, sizeof(new_file_name));
+ ncount++;
+ } else {
+ break;
+ }
+ } while (is_exists);
+
+ if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void __viewer_popup_block_clicked_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 == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ if (pitem_list_data->popup) {
+ evas_object_del(pitem_list_data->popup);
+ pitem_list_data->popup = NULL;
+ }
+}
+
+static void __viewer_popup_timeout_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 == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ if (pitem_list_data->popup) {
+ evas_object_del(pitem_list_data->popup);
+ pitem_list_data->popup = NULL;
+ }
+}
+
+static void __msg_ui_viewer_item_list_popup(void *data, Evas_Object *parent, char *pcontent)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+ Evas_Object *popup = NULL;
+
+ if (pitem_list_data->popup) {
+ evas_object_del(pitem_list_data->popup);
+ pitem_list_data->popup = NULL;
+ }
+
+ popup = elm_popup_add(parent);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, popup == NULL);
+ pitem_list_data->popup = popup;
+
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ if (pcontent) {
+ elm_object_text_set(popup, pcontent);
+ elm_popup_timeout_set(popup, 2);
+ evas_object_smart_callback_add(popup, "block,clicked", __viewer_popup_block_clicked_cb, pitem_list_data);
+ evas_object_smart_callback_add(popup, "timeout", __viewer_popup_timeout_cb, pitem_list_data);
+ } else {
+ evas_object_del(pitem_list_data->popup);
+ pitem_list_data->popup = NULL;
+ return;
+ }
+
+ evas_object_show(popup);
+}
+
+static void __viewer_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)pmedia_info->item_list_data;
+
+ if (strlen(pmedia_info->pfile_path) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL");
+ __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ return;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pmedia_info->pfile_path);
+ MSG_BOOL result = 0;
+ MSG_BOOL issave = TRUE;
+ char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+ /*get default file path*/
+ result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+ if (result) {
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+ snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pmedia_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
+
+ /*check for same file*/
+ if (ecore_file_exists(dst_path) == EINA_TRUE) {
+ if (__msg_ui_viewer_auto_rename(pmedia_info->pfile_path, dst_path) == FALSE)
+ issave = FALSE;
+ } else {
+ if (ecore_file_cp(pmedia_info->pfile_path, dst_path) == EINA_FALSE)
+ issave = FALSE;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
+ __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ return;
+ }
+
+ if (issave)
+ __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_SAVED"));
+ else
+ __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ }
+}
+
+static char *__msg_ui_viewer_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
+ MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
+
+ if (strcmp(part, "elm.text") == 0) {
+ if (pmedia_info)
+ return strdup(pmedia_info->pfile_name);
+ }
+ return NULL;
+}
+
+static Evas_Object *__msg_ui_viewer_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
+
+ if (strcmp(part, "elm.icon.2") == 0) {
+ Evas_Object *box = elm_box_add(obj);
+ Evas_Object *button = elm_button_add(obj);
+ Evas_Object *icon = elm_icon_add(obj);
+
+ evas_object_propagate_events_set(button, EINA_FALSE);
+ elm_box_pack_start(box, button);
+ elm_icon_file_set(icon, MSG_VIEWER_IMAGE_SAVE_ICON, NULL);
+ elm_object_part_content_set(button, "icon", icon);
+ evas_object_smart_callback_add(button, "clicked", __viewer_save_button_clicked_cb, data);
+ evas_object_show(button);
+ evas_object_show(box);
+ return box;
+ } else if (strcmp(part, "elm.icon.1") == 0) {
+ MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
+ Evas_Object *image = NULL;
+
+ image = elm_icon_add(obj);
+
+ /*set attach file icon*/
+ if (pmedia_info->emedia_type == MSG_MEDIA_IMG ||
+ pmedia_info->emedia_type == MSG_MEDIA_ANIMATE) {
+ elm_icon_file_set(image, pmedia_info->pfile_path, NULL);
+ } else if (pmedia_info->emedia_type == MSG_MEDIA_DRM) {
+ elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL);
+ } else {
+ if (strlen(pmedia_info->pfile_path)) {
+ const char *icon_path = NULL;
+
+ icon_path = msg_common_get_file_icon(pmedia_info->pfile_path);
+ if (icon_path) {
+ elm_icon_file_set(image, icon_path, NULL);
+ } else {
+ D_EMSG("icon_path is NULL");
+ elm_icon_file_set(image, MSG_VIEWER_IMAGE_ATTACH_ICON, NULL);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
+ return NULL;
+ }
+ }
+
+ if (image)
+ evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+ return image;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
+ }
+
+ return NULL;
+}
+
+static char *__msg_ui_viewer_group_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
+ MSG_GROUP_LABEL_S *group_label = (MSG_GROUP_LABEL_S *) data;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", group_label->index);
+
+ if (strcmp(part, "elm.text") == 0) {
+ if (group_label->group_label)
+ return strdup(group_label->group_label);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_viewer_genlist_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
+ Elm_Object_Item *pitem = (Elm_Object_Item *)event_info;
+
+ elm_genlist_item_selected_set(pitem, FALSE);
+ return;
+}
+
+static void __msg_ui_viewer_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
+ MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
+ Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info;
+
+ elm_genlist_item_selected_set(pselected_item, FALSE);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pmedia_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pmedia_info->pfile_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pmedia_info->emedia_type);
+
+ char mimetype[MSG_BUFFER_SIZE_64 + 1] = {0,};
+ char defapp[MSG_BUFFER_SIZE_64 + 1] = {0,};
+
+ service_h svc_handle = NULL;
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
+ service_set_uri(svc_handle, pmedia_info->pfile_path);
+
+ /*get mime type*/
+ if (aul_get_mime_from_file(pmedia_info->pfile_path, mimetype, sizeof(mimetype)) < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mime type failed");
+
+ if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL))
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
+
+ service_destroy(svc_handle);
+ return;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mime type [%s]", mimetype);
+ }
+
+ /*get default app*/
+ if (aul_get_defapp_from_mime(mimetype, defapp, sizeof(defapp)) < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "default app failed");
+
+ if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL))
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
+
+ service_destroy(svc_handle);
+ return;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "default app [%s]", defapp);
+ }
+
+ /*launch application*/
+ if (strcmp(defapp, VIDEO_PLAYER_PKG_NAME) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Video content");
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_LAUNCH_APPLICATION, MESSAGE_PKGNAME);
+ }
+
+ if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL))
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request is failed");
+
+ service_destroy(svc_handle);
+
+ return;
+}
+
+static Evas_Object *__msg_ui_viewer_create_genlist(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+ Evas_Object *genlist = NULL;
+
+ genlist = elm_genlist_add(pitem_list_data->navi_frame);
+ 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;
+}
+
+static void __msg_ui_viewer_set_list_styles(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ pitem_list_data->item_class.item_style = "1text.2icon";
+ pitem_list_data->item_class.func.text_get = __msg_ui_viewer_text_get;
+ pitem_list_data->item_class.func.content_get = __msg_ui_viewer_content_get;
+ pitem_list_data->item_class.func.del = NULL;
+ pitem_list_data->item_class.func.state_get = NULL;
+
+ pitem_list_data->title_class.item_style = "grouptitle.dialogue";
+ pitem_list_data->title_class.func.text_get = __msg_ui_viewer_group_text_get;
+ pitem_list_data->title_class.func.content_get = NULL;
+ pitem_list_data->title_class.func.del = NULL;
+ pitem_list_data->title_class.func.state_get = NULL;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_item_list_set_list_data(Evas_Object *genlist, void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, genlist == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+ int nmedia_count = pitem_list_data->insert_item_count;
+ int attachment_count = pitem_list_data->attach_item_count;
+
+ /*add inserted items*/
+ if (nmedia_count > 0) {
+ int insert_index = 0;
+ pitem_list_data->group_item_class = elm_genlist_item_append(genlist, &pitem_list_data->title_class, (void *)(&pitem_list_data->group_list[0]), NULL, ELM_GENLIST_ITEM_GROUP, __msg_ui_viewer_genlist_item_selected, (void*)ITEM_LIST_INFO_INSERT_FILE);
+ for (insert_index = 0; insert_index < nmedia_count; insert_index++) {
+ MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->insert_list, insert_index);
+ if (pmedia_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL");
+ } else {
+ elm_genlist_item_append(genlist, &pitem_list_data->item_class, (void *)(pmedia_info), pitem_list_data->group_item_class, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_item_selected, (void*)(pmedia_info));
+ }
+ }
+ }
+
+ /*add attached items*/
+ if (attachment_count > 0) {
+ int attach_index = 0;
+ pitem_list_data->group_item_class = elm_genlist_item_append(genlist, &pitem_list_data->title_class, (void *)(&pitem_list_data->group_list[1]), NULL, ELM_GENLIST_ITEM_GROUP, __msg_ui_viewer_genlist_item_selected, (void*)ITEM_LIST_INFO_ATTACH_FILE);
+ for (attach_index = 0; attach_index < attachment_count; attach_index++) {
+ MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->attach_list, attach_index);
+ if (pmedia_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL");
+ } else {
+ elm_genlist_item_append(genlist, &pitem_list_data->item_class, (void *)(pmedia_info), pitem_list_data->group_item_class, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_item_selected, (void*)(pmedia_info));
+ }
+ }
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static MSG_BOOL __msg_ui_viewer_item_list_get_list_data(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+ msg_list_handle_t pagelist_info = NULL;
+ msg_struct_t page_info = NULL;
+ msg_list_handle_t medialist_info = NULL;
+ msg_struct_t media_info = NULL;
+
+ msg_list_handle_t attachlist_info = NULL;
+ msg_struct_t attach_info = NULL;
+
+ int nPageCnt = 0;
+ int nPageMediaCnt = 0;
+ int nAttachmentCnt = 0;
+ int nmedia_count = 0;
+ int attach_count = 0;
+
+ char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
+ char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pitem_list_data->mms_t == NULL, FALSE);
+
+ msg_get_list_handle(pitem_list_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ if (!pagelist_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_list_handle(MSG_MMS_PAGE_LIST_HND) is failed");
+ return FALSE;
+ }
+
+ nPageCnt = msg_list_length(pagelist_info);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageCnt = %d", nPageCnt);
+
+ /*get inserted content list*/
+ if (nPageCnt) {
+ int page_idx = 0;
+
+ for (page_idx = 0; page_idx < nPageCnt; ++page_idx) {
+ page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
+
+ if (!page_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
+ continue;
+ }
+
+ msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+
+ if (!medialist_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "medialist_info is NULL");
+ continue;
+ }
+ nPageMediaCnt = msg_list_length(medialist_info);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, media count = %d", page_idx, nPageMediaCnt);
+
+ int media_idx = 0;
+ for (media_idx = 0; media_idx < nPageMediaCnt; ++media_idx) {
+ int mediaType = 0;
+ int drmType = 0;
+ media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
+
+ if (!media_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is NULL");
+ continue;
+ }
+
+ bzero(strFileName, sizeof(strFileName));
+ bzero(strFilePath, sizeof(strFilePath));
+
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName));
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "filename [%s], filepath [%s]", strFileName, strFilePath);
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ /*skip the text file*/
+ if (mediaType == MMS_SMIL_MEDIA_TEXT)
+ continue;
+
+ MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)calloc(1, sizeof(MSG_MEDIA_INFO_S));
+ if (pmedia_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return FALSE;
+ } else {
+ if (strlen(strFileName)) {
+ strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
+ } else {
+ const char *file_name = NULL;
+ file_name = ecore_file_file_get(strFilePath);
+ if (file_name)
+ strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
+ else
+ strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
+ }
+
+ strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType);
+
+ if (drmType != MSG_DRM_TYPE_NONE) {
+ char szDrmFullPath[MSG_FILEPATH_LEN_MAX] = {0,};
+ bzero(szDrmFullPath, sizeof(szDrmFullPath));
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_DRM_FULLPATH_STR, szDrmFullPath, sizeof(szDrmFullPath));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drmtype: %d (1: Fowward Lock, 2:Combined Delivery, 3: Separated Delivery), drmpath: %s", drmType, szDrmFullPath);
+ pmedia_info->emedia_type = MSG_MEDIA_DRM;
+ } else {
+ if (mediaType == MMS_SMIL_MEDIA_IMG)
+ pmedia_info->emedia_type = MSG_MEDIA_IMG;
+ else if (mediaType == MMS_SMIL_MEDIA_AUDIO)
+ pmedia_info->emedia_type = MSG_MEDIA_AUDIO;
+ else if (mediaType == MMS_SMIL_MEDIA_VIDEO)
+ pmedia_info->emedia_type = MSG_MEDIA_VIDEO;
+ else if (mediaType == MMS_SMIL_MEDIA_TEXT)
+ pmedia_info->emedia_type = MSG_MEDIA_TEXT;
+ else if (mediaType == MMS_SMIL_MEDIA_ANIMATE)
+ pmedia_info->emedia_type = MSG_MEDIA_ANIMATE;
+ else if (mediaType == MMS_SMIL_MEDIA_IMG_OR_VIDEO)
+ pmedia_info->emedia_type = MSG_MEDIA_IMG_OR_VIDEO;
+ else {
+ pmedia_info->emedia_type = MSG_MEDIA_INVALID;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid mediaType : %d", mediaType);
+ }
+ }
+ pmedia_info->item_list_data = pitem_list_data;
+ /*append insert list*/
+ pitem_list_data->insert_list = eina_list_append(pitem_list_data->insert_list, pmedia_info);
+ nmedia_count++;
+ }
+ }
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart Mixed");
+ }
+ pitem_list_data->insert_item_count = nmedia_count;
+
+ /*get attached content list*/
+ int attach_idx = 0;
+ msg_get_list_handle(pitem_list_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+
+ nAttachmentCnt = msg_list_length(attachlist_info);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachmentCnt = %d", nAttachmentCnt);
+
+ for (attach_idx = 0; attach_idx < nAttachmentCnt; ++attach_idx) {
+ attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx);
+
+ if (attach_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL");
+ continue;
+ } else {
+ bzero(strFileName, sizeof(strFileName));
+ bzero(strFilePath, sizeof(strFilePath));
+
+ msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName));
+ msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
+
+ MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)calloc(1, sizeof(MSG_MEDIA_INFO_S));
+ if (pmedia_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return FALSE;
+ } else {
+ if (strlen(strFileName)) {
+ strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
+ } else {
+ const char *file_name = NULL;
+ file_name = ecore_file_file_get(strFilePath);
+ if (file_name)
+ strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
+ else
+ strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
+ }
+
+ strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
+ pmedia_info->emedia_type = MSG_MEDIA_ATTACH;
+ pmedia_info->item_list_data = pitem_list_data;
+ /*append attach list*/
+ pitem_list_data->attach_list = eina_list_append(pitem_list_data->attach_list, pmedia_info);
+ attach_count++;
+ }
+ }
+ }
+ pitem_list_data->attach_item_count = attach_count;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert_count = %d, attach_count = %d", nmedia_count, attach_count);
+
+ return TRUE;
+}
+
+static MSG_BOOL __msg_ui_viewer_get_body_message(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ if (pitem_list_data->mms_t == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pitem_list_data->mms_t is failed");
+ return FALSE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+static void __viewer_toolbar_play_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 == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ msg_ui_viewer_destroy_item_list(pitem_list_data);
+ msg_ui_viewer_show_view_by_mode(pitem_list_data->viewer_main, MSG_VIEWER_PLAYER_VIEW, MSG_VIEWER_VIEW_CMD_PLAY);
+ elm_naviframe_item_pop(pitem_list_data->navi_frame);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __viewer_toolbar_save_all_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 == NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+
+ int insert_cnt = eina_list_count(pitem_list_data->insert_list);
+ int attach_cnt = eina_list_count(pitem_list_data->attach_list);
+ int total_cnt = insert_cnt + attach_cnt;
+ int index = 0;
+ int insert_index = 0;
+ int attach_index = 0;
+ int failed_count = 0;
+ int saved_count = 0;
+ MSG_MEDIA_INFO_S *pmedia_info = NULL;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert_cnt = %d, attach_cnt = %d", insert_cnt, attach_cnt);
+
+ while (index < total_cnt) {
+ if (index < insert_cnt)
+ pmedia_info = eina_list_nth(pitem_list_data->insert_list, insert_index++);
+ else
+ pmedia_info = eina_list_nth(pitem_list_data->attach_list, attach_index++);
+
+ if (pmedia_info) {
+ /*get default file path*/
+ MSG_BOOL result = FALSE;
+ char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+ result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+ if (result) {
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+ snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pmedia_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pmedia_info->pfile_path);
+
+ char *result_path = msg_ui_viewer_util_copy_file(pmedia_info->pfile_path, dst_path);
+ if (result_path) {
+ saved_count++;
+ free(result_path);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
+ failed_count++;
+ }
+ } else {
+ failed_count++;
+ }
+
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
+ failed_count++;
+ }
+
+ pmedia_info = NULL;
+
+ index++;
+ }
+
+ /* show popup */
+ if (failed_count == total_cnt) {
+ __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ } else {
+ char buf[DEF_BUF_LEN_S + 1] = {0, };
+ snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, total_cnt);
+ __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, buf);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static Evas_Object *__msg_ui_viewer_create_toolbar(Evas_Object *parent, void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+ Evas_Object *toolbar = elm_toolbar_add(parent);
+ Elm_Object_Item *toolbar_item = NULL;
+
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+
+ elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_SAVE, NULL, __viewer_toolbar_save_all_cb, pitem_list_data);
+ toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(toolbar_item, EINA_TRUE);
+ elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_PLAY, NULL, __viewer_toolbar_play_cb, pitem_list_data);
+ toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(toolbar_item, EINA_TRUE);
+
+ evas_object_show(toolbar);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return toolbar;
+}
+
+MSG_BOOL msg_ui_viewer_create_item_list_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
+ Evas_Object *back_button = NULL;
+ Evas_Object *toolbar = NULL;
+ Evas_Object *layout_inner = NULL;
+ Evas_Object *genlist = NULL;
+ Evas_Object *bg_layout = NULL;
+
+ /*get message body*/
+ if (__msg_ui_viewer_get_body_message(pitem_list_data) == FALSE)
+ return FALSE;
+
+ /*get inserted and attached item list*/
+ if (__msg_ui_viewer_item_list_get_list_data(pitem_list_data) == FALSE)
+ return FALSE;
+
+ bg_layout = msg_ui_viewer_get_bg_layout(pitem_list_data->viewer_main);
+ if (bg_layout)
+ elm_object_style_set(bg_layout, "group_list");
+
+ layout_inner = elm_layout_add(pitem_list_data->navi_frame);
+ evas_object_size_hint_weight_set(layout_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_layout_file_set(layout_inner, MSG_VIEWER_THEME, "item_list");
+
+ genlist = __msg_ui_viewer_create_genlist(pitem_list_data);
+ __msg_ui_viewer_set_list_styles(pitem_list_data);
+ pitem_list_data->genlist = genlist;
+
+ /*set list data*/
+ __msg_ui_viewer_item_list_set_list_data(genlist, pitem_list_data);
+ elm_object_part_content_set(layout_inner, "viewer.itemlist.body", genlist);
+
+ back_button = elm_button_add(pitem_list_data->navi_frame);
+ elm_object_style_set(back_button, "naviframe/back_btn/default");
+ evas_object_smart_callback_add(back_button, "clicked", __viewer_back_button_cb, (void *)pitem_list_data);
+ Elm_Object_Item *navi_it = elm_naviframe_item_push(pitem_list_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_ITEM_LIST"), back_button, NULL, layout_inner, NULL);
+
+ /*create commandbar*/
+ toolbar = __msg_ui_viewer_create_toolbar(pitem_list_data->navi_frame, pitem_list_data);
+ elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
diff --git a/viewer/src/msg-ui-viewer-main.c b/viewer/src/msg-ui-viewer-main.c
new file mode 100755
index 0000000..d4d9019
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-main.c
@@ -0,0 +1,494 @@
+/*
+ * 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.h>
+#include <msg_storage.h>
+#include "msg-smil-player-interface.h"
+#include "msg-ui-common-utility.h"
+
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-viewer-drm-utility.h"
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static MSG_BOOL __msg_ui_viewer_check_drm_content(void *data);
+static MSG_SMIL_ERROR_E __msg_ui_viewer_main_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data);
+static MSG_BOOL __msg_ui_vewer_get_smil_handle(void *data);
+static void __msg_ui_viewer_launch_item_list(void *data);
+static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data);
+static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data);
+static MSG_BOOL __msg_ui_viewer_show_play_view(void *data);
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+void msg_ui_viewer_main_init(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+ viewer_main_data->main_window = NULL;
+ viewer_main_data->layout_main = NULL;
+ viewer_main_data->bg = NULL;
+ viewer_main_data->msgHandle = NULL;
+ viewer_main_data->msgID = -1;
+ viewer_main_data->launchmode = MSG_VIEWER_FULLVIEW_MODE;
+ viewer_main_data->SmilHandle = NULL;
+ viewer_main_data->msg_t = NULL;
+ viewer_main_data->mms_t = NULL;
+ viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW;
+ viewer_main_data->navi_frame = NULL;
+ viewer_main_data->player_view = NULL;
+ viewer_main_data->drm_list_view = NULL;
+ viewer_main_data->item_list_view = NULL;
+ viewer_main_data->del_idler = NULL;
+}
+
+MSG_BOOL msg_ui_viewer_launch(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_BOOL ret = TRUE;
+
+ if (!__msg_ui_vewer_get_smil_handle(viewer_main_data)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_vewer_get_smil_handle is failed");
+ return FALSE;
+ }
+
+ if (viewer_main_data->launchmode == MSG_VIEWER_FULLVIEW_MODE) {
+ if (__msg_ui_viewer_check_drm_content(viewer_main_data)) {
+ ret = __msg_ui_viewer_launch_drm_list(viewer_main_data);
+ viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW;
+ } else {
+ ret = __msg_ui_viewer_launch_play_view(viewer_main_data);
+ viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
+ }
+ } else {
+ ret = __msg_ui_viewer_launch_play_view(viewer_main_data);
+ viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
+ }
+
+ return ret;
+}
+
+void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode, unsigned int commandType)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewMode = %d", viewMode);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->player_view = 0x%x", viewer_main_data->player_view);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->drm_list_view = 0x%x", viewer_main_data->drm_list_view);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->item_list_view = 0x%x", viewer_main_data->item_list_view);
+
+ if (viewMode == MSG_VIEWER_PLAYER_VIEW) {
+ if (commandType == MSG_VIEWER_VIEW_CMD_PLAY) {
+ if (__msg_ui_viewer_show_play_view(viewer_main_data))
+ viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
+ } else {
+ __msg_ui_viewer_launch_play_view(viewer_main_data);
+ viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
+ }
+ } else if (viewMode == MSG_VIEWER_DRM_LIST_VIEW) {
+ __msg_ui_viewer_launch_drm_list(viewer_main_data);
+ viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW;
+ } else if (viewMode == MSG_VIEWER_ITEM_LIST_VIEW) {
+ __msg_ui_viewer_launch_item_list(viewer_main_data);
+ viewer_main_data->view_mode = MSG_VIEWER_ITEM_LIST_VIEW;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid viewMode!!");
+ }
+}
+
+static void __msg_ui_viewer_launch_item_list(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_ITEM_LIST_DATA_S *pitem_list_data = NULL;
+
+ if (!viewer_main_data->item_list_view) {
+ pitem_list_data = (MSG_ITEM_LIST_DATA_S *)calloc(1, sizeof(MSG_ITEM_LIST_DATA_S));
+ if (!pitem_list_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return;
+ } else
+ viewer_main_data->item_list_view = pitem_list_data;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "item list view is already created");
+ pitem_list_data = viewer_main_data->item_list_view;
+ }
+
+ msg_ui_viewer_init_item_list(pitem_list_data);
+
+ pitem_list_data->msgID = viewer_main_data->msgID;
+ pitem_list_data->msgHandle = viewer_main_data->msgHandle;
+ pitem_list_data->mms_t = viewer_main_data->mms_t;
+ pitem_list_data->main_window = viewer_main_data->main_window;
+ if (viewer_main_data->navi_frame)
+ pitem_list_data->navi_frame = viewer_main_data->navi_frame;
+
+ pitem_list_data->viewer_main = viewer_main_data;
+
+ if (msg_ui_viewer_create_item_list_view(pitem_list_data) == FALSE) {
+ if (viewer_main_data->item_list_view) {
+ msg_ui_viewer_destroy_item_list(viewer_main_data->item_list_view);
+ free(viewer_main_data->item_list_view);
+ viewer_main_data->item_list_view = NULL;
+ }
+ }
+}
+
+static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_DRM_LIST_DATA_S *pdrm_list_data = NULL;
+
+ /*allocate drm_list_view*/
+ if (!viewer_main_data->drm_list_view) {
+ pdrm_list_data = (MSG_DRM_LIST_DATA_S *)calloc(1, sizeof(MSG_DRM_LIST_DATA_S));
+ if (!pdrm_list_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return FALSE;
+ } else
+ viewer_main_data->drm_list_view = pdrm_list_data;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm list view is already created");
+ pdrm_list_data = viewer_main_data->drm_list_view;
+ }
+
+ msg_ui_viewer_drm_list_init(pdrm_list_data);
+ /*set drm list view data from viewer_main_data*/
+ pdrm_list_data->mms_t = viewer_main_data->mms_t;
+ pdrm_list_data->msgID = viewer_main_data->msgID;
+ pdrm_list_data->main_window = viewer_main_data->main_window;
+ if (viewer_main_data->navi_frame)
+ pdrm_list_data->navi_frame = viewer_main_data->navi_frame;
+
+ if (viewer_main_data->drm_list) {
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
+ int ntotal = eina_list_count(viewer_main_data->drm_list);
+ int index = 0;
+
+ /*copy drm list*/
+ for (index = 0; index < ntotal; index++) {
+ pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
+ if (pmedia_info) {
+ MSG_VIEWER_MEDIA_INFO_S *ptmp_media_info = (MSG_VIEWER_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_MEDIA_INFO_S));
+ if (ptmp_media_info) {
+ memcpy(ptmp_media_info, pmedia_info, sizeof(MSG_VIEWER_MEDIA_INFO_S));
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ break;
+ }
+
+ pdrm_list_data->drm_list = eina_list_append(pdrm_list_data->drm_list, ptmp_media_info);
+ }
+ }
+
+ /*free the drm list*/
+ if (viewer_main_data->drm_list) {
+ MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
+ int ntotal = eina_list_count(viewer_main_data->drm_list);
+ int index = 0;
+
+ for (index = 0; index < ntotal; index++) {
+ pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
+ if (pmedia_info) {
+ free(pmedia_info);
+ pmedia_info = NULL;
+ }
+ }
+ eina_list_free(viewer_main_data->drm_list);
+ viewer_main_data->drm_list = NULL;
+ }
+ }
+ pdrm_list_data->viewer_main = viewer_main_data;
+
+ return msg_ui_viewer_create_drm_list_view(pdrm_list_data);
+}
+
+static MSG_BOOL __msg_ui_viewer_show_play_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_PLAY_DATA_S *viewer_play_data = NULL;
+
+ if (!viewer_main_data->player_view) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player view is not created");
+ return FALSE;
+ } else
+ viewer_play_data = viewer_main_data->player_view;
+
+ return msg_ui_viewer_show_player_view(viewer_play_data);
+}
+
+static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_PLAY_DATA_S *viewer_play_data = NULL;
+
+ if (!viewer_main_data->player_view) {
+ viewer_play_data = (MSG_PLAY_DATA_S *)calloc(1, sizeof(MSG_PLAY_DATA_S));
+ if (!viewer_play_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ return FALSE;
+ }
+ viewer_main_data->player_view = viewer_play_data;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play view is already created");
+ viewer_play_data = viewer_main_data->player_view;
+ }
+
+ msg_ui_viewer_play_view_init(viewer_play_data);
+
+ viewer_play_data->msgID = viewer_main_data->msgID;
+ viewer_play_data->msgHandle = viewer_main_data->msgHandle;
+ viewer_play_data->SmilHandle = viewer_main_data->SmilHandle;
+ viewer_play_data->msg_t = viewer_main_data->msg_t;
+ viewer_play_data->mms_t = viewer_main_data->mms_t;
+ viewer_play_data->main_window = viewer_main_data->main_window;
+ if (viewer_main_data->navi_frame)
+ viewer_play_data->navi_frame = viewer_main_data->navi_frame;
+
+ viewer_play_data->cbs = viewer_main_data->cbs;
+ viewer_play_data->viewer_main = viewer_main_data;
+
+ return msg_ui_viewer_create_player_view(viewer_play_data);
+}
+
+static MSG_SMIL_ERROR_E __msg_ui_viewer_main_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ MSG_PLAY_DATA_S *viewer_data = viewer_main_data->player_view;
+
+ return msg_ui_viewer_smil_cb(eventStatus, viewer_data);
+}
+
+static MSG_BOOL __msg_ui_vewer_get_smil_handle(void *data)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ int msg_id = viewer_main_data->msgID;
+ MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ if (viewer_main_data->launchmode == MSG_VIEWER_FULLVIEW_MODE) {
+ msg_error_t err = MSG_SUCCESS;
+ err = msg_get_message(viewer_main_data->msgHandle, msg_id, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message is failed! err = %d", err);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return FALSE;
+ }
+
+ viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS);
+ err = msg_get_mms_struct(msgInfo, viewer_main_data->mms_t);
+
+ if (err != MSG_SUCCESS) {
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return FALSE;
+ }
+ }
+
+ /*Create smilplayer handler*/
+ Error = msg_smil_create_smil_player(viewer_main_data->mms_t, __msg_ui_viewer_main_smil_cb, (void *)viewer_main_data, &(viewer_main_data->SmilHandle));
+ if (Error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_create_smil_player is failed! Error = %d", Error);
+ service_h svc_handle = NULL;
+ service_create(&svc_handle);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL, FALSE);
+
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_VIEWER_MESSAGE, MSG_BUNDLE_VALUE_ERROR);
+ ug_send_result(viewer_main_data->viewer_ug, svc_handle);
+ service_destroy(svc_handle);
+
+ return FALSE;
+ }
+
+ msg_release_struct(&sendOpt);
+ return TRUE;
+}
+
+static MSG_BOOL __msg_ui_viewer_check_drm_content(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ msg_error_t err = MSG_SUCCESS;
+ MSG_BOOL isdrm_content = FALSE;
+
+ /*get the SMIL content*/
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_main_data->msgHandle, viewer_main_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return FALSE;
+ }
+
+ msg_struct_t mms_data = msg_create_struct(MSG_STRUCT_MMS);
+ if (mms_data == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, " msg_mms_get_message_body is failed");
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return FALSE;
+ }
+ msg_get_mms_struct(msgInfo, mms_data);
+
+ /*check invalid sd, ssd type drm file*/
+ if (msg_ui_viewer_get_invalid_ro_drm_list(mms_data, &viewer_main_data->drm_list)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "RO is required");
+ isdrm_content = TRUE;
+ } else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Ro is not required");
+
+ /*destroy and free message data*/
+ msg_release_struct(&mms_data);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ return isdrm_content;
+}
+
+Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ Evas_Object *bg = NULL;
+
+ if (viewer_main_data->bg == NULL) {
+ bg = elm_bg_add(parent);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, bg == NULL, NULL);
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(parent, bg);
+ evas_object_show(bg);
+ viewer_main_data->bg = bg;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "bg is already created");
+ return NULL;
+ }
+
+ return bg;
+}
+
+Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
+ Evas_Object *layout = NULL;
+
+ layout = elm_layout_add(parent);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, NULL);
+ 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);
+
+ return layout;
+}
+
+void msg_ui_viewer_set_loaded_ug(void *data, ui_gadget_h loaded_ug)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, loaded_ug == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ viewer_main_data->loaded_ug = loaded_ug;
+}
+
+void msg_ui_viewer_set_navi_frame(void *data, Evas_Object *navi_frame)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, navi_frame == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ viewer_main_data->navi_frame = navi_frame;
+}
+
+void msg_ui_viewer_set_smilhandle(void *data, void *smilhandle)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+ if (!smilhandle)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smilhandle is set as NULL");
+
+ viewer_main_data->SmilHandle = smilhandle;
+}
+
+MSG_BOOL msg_ui_viewer_get_viewer_launchmode(void *data, MSG_VIEWER_LAUNCH_VIEW_MODE_E *launchmode)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, launchmode == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ *launchmode = viewer_main_data->launchmode;
+
+ return TRUE;
+}
+
+MSG_BOOL msg_ui_viewer_get_viewer_ug_mode(void *data, MSG_UG_LAUNCH_MODE_E *ug_mode)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, ug_mode == NULL, FALSE);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+ *ug_mode = viewer_main_data->ug_launch_mode;
+
+ return TRUE;
+}
+
+ui_gadget_h msg_ui_viewer_get_viewer_ug(void *data)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+ return viewer_main_data->viewer_ug;
+}
+
+Evas_Object *msg_ui_viewer_get_main_layout(void *data)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+ return viewer_main_data->layout_main;
+}
+
+Evas_Object *msg_ui_viewer_get_bg_layout(void *data)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+ return viewer_main_data->bg;
+}
+
diff --git a/viewer/src/msg-ui-viewer-play-view-callback.c b/viewer/src/msg-ui-viewer-play-view-callback.c
new file mode 100755
index 0000000..f65355a
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-play-view-callback.c
@@ -0,0 +1,2267 @@
+/*
+ * 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-viewer-play-view.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+#include "msg-ui-image-resource.h"
+
+#include <aul.h>
+#include <contacts-ug.h>
+#include "contacts-svc.h"
+#include "appsvc.h"
+#include <app_service.h>
+#include <syspopup_caller.h>
+#include <status.h>
+
+/*==================================================================================================
+ * DEFINITIONS
+ *==================================================================================================*/
+Elm_Genlist_Item_Class itc_popup = {0,}; /** itc for list style popup */
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/* genlist for multirecipients in title button */
+static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info);
+
+/*attachment list for help page */
+static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data);
+
+/* controllbar toolbar option */
+static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
+
+/* save attachment popup */
+static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data);
+static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
+ int start_point = 0;
+ int end_point = 0;
+ int screen_width = 0;
+ int rotate = 0;
+
+ play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
+
+ /*get start and end point according to rotation*/
+ rotate = elm_win_rotation_get(viewer_play_data->main_window);
+ if (rotate == 0) { /*PORTRAIT mode*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode");
+ start_point = viewer_play_data->m_x;
+ end_point = ev->x;
+ screen_width = viewer_play_data->window_width;
+ } else if (rotate == 180) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode");
+ start_point = ev->x;
+ end_point = viewer_play_data->m_x;
+ screen_width = viewer_play_data->window_width;
+ } else if (rotate == 90) { /*LANDSCAPE mode*/
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode");
+ start_point = ev->y;
+ end_point = viewer_play_data->m_y;
+ screen_width = viewer_play_data->window_height;
+ } else if (rotate == 270) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode");
+ start_point = viewer_play_data->m_y;
+ end_point = ev->y;
+ screen_width = viewer_play_data->window_height;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
+ return FALSE;
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start_point = %d, end_point = %d, screen_width = %d", start_point, end_point, screen_width);
+
+ if (end_point - start_point > screen_width / 4) {
+ /* prev*/
+ int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
+ if (pageIdx >= 0) {
+ if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ } else {
+ /* hide menu title genlist if player status is changed to play */
+ if (viewer_play_data->title_box_layout) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ }
+ //set progressbar and progress text sync
+ if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+ msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
+ }
+ //show play controller
+ if (viewer_play_data->play_controller) {
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+ evas_object_show(viewer_play_data->play_controller);
+ viewer_play_data->playcontroller_opened = TRUE;
+ //create play controller timer
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+ }
+ }
+ }
+ } else if (start_point - end_point > screen_width / 4) {
+ /*next*/
+ int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
+ int total_page = viewer_play_data->smil_eventStatus->pageCnt;
+ if (total_page >= pageIdx) {
+ if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ } else {
+ /* hide menu title genlist if player status is changed to play */
+ if (viewer_play_data->title_box_layout) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ }
+ //show play controller
+ if (viewer_play_data->play_controller) {
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+ evas_object_show(viewer_play_data->play_controller);
+ viewer_play_data->playcontroller_opened = TRUE;
+ //create play controller timer
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+ }
+ //set progressbar and progress text sync
+ if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+ msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
+ }
+ }
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return EINA_FALSE;
+}
+
+Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
+
+ viewer_play_data->m_x = ev->x;
+ viewer_play_data->m_y = ev->y;
+
+ if (viewer_play_data->mouse_up_event_handler) {
+ ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
+ viewer_play_data->mouse_up_event_handler = NULL;
+ }
+ viewer_play_data->mouse_up_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, msg_ui_viewer_mouse_up_cb, (void *) viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return EINA_FALSE;
+}
+
+void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Evas_Event_Mouse_Down *ev = event_info;
+
+ viewer_play_data->ctrl_start_x = ev->canvas.x;
+ viewer_play_data->ctrl_start_y = ev->canvas.y;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Evas_Event_Mouse_Up *ev = event_info;
+ int start_point_x = 0;
+ int start_point_y = 0;
+ int end_point_x = 0;
+ int end_point_y = 0;
+ int screen_width = 0;
+ int screen_height = 0;
+ int rotate = 0;
+
+ //get screen size
+ rotate = elm_win_rotation_get(viewer_play_data->main_window);
+ if (rotate == 0 || rotate == 180) {
+ screen_width = viewer_play_data->window_width;
+ screen_height = viewer_play_data->window_height;
+ } else if (rotate == 90 || rotate == 270) {
+ screen_width = viewer_play_data->window_height;
+ screen_height = viewer_play_data->window_width;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
+ return;
+ }
+
+ //Check mouse move
+ start_point_x = viewer_play_data->ctrl_start_x;
+ end_point_x = ev->canvas.x;
+
+ start_point_y = viewer_play_data->ctrl_start_y;
+ end_point_y = ev->canvas.y;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start point_x = %d", start_point_x);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start point_y = %d", start_point_y);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "end point_x = %d", end_point_x);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "endpoint_y = %d", end_point_y);
+
+ if (viewer_play_data->playcontroller_opened) {
+ if (abs(start_point_x-end_point_x) < screen_width / 10 &&
+ abs(start_point_y-end_point_y) < screen_height / 10 &&
+ end_point_y < screen_height-(VIEWER_NAVIFRAME_BOTTOM_H+VIEWER_PLAY_CONTROLLER_HEIGHT)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is now displayed and play controller should be hided");
+
+ if (viewer_play_data->playcontroller_opened) {
+ elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
+ evas_object_hide(viewer_play_data->play_controller);
+ viewer_play_data->playcontroller_opened = FALSE;
+ //destroy play controller timer
+ msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
+ } else {
+ if (viewer_play_data->play_controller) {
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+ evas_object_show(viewer_play_data->play_controller);
+ viewer_play_data->playcontroller_opened = TRUE;
+ //create play controller timer
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+ }
+ }
+ }
+ } else {
+ if (abs(start_point_x-end_point_x) < screen_width / 10 && abs(start_point_y-end_point_y) < screen_height / 10 ) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is tapped and play controller should be displayed");
+
+ if (viewer_play_data->play_controller) {
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+ evas_object_show(viewer_play_data->play_controller);
+ viewer_play_data->playcontroller_opened = TRUE;
+ //create play controller timer
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+ }
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->launch_cmd : %d", viewer_play_data->launch_cmd);
+
+ /*prevent invalid double pressing button event after launching ug or app(like call, vtcall)*/
+ if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE)
+ return;
+
+ if (viewer_play_data->title_box_layout) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ }
+
+ if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ }
+
+ viewer_play_data->status = MSG_VIEWER_STOP;
+ msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
+ }
+
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+ if (!viewer_play_data->del_idler)
+ viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main);
+
+ elm_object_disabled_set(obj, TRUE);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_title_button_clicked_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+ if (viewer_play_data->title_optionheader_opened) {
+ elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ viewer_play_data->title_optionheader_opened = EINA_FALSE;
+ } else if (viewer_play_data->title_box_layout) {
+ /* clear title box layout */
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "clear title box layout!");
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ } else {
+ /* clear optionheader */
+ Evas_Object *content = NULL;
+
+ content = elm_object_item_part_content_unset(viewer_play_data->navi_item, "optionheader");
+ if (content) {
+ if (content == viewer_play_data->title_toolbar) {
+ int i = 0;
+ for (i = 0; i < sizeof(viewer_play_data->toolbar_item)/sizeof(Elm_Object_Item *); i++) {
+ if (viewer_play_data->toolbar_item[i] != NULL) {
+ elm_object_item_del(viewer_play_data->toolbar_item[i]);
+ viewer_play_data->toolbar_item[i] = NULL;
+ }
+ }
+ }
+ evas_object_del(content);
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "addr count is : %d", viewer_play_data->addr_list.addr_cnt);
+
+ if (viewer_play_data->addr_list.addr_cnt == 1) {
+ viewer_play_data->title_toolbar = msg_ui_viewer_create_title_toolbar(viewer_play_data);
+ msg_ui_viewer_add_title_toolbar_item(viewer_play_data->title_toolbar, viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->navi_item, "optionheader", viewer_play_data->title_toolbar);
+ elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,open", "");
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,show", "");
+ viewer_play_data->title_optionheader_opened = EINA_TRUE;
+ } else if (viewer_play_data->addr_list.addr_cnt > 1) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,show", "");
+ msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
+ } else {
+ D_EMSG("invalid address count [%d]", viewer_play_data->addr_list.addr_cnt);
+ return;
+ }
+
+ /* set player state to pause and update icon */
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ }
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_save_button_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 == NULL);
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
+
+ //no medias in msg
+ if (viewer_play_data->insert_count + viewer_play_data->attach_count == 0) {
+ msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, (char *)"No attachments");
+ return;
+ }
+
+ viewer_play_data->popup_mode = VIEWER_SAVE_MODE_POPUP;
+
+ //prevent invalid double pressing button event after launching ug or app( call, vtcall)
+ if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
+ return;
+ }
+
+ //destroying popup code is added, because response_cb of saving result popup is sometimes not called
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ viewer_play_data->previous_status = viewer_play_data->status;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
+
+ //Pause
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ }
+ }
+
+ //create popup for save attachments and insert items
+ __msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_delete_button_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ Evas_Object *popup = elm_popup_add(viewer_play_data->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_style_set(btn_ok, "popup_button/default");
+ 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_ui_viewer_delete_ok_clicked_cb, viewer_play_data);
+
+ Evas_Object *btn_cancel = elm_button_add(popup);
+ elm_object_style_set(btn_cancel, "popup_button/default");
+ 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_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
+
+ evas_object_show(popup);
+ viewer_play_data->popup = popup;
+
+ /* set player state to pause*/
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ }
+ }
+
+ /*disconnect mouse handler*/
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_delete_ok_clicked_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 == NULL);
+
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+ char str_id[DEF_BUF_LEN] = {0,};
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID);
+
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_DELETE_MSG, str_id);
+
+ ug_send_result(viewer_main_data->viewer_ug, svc_handle);
+ service_destroy(svc_handle);
+
+ /*destroy viewer*/
+ ug_destroy_me(viewer_main_data->viewer_ug);
+
+ return;
+}
+
+static void __msg_ui_viewer_delete_cancel_clicked_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 == NULL);
+
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ /* connect mouse handler again*/
+ if (!viewer_play_data->mouse_down_event_handler)
+ viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data);
+}
+
+void msg_ui_viewer_forward_button_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ char buf[DEF_BUF_LEN_S] = { 0, };
+ service_h svc_handle;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ /* set player state to pause*/
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ }
+ }
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
+ } else {
+ snprintf(buf, sizeof(buf), "%d", viewer_play_data->msgID);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FORWARD, buf);
+ ui_gadget_h loaded_ug;
+
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+ service_destroy(svc_handle);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_resend_button_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ char str_id[DEF_BUF_LEN] = {0,};
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ /* set player state to pause*/
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ }
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed msg-id is %d", viewer_play_data->msgID);
+
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESEND, str_id);
+
+ ug_send_result(viewer_main_data->viewer_ug, svc_handle);
+ service_destroy(svc_handle);
+
+ /*destroy viewer*/
+ ug_destroy_me(viewer_main_data->viewer_ug);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_reply_button_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ service_h svc_handle;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ /* set player state to pause*/
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ }
+ }
+
+ if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+ D_EMSG("service_create() is failed !!");
+ } else {
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, viewer_play_data->addr_list.addr_info[0].address);
+ ui_gadget_h loaded_ug;
+
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+ service_destroy(svc_handle);
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_more_button_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_SMIL_ERROR_E smilErr = MSG_SMIL_SUCCESS;
+ MSG_BOOL hasText = FALSE;
+ int page_count = 0;
+ int media_count = 0;
+ int folder_id = MSG_MAX_FOLDER_ID;
+ msg_error_t err = MSG_SUCCESS;
+
+ /*Get msg info struct handle */
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ /* set player state to pause*/
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ smilErr = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (smilErr != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", smilErr);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ }
+ }
+ Evas_Object *ctx_popup = NULL;
+ ctx_popup = elm_ctxpopup_add(viewer_play_data->main_window);
+ evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_more_ctxpopup_dismissed_cb, (void *)viewer_play_data);
+
+ /* Get folder ID */
+ msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type
+
+ /* Add FORWARD menu if outbox/inbox msg */
+ if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_INBOX_ID)
+ elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD_A"), NULL, msg_ui_viewer_forward_button_cb, (void *)viewer_play_data);
+
+ /* Add Copy Message text menu */
+ if (viewer_play_data->smil_eventStatus != NULL) {
+ /* get msg body */
+ msg_list_handle_t pagelist_info = NULL;
+ msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ page_count = msg_list_length(pagelist_info);
+
+ msg_struct_t page_info = NULL;
+ page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, viewer_play_data->smil_eventStatus->pageIdx);
+ if (page_info) {
+ int i = 0;
+ msg_list_handle_t medialist_info = NULL;
+ msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+ media_count = msg_list_length(medialist_info);
+
+ for (i = 0; i < media_count; i++) {
+ int mediaType;
+ msg_struct_t media_info = NULL;
+ media_info = (msg_struct_t)msg_list_nth_data(medialist_info, i);
+
+ if (media_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "getting media has failed");
+ continue;
+ }
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+ if (mediaType != MMS_SMIL_MEDIA_TEXT)
+ continue;
+
+ hasText = TRUE;
+ }
+ }
+ }
+
+ if (hasText)
+ elm_ctxpopup_item_append(ctx_popup, (char *)"Copy message text", NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
+
+ /* Add view message details menu */
+ elm_ctxpopup_item_append(ctx_popup, (char *)"View message details", NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
+
+ // move ctx popup
+ Evas_Coord x, y, w, h;
+ evas_object_geometry_get(viewer_play_data->ctrl_toolbar, &x, &y, &w, &h);
+ evas_object_move(ctx_popup, ((w-x)*5)/6 , y);
+ evas_object_show(ctx_popup);
+
+ viewer_play_data->popup = ctx_popup;
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_volume_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ syspopup_launch("volume", NULL);
+
+ //create play controller timer repeatedly
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+}
+
+void msg_ui_viewer_prev_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
+
+ play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
+
+ if (!strcmp(emission, "prev_clicked")) {
+ /* prev*/
+ int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
+ if (pageIdx >= 0) {
+ if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ } else {
+ //set progressbar and progress text sync
+ if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+ msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
+ }
+ }
+ }
+
+ //create play controller timer repeatedly
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+
+ /* hide optionheader if current viewer status has changed to MSG_VIEWER_PLAY */
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ if (viewer_play_data->title_optionheader_opened) {
+ elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ viewer_play_data->title_optionheader_opened = EINA_FALSE;
+ }
+
+ if (viewer_play_data->title_box_layout) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ }
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ msg_ui_viewer_command_play_pause(viewer_play_data);
+
+ //create play controller timer repeatedly
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_next_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (!strcmp(emission, "next_clicked"))
+ {
+ SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
+
+ play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
+
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
+ /*next*/
+ int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
+ int total_page = viewer_play_data->smil_eventStatus->pageCnt;
+ if (total_page >= pageIdx) {
+ if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ } else {
+ //set progressbar and progress text sync
+ if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+ msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
+ }
+ }
+ }
+
+ //create play controller timer repeatedly
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+
+ /* hide optionheader if current viewer status has changed to MSG_VIEWER_PLAY */
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ if (viewer_play_data->title_optionheader_opened) {
+ elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ viewer_play_data->title_optionheader_opened = EINA_FALSE;
+ }
+
+ if (viewer_play_data->title_box_layout) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ }
+ }
+ }
+}
+
+void msg_ui_viewer_stop_button_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+
+ /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/
+ if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
+ return;
+ }
+
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ } else {
+ msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
+
+ if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
+ if (viewer_play_data->play_controller) {
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ msg_ui_viewer_destroy_play_controller_progressbar_timer(viewer_play_data);
+ }
+ } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE){
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ msg_ui_viewer_show_view_by_mode(viewer_play_data->viewer_main, MSG_VIEWER_ITEM_LIST_VIEW, MSG_VIEWER_VIEW_CMD_NONE);
+ if (viewer_play_data->title_optionheader_opened) {
+ elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ viewer_play_data->title_optionheader_opened = EINA_FALSE;
+ } else if (viewer_play_data->title_box_layout) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launchmode : %d", launchmode);
+ }
+
+ viewer_play_data->status = MSG_VIEWER_STOP;
+ msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_toolbar_email_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 || !obj);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+ msg_struct_list_s *addr_list = NULL;
+ msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
+
+ int addr_count = addr_list->nCount; //get address count
+
+ if (addr_count == 1) {
+ ui_gadget_h loaded_ug = NULL;
+ service_h svc_handle = NULL;
+ msg_struct_t addr_info = NULL;
+ char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,};
+ addr_info = addr_list->msg_struct_info[0];
+ msg_set_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, strlen(szAddress));
+
+ char *address = (char*)calloc(1, strlen(szAddress)+1);
+ memcpy(address, szAddress, strlen(szAddress));
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, address);
+
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), EMAIL_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+
+ service_destroy(svc_handle);
+ }
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_toolbar_call_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 || !obj);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+ if (viewer_play_data->addr_list.addr_cnt == 1) {
+ char telnum[255] = {0,};
+ int ret = 0;
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
+ snprintf(telnum, sizeof(telnum), "tel:%s", viewer_play_data->addr_list.addr_info[0].address); /* Number to make a call */
+ service_set_uri(svc_handle, telnum);
+
+ if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request failed ret : %d", ret);
+ } else {
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
+ }
+ service_destroy(svc_handle);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_toolbar_vcall_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 || !obj);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+ if (viewer_play_data->addr_list.addr_cnt == 1) {
+ int ret = 0;
+ bundle *b = bundle_create();
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, viewer_play_data->addr_list.addr_info[0].address);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE);
+ if ((ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b)) >= 0) {
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "aul_launch_app failed ret : %d", ret);
+ }
+ bundle_free(b);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_toolbar_add_to_contact_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 || !obj);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+ if (viewer_play_data->addr_list.addr_cnt == 1) {
+ ui_gadget_h loaded_ug = NULL;
+ char buf[DEF_BUF_LEN_D] = { 0, };
+
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ if (strstr(viewer_play_data->addr_list.addr_info[0].address, "@")) {
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_EMAIL);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_EMAIL, viewer_play_data->addr_list.addr_info[0].address);
+ } else {
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, viewer_play_data->addr_list.addr_info[0].address);
+ }
+
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+
+ service_destroy(svc_handle);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_toolbar_view_contact_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 || !obj);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+ if (viewer_play_data->addr_list.addr_cnt == 1) {
+ ui_gadget_h loaded_ug = NULL;
+ char contactId[DEF_BUF_LEN_S] = { 0, };
+ char buf[DEF_BUF_LEN_D] = { 0, };
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ snprintf(contactId, sizeof(contactId), "%d", viewer_play_data->addr_list.addr_info[0].contact_id);
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL);
+
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_ID, contactId);
+
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+
+ service_destroy(svc_handle);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_open_title_menu_genlist(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
+ int i = 0;
+
+ /* create layout for title menu */
+ Evas_Object *layout = elm_layout_add(viewer_play_data->play_layout);
+ 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);
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.titlebtn.list", layout);
+
+ /* create box (for setting min size of genlist)*/
+ Evas_Object *box = elm_box_add(layout);
+ 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_part_content_set(layout, "elm.swallow.content", box);
+
+ /* create genlist */
+ Evas_Object *genlist = elm_genlist_add(box);
+ 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);
+ elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+ evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
+ evas_object_show(genlist);
+
+ elm_box_pack_end(box, genlist);
+
+ /* set genlist styles */
+ viewer_play_data->itc_title.item_style = "2text.1icon.2";
+ viewer_play_data->itc_title.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
+ viewer_play_data->itc_title.func.content_get = __msg_ui_viewer_title_menu_gl_content_get;
+ viewer_play_data->itc_title.func.state_get = NULL;
+ viewer_play_data->itc_title.func.del = NULL;
+
+ /* genlist list load */
+ for (i = 0; i < viewer_play_data->addr_list.addr_cnt; i++)
+ elm_genlist_item_append(genlist, &(viewer_play_data->itc_title), &(viewer_play_data->addr_list.addr_info[i]), NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_title_menu_gl_sel, viewer_play_data);
+
+ viewer_play_data->title_genlist = genlist;
+ viewer_play_data->title_box_layout = layout;
+
+ /** emit signal for changing state of title menu list to open */
+ elm_object_signal_emit(viewer_play_data->title_box_layout, "elm,state,titlelist,open", "");
+
+ /** Determine genlist size to show - it shows maxmum 3 rows */
+ if (viewer_play_data->addr_list.addr_cnt >= VIEWER_TITLE_MENU_GENLIST_MAX_ITEM)
+ evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM);
+ else
+ evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * viewer_play_data->addr_list.addr_cnt);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_close_title_menu_genlist(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
+
+ elm_object_signal_emit(viewer_play_data->title_box_layout, "elm,state,titlelist,close", "");
+
+ Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.titlebtn.list");
+ if (layout) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout");
+ evas_object_del(layout);
+ }
+
+ viewer_play_data->title_box_layout = NULL;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = evas_object_data_get(obj, "viewer_play_data");
+ MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !viewer_play_data || !addrInfo, NULL);
+
+ if (g_strcmp0(part, "elm.text.1") == 0) {
+ if (addrInfo->contact_id > 0 && addrInfo->name[0] != '\0')
+ return strdup(addrInfo->name);
+ else if (addrInfo->address[0] != '\0')
+ return strdup (addrInfo->address);
+ else
+ return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ } else if (g_strcmp0(part, "elm.text.2") == 0) {
+ if (addrInfo->address[0] != '\0')
+ return strdup(addrInfo->address);
+ else
+ return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return NULL;
+}
+
+
+static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ // Currently, this function do nothing, caller_id concept is not determined
+ // TODO: add callerId
+ return NULL;
+}
+
+static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
+
+ Elm_Object_Item *item = NULL;
+ MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
+
+ item = (Elm_Object_Item *)event_info;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is NULL or Item is not Message item\n");
+
+ addrInfo = (MSG_VIEWER_ADDR_INFO *)elm_object_item_data_get(item);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addrInfo == NULL, "item_data is NULL");
+
+ elm_genlist_item_selected_set(item, 0);
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ Evas_Object *popup = NULL;
+ Evas_Object *list = NULL;
+ Evas_Object *btn_close = NULL;
+
+ popup = elm_popup_add(viewer_play_data->main_window);
+ elm_object_style_set(popup, "min_menustyle");
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ btn_close = elm_button_add(popup);
+ elm_object_style_set(btn_close, "popup_button/default");
+ elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
+ elm_object_part_content_set(popup, "button1", btn_close);
+ evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_title_menu_popup_close_clicked_cb, viewer_play_data);
+
+ list = elm_list_add(popup);
+ elm_list_mode_set(list, ELM_LIST_EXPAND);
+
+ evas_object_data_set(list, "viewer_play_data", viewer_play_data);
+
+ if (msg_common_is_valid_phone_number(addrInfo->address)) {
+ elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
+ elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
+ } else if (msg_common_is_valid_email_addr(addrInfo->address)) {
+ elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
+ } else {
+ D_MSG("invalid_numtype");
+ }
+
+ if (addrInfo->contact_id> 0) {
+ elm_object_part_text_set(popup, "title,text", addrInfo->name);
+ elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
+ } else {
+ elm_object_part_text_set(popup, "title,text", addrInfo->address);
+ elm_list_item_append(list, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
+ }
+
+ elm_list_go(list);
+ elm_object_content_set(popup, list);
+ evas_object_show(popup);
+
+ viewer_play_data->popup = popup;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL");
+ MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
+ addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL");
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
+
+ if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
+ char telnum[255] = {0,};
+ int ret = 0;
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
+ snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address); /* Number to make a call */
+ service_set_uri(svc_handle, telnum);
+ if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service failed ret : %d", ret);
+ } else {
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
+ }
+
+ service_destroy(svc_handle);
+ } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
+ int ret = 0;
+ bundle *b = bundle_create();
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, addrInfo->address);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE);
+ bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE);
+ if ((ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b)) >= 0) {
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "aul_launch_app failed ret : %d", ret);
+ }
+ bundle_free(b);
+ } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
+ ui_gadget_h loaded_ug = NULL;
+ char buf[DEF_BUF_LEN_D] = { 0, };
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ if (strstr(addrInfo->address, "@")) {
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_EMAIL);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_EMAIL, addrInfo->address);
+ } else {
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, addrInfo->address);
+ }
+
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+ service_destroy(svc_handle);
+ } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
+ ui_gadget_h loaded_ug = NULL;
+ char contactId[DEF_BUF_LEN_S] = { 0, };
+ char buf[DEF_BUF_LEN_D] = { 0, };
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ snprintf(contactId, sizeof(contactId), "%d", addrInfo->contact_id);
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL);
+
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
+ service_add_extra_data(svc_handle, CT_UG_BUNDLE_ID, contactId);
+
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+ service_destroy(svc_handle);
+ } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
+ ui_gadget_h loaded_ug = NULL;
+ service_h svc_handle = NULL;
+
+ service_create(&svc_handle);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
+ service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, addrInfo->address);
+
+ viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
+ loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), EMAIL_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+
+ if (loaded_ug) {
+ msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+ } else {
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ }
+ service_destroy(svc_handle);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Elm_Object_Item *gl_item = NULL;
+ Evas_Object *popup = NULL;
+ Evas_Object *genlist = NULL;
+ Evas_Object *btn_save = NULL;
+ Evas_Object *btn_close = NULL;
+ int index = 0;
+ int total_media_count = 0;
+
+ total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+
+ /* create popup */
+ popup = elm_popup_add(viewer_play_data->main_window);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ if (total_media_count > 3 )
+ elm_object_style_set(popup, "menustyle");
+ else
+ elm_object_style_set(popup, "min_menustyle");
+
+ /* set popup title */
+ elm_object_part_text_set(popup, "title,text", (char *)"Attachments");
+
+ /* set select all genlist item style */
+ viewer_play_data->attach_sa_class.item_style = "1text.1icon.2";
+ viewer_play_data->attach_sa_class.func.text_get = __msg_ui_viewer_save_attachments_sa_gl_text_get;
+ viewer_play_data->attach_sa_class.func.content_get = __msg_ui_viewer_save_attachments_sa_gl_content_get;
+ viewer_play_data->attach_sa_class.func.state_get = NULL;
+ viewer_play_data->attach_sa_class.func.del = NULL;
+
+ /* set genlist style */
+ viewer_play_data->attach_item_class.item_style = "1text.2icon.2";
+ viewer_play_data->attach_item_class.func.text_get = __msg_ui_viewer_save_attachments_gl_text_get;
+ viewer_play_data->attach_item_class.func.content_get = __msg_ui_viewer_save_attachments_gl_content_get;
+ viewer_play_data->attach_item_class.func.state_get = NULL;
+ viewer_play_data->attach_item_class.func.del = NULL;
+
+ /* create genlist */
+ genlist = elm_genlist_add(viewer_play_data->main_window);
+ 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);
+ evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
+
+ /* add genlist item based on media count, if item's count is over 1 then 'select all' item should be inserted*/
+ if (total_media_count > 1) {
+ /* add Select all item */
+ gl_item = elm_genlist_item_append(genlist, &viewer_play_data->attach_sa_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_sa_gl_sel, NULL);
+
+ /* add each item (order is inserted + attached) */
+ for (index = 1; index < total_media_count+1; index++) {
+ gl_item = elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL);
+ }
+ } else {
+ /* add each item (order is inserted + attached) */
+ for (index = 0; index < total_media_count; index++) {
+ gl_item = elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL);
+ }
+ }
+
+ /* add save button */
+ btn_save = elm_button_add(popup);
+ elm_object_style_set(btn_save, "popup_button/default");
+ elm_object_text_set(btn_save, dgettext("sys_string", "IDS_COM_SK_SAVE"));
+ elm_object_part_content_set(popup, "button1", btn_save);
+ evas_object_smart_callback_add(btn_save, "clicked", __msg_ui_viewer_save_attachments_popup_save_clicked_cb, viewer_play_data);
+ viewer_play_data->save_button = btn_save;
+ elm_object_disabled_set(viewer_play_data->save_button, EINA_TRUE);
+
+ /* add close button */
+ btn_close = elm_button_add(popup);
+ elm_object_style_set(btn_close, "popup_button/default");
+ elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+ elm_object_part_content_set(popup, "button2", btn_close);
+ evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data);
+
+ /* set popup style */
+ if (total_media_count > 3 ) {
+ /* set genlist part content in popup */
+ elm_object_content_set(popup, genlist);
+ } else {
+ Evas_Object *box = NULL;
+ box = elm_box_add(viewer_play_data->main_window);
+ evas_object_size_hint_min_set(box, VIEWER_ATTACH_POPUP_WIDTH * elm_scale_get(), VIEWER_ATTACH_GL_ITEM_HEIGHT * (viewer_play_data->insert_count + viewer_play_data->attach_count + ((total_media_count > 1) ? 1 : 0)) * elm_scale_get());
+ evas_object_show(genlist);
+ elm_box_pack_end(box, genlist);
+ elm_object_content_set(popup, box);
+ }
+
+ /* show popup */
+ evas_object_show(popup);
+ viewer_play_data->save_attachment_gl= genlist;
+ viewer_play_data->popup = popup;
+
+ /*disconnect mouse handler*/
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ int index = 0;
+ int total_count = 0;
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->save_button);
+ viewer_play_data->save_button = NULL;
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ viewer_play_data->sa_check = NULL;
+ }
+
+ total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+
+ while (index < total_count) {
+ if (index < viewer_play_data->insert_count)
+ media_info = eina_list_nth(viewer_play_data->insert_list, index);
+ else if (index < total_count)
+ media_info = eina_list_nth(viewer_play_data->attach_list, index-viewer_play_data->insert_count);
+ else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", index);
+
+ if (media_info ) // disable check status
+ media_info->isChecked = FALSE;
+
+ index++;
+ }
+
+ viewer_play_data->isSelectAll = FALSE;
+
+ /* connect mouse handler again*/
+ if (!viewer_play_data->mouse_down_event_handler)
+ viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+
+ int attach_count = 0;
+ int insert_count = 0;
+ int total_count = 0;
+ int selected_count = 0;
+
+ int index = 0;
+ int insert_index = 0;
+ int attach_index = 0;
+ int failed_count = 0;
+ int saved_count = 0;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->save_button);
+ viewer_play_data->save_button = NULL;
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ viewer_play_data->sa_check = NULL;
+ }
+
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_Info = NULL;
+
+ insert_count = eina_list_count(viewer_play_data->insert_list);
+ attach_count = eina_list_count(viewer_play_data->attach_list);
+ total_count = insert_count + attach_count;
+
+ while (index < total_count) {
+ if (index < insert_count)
+ media_Info = eina_list_nth(viewer_play_data->insert_list , insert_index++);
+ else if (index < total_count)
+ media_Info = eina_list_nth(viewer_play_data->attach_list , attach_index++);
+
+ if (media_Info) {
+ bool saveCondition = (viewer_play_data->isSelectAll) ? TRUE : (media_Info->isChecked ? TRUE : FALSE);
+
+ if (saveCondition) {
+ selected_count++;
+
+ /*get default file path*/
+ MSG_BOOL result = FALSE;
+ char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+ result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+ if (result) {
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+ snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, media_Info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", media_Info->pfile_path);
+
+ char *result_path = msg_ui_viewer_util_copy_file(media_Info->pfile_path, dst_path);
+ if (result_path) {
+ saved_count++;
+ free(result_path);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
+ failed_count++;
+ }
+ } else {
+ failed_count++;
+ }
+
+ //release check status
+ media_Info->isChecked = FALSE;
+ if (viewer_play_data->isSelectAll)
+ viewer_play_data->isSelectAll = FALSE;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
+ }
+
+ media_Info = NULL;
+
+ index++;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Selected(%d) / Total(%d) [inserted(%d),attached(%d)]", selected_count, total_count, insert_count, attach_count);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Saved(%d), Failed(%d)", saved_count, failed_count);
+
+ /* show indicator status text */
+ if (failed_count == selected_count) {
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ } else {
+ char buf[DEF_BUF_LEN_S + 1] = {0, };
+ snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, selected_count);
+ status_message_post(buf);
+ }
+
+ /* connect mouse handler again*/
+ if (!viewer_play_data->mouse_down_event_handler)
+ viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static char *__msg_ui_viewer_save_attachments_sa_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")) {
+ if (index == 0) {
+ return strdup(dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid index of select all(%d)", index);
+ return NULL;
+ }
+ }
+ return NULL;
+}
+
+static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+ int index = (int)data;
+ Evas_Object *check;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+ check = elm_check_add(obj);
+ elm_check_state_pointer_set(check, &(viewer_play_data->isSelectAll));
+ evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(check, "changed", __msg_ui_viewer_save_attachments_sa_check_changed_cb, viewer_play_data);
+ viewer_play_data->sa_check = check;
+
+ return check;
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ int i = 0;
+ Eina_List * realized_list;
+ Elm_Object_Item *it;
+ Eina_List *l;
+ Eina_Bool checked;
+
+ int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total Count = %d", total_count);
+ checked = elm_check_state_get(obj);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "checked status = %d", checked);
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+
+ for (i = 0; i < total_count; i++) {
+ if (i < viewer_play_data->insert_count) {
+ media_info = eina_list_nth(viewer_play_data->insert_list, i);
+ media_info->isChecked = checked;
+ } else if (i < total_count) {
+ media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+ media_info->isChecked = checked;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+ }
+ }
+
+ // Update realized items only
+ realized_list = elm_genlist_realized_items_get(viewer_play_data->save_attachment_gl);
+ EINA_LIST_FOREACH(realized_list, l, it) {
+ elm_genlist_item_update(it);
+ }
+
+}
+
+static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+ int index = 0;
+ int i = 0;
+ int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
+
+ if (item != NULL) {
+ index = (int)elm_object_item_data_get(item);
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ viewer_play_data->isSelectAll = !viewer_play_data->isSelectAll;
+
+ //check state changed cb will be called
+ elm_check_state_set(viewer_play_data->sa_check, viewer_play_data->isSelectAll);
+ elm_genlist_item_update(item);
+
+ if (total_count > 1) {
+ for (i = 0; i < total_count; i++) {
+ if (i < viewer_play_data->insert_count) {
+ tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
+
+ } else if (i < total_count) {
+ tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+ continue;
+ }
+ elm_check_state_set(tmp_media_info->check_item, (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE);
+ tmp_media_info->isChecked = (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE;
+ }
+ }
+ elm_object_disabled_set(viewer_play_data->save_button, (viewer_play_data->isSelectAll) ? EINA_FALSE : EINA_TRUE);
+ }
+}
+
+static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
+
+ int index = (int) data;
+ int realIndex = 0;
+ int insert_count = viewer_play_data->insert_count;
+ int attach_count = viewer_play_data->attach_count;
+ int total_count = insert_count + attach_count;
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
+
+ // check boundary
+ if (realIndex < 0 ) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text")) {
+ if (realIndex < insert_count) {
+ media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[INSERT MEDIA] name is = %s", media_info->pfile_name);
+ } else if (realIndex < insert_count+attach_count) {
+ media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ATTACH MEDIA] name is = %s", media_info->pfile_name);
+ }
+
+ return strdup(media_info->pfile_name);
+ }
+ return NULL;
+}
+
+static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+ int index = (int)data;
+ Evas_Object *check;
+ int realIndex = index-1;
+ int insert_count = viewer_play_data->insert_count;
+ int attach_count = viewer_play_data->attach_count;
+ int total_count = insert_count + attach_count;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+ realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
+
+ // check boundary
+ if (realIndex < 0 ) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
+ return NULL;
+ }
+
+ if (realIndex < insert_count) {
+ media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
+ } else if (realIndex < total_count) {
+ media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
+ }
+
+ if (strcmp(part, "elm.icon.1") == 0) {
+ check = elm_check_add(obj);
+ //set the State pointer to keep the current UI state of Checkbox.
+ elm_check_state_pointer_set(check, &media_info->isChecked);
+ evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ media_info->check_item = check;
+
+ return check;
+ } else if (strcmp(part, "elm.icon.2") == 0) {
+ Evas_Object *image = NULL;
+
+ image = elm_icon_add(obj);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info->pfile_path = %s", media_info->pfile_path);
+
+ /*set attach file icon*/
+ if (media_info->media_type == MSG_VIEWER_MEDIA_IMG ||
+ media_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
+ elm_icon_file_set(image, media_info->pfile_path, NULL);
+ } else if (media_info->media_type == MSG_VIEWER_MEDIA_DRM) {
+ elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL);
+ } else {
+ if (strlen(media_info->pfile_path)) {
+ const char *icon_path = NULL;
+
+ icon_path = msg_common_get_file_icon(media_info->pfile_path);
+ if (icon_path) {
+ elm_icon_file_set(image, icon_path, NULL);
+ } else {
+ D_EMSG("icon_path is NULL");
+ elm_icon_file_set(image, MSG_VIEWER_IMAGE_ATTACH_ICON, NULL);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
+ return NULL;
+ }
+ }
+
+ if (image)
+ evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+ return image;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+
+ int i = 0;
+ int index = 0;
+ int realIndex = 0;
+ int insert_count = viewer_play_data->insert_count;
+ int attach_count = viewer_play_data->attach_count;
+ int total_count = insert_count + attach_count;
+ bool isAllSelected = TRUE;
+ bool isNoneSelected = TRUE;
+
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *sel_media_info = NULL;
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
+
+ if (item != NULL) {
+ index = (int)elm_object_item_data_get(item);
+ realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
+
+ // check boundary
+ if (realIndex < 0 ) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
+ return;
+ }
+
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ if (realIndex < insert_count) {
+ sel_media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
+ } else if (realIndex < total_count) {
+ sel_media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
+ }
+
+ // toggle check status
+ sel_media_info->isChecked = !sel_media_info->isChecked;
+
+ elm_genlist_item_update(item);
+
+ //check condition for set select all item
+ if (total_count > 1 && sel_media_info->isChecked) {
+ i =0;
+ for (i = 0; i < total_count; i++) {
+ if (i < viewer_play_data->insert_count) {
+ tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
+ if (!tmp_media_info->isChecked) {
+ isAllSelected = FALSE;
+ break;
+ }
+ } else if (i < total_count) {
+ tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+ if (!tmp_media_info->isChecked) {
+ isAllSelected = FALSE;
+ break;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+ }
+ }
+
+ if (isAllSelected) {
+ elm_check_state_set(viewer_play_data->sa_check, EINA_TRUE);
+ viewer_play_data->isSelectAll = EINA_TRUE;
+ }
+ }
+
+ // check condition for release select all item
+ if (total_count > 1 && !sel_media_info->isChecked && viewer_play_data->isSelectAll) {
+ elm_check_state_set(viewer_play_data->sa_check, EINA_FALSE);
+ viewer_play_data->isSelectAll = EINA_FALSE;
+ }
+
+ // check condition for enable save button item
+ for (i = 0; i < total_count; i++) {
+ if (i < viewer_play_data->insert_count) {
+ tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
+ if (tmp_media_info->isChecked) {
+ isNoneSelected = FALSE;
+ break;
+ }
+ } else if (i < total_count) {
+ tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+ if (tmp_media_info->isChecked) {
+ isNoneSelected = FALSE;
+ break;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+ }
+ }
+ elm_object_disabled_set(viewer_play_data->save_button, (isNoneSelected) ? EINA_TRUE : EINA_FALSE);
+ }
+}
+
+static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->attach_list == NULL);
+
+ int attach_count = eina_list_count(viewer_play_data->attach_list);
+ int index = 0;
+ int attach_index = 0;
+ int failed_count = 0;
+ int saved_count = 0;
+
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttachInfo = NULL;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attach_cnt = %d", attach_count);
+
+ while (index < attach_count) {
+ pAttachInfo = eina_list_nth(viewer_play_data->attach_list , attach_index++);
+
+ if (pAttachInfo) {
+ /*get default file path*/
+ MSG_BOOL result = FALSE;
+ char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+ result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+ if (result) {
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+ snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttachInfo->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pAttachInfo->pfile_path);
+
+ char *result_path = msg_ui_viewer_util_copy_file(pAttachInfo->pfile_path, dst_path);
+ if (result_path) {
+ saved_count++;
+ free(result_path);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
+ failed_count++;
+ }
+ } else {
+ failed_count++;
+ }
+
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
+ failed_count++;
+ }
+
+ pAttachInfo = NULL;
+
+ index++;
+ }
+
+ /* show indicator status text */
+ if (failed_count == attach_count) {
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ } else {
+ char buf[DEF_BUF_LEN_S + 1] = {0, };
+ snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, attach_count);
+ status_message_post(buf);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_help_page_save_button_clicked_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 == NULL);
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
+ MSG_PLAY_DATA_S *viewer_play_data = pAttach_info->viewer_play_data;
+
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL");
+
+ if (strlen(pAttach_info->pfile_path) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL");
+ if (pAttach_info->isSaveAll == FALSE) {
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ } else { //Save all
+ __msg_ui_viewer_help_page_save_all_item(viewer_play_data);
+ }
+ return;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pAttach_info->pfile_path);
+ MSG_BOOL result = 0;
+ MSG_BOOL issave = TRUE;
+ char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+ /*get default file path*/
+ result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+ if (result) {
+ char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+ snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttach_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
+
+ /*check for same file*/
+ if (ecore_file_exists(dst_path) == EINA_TRUE) {
+ if (msg_ui_viewer_auto_rename(pAttach_info->pfile_path, dst_path) == FALSE)
+ issave = FALSE;
+ } else {
+ if (ecore_file_cp(pAttach_info->pfile_path, dst_path) == EINA_FALSE)
+ issave = FALSE;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ return;
+ }
+
+ if (issave)
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_SAVED"));
+ else
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info);
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ if (strcmp(label, (char *)"Copy message text") == 0) {
+ msg_ui_viewer_copy_message_text_to_clipboard(viewer_play_data);
+ } else if (strcmp(label, (char *)"View message details") == 0) {
+ msg_ui_viewer_create_msg_detail_popup(viewer_play_data);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid list type");
+ return;
+ }
+
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
diff --git a/viewer/src/msg-ui-viewer-play-view.c b/viewer/src/msg-ui-viewer-play-view.c
new file mode 100755
index 0000000..bd287e8
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-play-view.c
@@ -0,0 +1,2635 @@
+/*
+ * 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-viewer-play-view.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-image-resource.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
+
+#include <aul.h>
+#include <Ecore_X.h>
+#include <glib.h>
+#include <contacts-ug.h>
+#include "contacts-svc.h"
+#include "appsvc.h"
+#include <sound_manager.h>
+#include <status.h>
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/* message */
+static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data);
+static void __msg_ui_viewer_get_thread_addr_list(MSG_PLAY_DATA_S *data);
+static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data);
+static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data);
+
+/* create layout */
+static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data);
+static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data);
+static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data);
+static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data);
+static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
+
+/* help page genlist */
+static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj);
+
+/* message details */
+static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object *entry);
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ char title_string[VIEWER_TITLE_FONT_LEN + 1] = {0, };
+ int total_page = 0;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "clientCbEvent : %d", eventStatus->clientCbEvent);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isLastSlide : %d", eventStatus->isLastSlide);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageIdx : %d", eventStatus->pageIdx);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageCnt : %d", eventStatus->pageCnt);
+
+ viewer_play_data->smil_eventStatus = eventStatus;
+ /*update prev/next button*/
+ msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_UNKOWN);
+
+ /*for Multipart.Mixed "Slide" count info.*/
+ if (eventStatus->pageCnt == 0 && eventStatus->clientCbEvent != SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START)
+ total_page = eventStatus->pageCnt + 1;
+ else
+ total_page = eventStatus->pageCnt;
+
+ /*update page index*/
+ snprintf(title_string, sizeof(title_string), "%d/%d ", eventStatus->pageIdx + 1, total_page);
+ edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "page/index", title_string);
+
+ if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE && eventStatus->isLastSlide == TRUE) {
+ MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+ msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode : %d", launchmode);
+
+ if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
+ viewer_play_data->status = MSG_VIEWER_STOP;
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
+ } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
+ viewer_play_data->status = MSG_VIEWER_STOP;
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid launchmode");
+ }
+ } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START ||
+ eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_PLAY_START) { /*slide is playing*/
+ double current_slide_time = 0.0;
+ double remain_slide_time = 0.0;
+ double remain_next_slide_time = 0.0;
+ if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx, FALSE, &remain_slide_time)) {
+ if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx+1, FALSE, &remain_next_slide_time))
+ current_slide_time = remain_slide_time - remain_next_slide_time;
+ else
+ current_slide_time = remain_slide_time;
+ }
+
+ if (current_slide_time <= 0) { //for infinite duration slide, duration <= 0
+ if (viewer_play_data->play_controller_progressbar_timer)
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ } else {
+ if (viewer_play_data->play_controller_progressbar_timer)
+ ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
+ }
+
+ //set pause icon in play controller
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
+
+ viewer_play_data->status = MSG_VIEWER_PLAY;
+ } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE) {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer)
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_ERROR) {
+ /*stop smil player*/
+ if (msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP) == MSG_SMIL_SUCCESS) {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
+ viewer_play_data->status = MSG_VIEWER_STOP;
+ msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler is failed");
+ }
+
+ /* show popup */
+ if (msg_common_is_connected_call()) {
+ viewer_play_data->popup_mode = VIEWER_NORMAL_POPUP;
+ msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"));
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return MSG_SMIL_SUCCESS;
+}
+
+void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_BOOL bfisrt_page = FALSE;
+ MSG_BOOL blast_page = FALSE;
+ SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = viewer_play_data->smil_eventStatus;
+ Evas_Object *left_btn_icon = NULL;
+ Evas_Object *right_btn_icon = NULL;
+ int r = VIEWER_COLOR_255;
+ int g = VIEWER_COLOR_255;
+ int b = VIEWER_COLOR_255;
+ int a = VIEWER_COLOR_255;
+ SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+
+ if (status == MSG_VIEWER_STOP) {
+ elm_object_disabled_set(viewer_play_data->next_button, TRUE);
+ right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
+ evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
+ elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
+ left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
+ evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+ } else {
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide->commonData == NULL);
+ if (slide->commonData->pageCnt > 0) {
+ if (slide->pageIdx == 0)
+ bfisrt_page = TRUE;
+
+ if (slide->pageIdx + 1 == slide->commonData->pageCnt)
+ blast_page = TRUE;
+
+ if (bfisrt_page) { /*first page*/
+ elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
+ left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
+ evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+ } else {
+ elm_object_disabled_set(viewer_play_data->prev_button, FALSE);
+ left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
+ evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(left_btn_icon, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable prev_button");
+ }
+
+ if (blast_page) { /*lastpage*/
+ elm_object_disabled_set(viewer_play_data->next_button, TRUE);
+ right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
+ evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, 128);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
+ } else {
+ elm_object_disabled_set(viewer_play_data->next_button, FALSE);
+ right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
+ evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(right_btn_icon, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable next_button");
+ }
+
+ /*smil player is finished*/
+ if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE &&
+ eventStatus->isLastSlide == TRUE) {
+ elm_object_disabled_set(viewer_play_data->next_button, TRUE);
+ right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
+ evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
+
+ elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
+ left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
+ evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart.mixed message");
+ elm_object_disabled_set(viewer_play_data->next_button, TRUE);
+ right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
+ evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+
+ elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
+ left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
+ evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
+ evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_command_play_pause(void *data)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
+
+ /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/
+ if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
+ return;
+ }
+
+ /* play */
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+ if (Error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+ viewer_play_data->status = MSG_VIEWER_PAUSE;
+
+ if (viewer_play_data->play_controller_progressbar_timer)
+ ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+ }
+ } else if (viewer_play_data->status == MSG_VIEWER_STOP) {
+ Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
+ if (Error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
+ } else {
+ if (viewer_play_data->play_controller) {
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
+ msg_ui_viewer_create_progressbar(viewer_play_data, 0);
+ }
+
+ viewer_play_data->status = MSG_VIEWER_PLAY;
+ }
+ } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
+ Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME);
+ if (Error != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
+ return;
+ } else {
+ if (viewer_play_data->play_controller)
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
+ viewer_play_data->status = MSG_VIEWER_PLAY;
+
+ if (viewer_play_data->play_controller_progressbar_timer)
+ ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid play status case");
+ }
+
+ /* hide optionheader if current viewer status has changed to MSG_VIEWER_PLAY */
+ if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+ if (viewer_play_data->title_optionheader_opened) {
+ elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ viewer_play_data->title_optionheader_opened = EINA_FALSE;
+ }
+
+ if (viewer_play_data->title_box_layout) {
+ elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+ msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+ }
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_update_player_state_after_save(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ return;
+ } else {
+ viewer_play_data->status = MSG_VIEWER_PLAY;
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status : %d", viewer_play_data->previous_status);
+ }
+
+ viewer_play_data->previous_status = MSG_VIEWER_UNKOWN;
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_view_init(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ viewer_play_data->main_window = NULL;
+ viewer_play_data->navi_frame = NULL;
+ viewer_play_data->navi_item = NULL;
+ viewer_play_data->navi_title_layout= NULL;
+ viewer_play_data->title_button = NULL;
+ viewer_play_data->ctrl_toolbar = NULL;
+ viewer_play_data->title_toolbar = NULL;
+ viewer_play_data->title_box_layout = NULL;
+ viewer_play_data->title_genlist = NULL;
+ viewer_play_data->subject_index_layout = NULL;
+ viewer_play_data->play_controller = NULL;
+ viewer_play_data->play_layout = NULL;
+ viewer_play_data->prev_button = NULL;
+ viewer_play_data->next_button = NULL;
+ viewer_play_data->help_page_gl = NULL;
+ viewer_play_data->save_attachment_gl = NULL;
+ viewer_play_data->save_button = NULL;
+ viewer_play_data->sa_check = NULL;
+ viewer_play_data->m_x = 0;
+ viewer_play_data->m_y = 0;
+ viewer_play_data->mouse_down_event_handler = NULL;
+ viewer_play_data->mouse_up_event_handler = NULL;
+ viewer_play_data->msgHandle = NULL;
+ viewer_play_data->msgID = -1;
+ viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+ viewer_play_data->status = MSG_VIEWER_UNKOWN;
+ viewer_play_data->msg_t = NULL;
+ viewer_play_data->mms_t = NULL;
+ viewer_play_data->smil_eventStatus = NULL;
+ viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+ viewer_play_data->bgcolor = 0x0;
+ viewer_play_data->del_idler = NULL;
+ viewer_play_data->play_controller_timer = NULL;
+ viewer_play_data->ctrl_start_x = 0;
+ viewer_play_data->ctrl_start_y = 0;
+ viewer_play_data->prev_button = NULL;
+ viewer_play_data->next_button = NULL;
+ viewer_play_data->insert_count = 0;
+ viewer_play_data->attach_count = 0;
+ viewer_play_data->insert_list = NULL;
+ viewer_play_data->attach_list = NULL;
+ viewer_play_data->title_optionheader_opened = 0;
+ viewer_play_data->playcontroller_opened = 0;
+
+ viewer_play_data->title_th = elm_theme_new();
+ elm_theme_ref_set(viewer_play_data->title_th, NULL);
+ elm_theme_extension_add(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
+
+ viewer_play_data->progress_th = elm_theme_new();
+ elm_theme_ref_set(viewer_play_data->progress_th, NULL);
+ elm_theme_extension_add(viewer_play_data->progress_th, MSG_VIEWER_EDJ);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_destroy_play_view(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+ if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ } else {
+ viewer_play_data->status = MSG_VIEWER_STOP;
+ }
+ }
+
+ if (viewer_play_data->insert_list) {
+ int index = 0;
+ int ntotal = 0;
+ ntotal = eina_list_count(viewer_play_data->insert_list);
+ for (index = 0; index < ntotal; index++) {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(viewer_play_data->insert_list, index);
+ if (pMedia_info) {
+ free(pMedia_info);
+ pMedia_info = NULL;
+ }
+ }
+ eina_list_free(viewer_play_data->insert_list);
+ viewer_play_data->insert_list = NULL;
+ }
+
+ if (viewer_play_data->attach_list) {
+ int index = 0;
+ int ntotal = 0;
+ ntotal = eina_list_count(viewer_play_data->attach_list);
+ for (index = 0; index < ntotal; index++) {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, index);
+ if (pAttach_info) {
+ free(pAttach_info);
+ pAttach_info = NULL;
+ }
+ }
+ eina_list_free(viewer_play_data->attach_list);
+ viewer_play_data->attach_list = NULL;
+ }
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ if (viewer_play_data->del_idler) {
+ ecore_idler_del(viewer_play_data->del_idler);
+ viewer_play_data->del_idler = NULL;
+ }
+ if (viewer_play_data->help_page_gl) {
+ evas_object_del(viewer_play_data->help_page_gl);
+ viewer_play_data->help_page_gl = NULL;
+ }
+
+ if (viewer_play_data->play_controller_timer) {
+ ecore_timer_del(viewer_play_data->play_controller_timer);
+ viewer_play_data->play_controller_timer = NULL;
+ }
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
+ viewer_play_data->play_controller_progressbar_timer = NULL;
+ }
+
+ if (viewer_play_data->title_th) {
+ elm_theme_extension_del(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
+ elm_theme_free(viewer_play_data->title_th);
+ viewer_play_data->title_th = NULL;
+ }
+
+ if (viewer_play_data->progress_th) {
+ elm_theme_extension_del(viewer_play_data->progress_th, EDJDIR"/msg_viewer.edj");
+ elm_theme_free(viewer_play_data->progress_th);
+ viewer_play_data->progress_th = NULL;
+ }
+
+ msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+ //unset volume key type
+ sound_manager_set_volume_key_type(VOLUME_KEY_TYPE_NONE);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_disconnect_handler(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->mouse_up_event_handler) {
+ ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
+ viewer_play_data->mouse_up_event_handler = NULL;
+ }
+
+ if (viewer_play_data->mouse_down_event_handler) {
+ ecore_event_handler_del(viewer_play_data->mouse_down_event_handler);
+ viewer_play_data->mouse_down_event_handler = NULL;
+ }
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ int msg_id = viewer_play_data->msgID;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ Evas_Object *layout = NULL;
+ MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+
+ /*get message information like bgcolor, insert and attach count
+ *it should be called before __msg_ui_viewer_create_control_toolbar*/
+ if (__msg_ui_viewer_play_view_get_message_info(viewer_play_data) == FALSE)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_viewer_play_view_get_content_count is failed");
+
+ layout = msg_ui_viewer_get_main_layout(viewer_play_data->viewer_main);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
+
+ /* create naviframe */
+ if (!viewer_play_data->navi_frame) {
+ viewer_play_data->navi_frame = msg_ui_viewer_create_navigation_layout(layout);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->navi_frame == NULL, FALSE);
+ msg_ui_viewer_set_navi_frame(viewer_play_data->viewer_main, viewer_play_data->navi_frame);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "navi_frame is already created");
+ }
+ /*create play layout*/
+ if (__msg_ui_viewer_create_content_layout(viewer_play_data) == FALSE)
+ return FALSE;
+
+ msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
+
+ /* create back button */
+ Evas_Object *back_btn = elm_button_add(viewer_play_data->navi_frame);
+ elm_object_style_set(back_btn, "naviframe/back_btn/default");
+ evas_object_smart_callback_add(back_btn, "clicked", msg_ui_viewer_back_button_cb, (void*)viewer_play_data);
+
+ /* set title text & title button */
+ if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
+ /* create naviframe item and push */
+ viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_HEADER_PREVIEW"), back_btn, NULL, viewer_play_data->play_layout, NULL);
+ } else {
+ /* create naviframe item and push */
+ viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, NULL, back_btn, NULL, viewer_play_data->play_layout, "empty");
+
+ /* create naviframe title layout and set */
+ viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->navi_item, "title", viewer_play_data->navi_title_layout);
+ msg_ui_viewer_set_navi_title_layout(viewer_play_data);
+ }
+
+ /* create subject & index layout */
+ __msg_ui_viewer_create_subject_index_layout(viewer_play_data);
+
+ /* create page navigator */
+ __msg_ui_viewer_create_play_controller(viewer_play_data);
+
+ /* create control toolbar */
+ __msg_ui_viewer_create_control_toolbar(viewer_play_data);
+
+ if (!viewer_play_data->mouse_down_event_handler)
+ viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data);
+
+ /*create smil rendering layout*/
+ if (msg_smil_create_smil_player_layout(viewer_play_data->SmilHandle, viewer_play_data->play_layout) == FALSE)
+ return FALSE;
+
+ SMIL_POSITION_S left_top = {0,};
+ SMIL_POSITION_S right_bottom = {0,};
+ __msg_ui_viewer_get_layout_size(viewer_play_data, &left_top, &right_bottom);
+
+ if (msg_smil_set_smil_player_layout_size(viewer_play_data->SmilHandle, &left_top, &right_bottom) == FALSE)
+ return FALSE;
+
+ /*register help page show callback to renderer */
+ if (msg_smil_set_smil_player_help_page_cb(viewer_play_data->SmilHandle, msg_ui_viewer_help_page_smilrenderer_cb, (void *)viewer_play_data) == FALSE)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_help_page_cb is failed");
+
+ if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREVIEW_PLAY);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
+ return FALSE;
+ }
+ } else {
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
+ return FALSE;
+ }
+ }
+
+ if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return FALSE;
+ }
+ /*set read status*/
+ bool readStatus = FALSE;
+ msg_get_bool_value(msgInfo, MSG_MESSAGE_READ_BOOL, &readStatus);
+
+ if (!readStatus)
+ msg_update_read_status(viewer_play_data->msgHandle, msg_id, TRUE);
+
+ /* send read report*/
+ int folder_id = MSG_MAX_FOLDER_ID;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
+ if (folder_id == MSG_INBOX_ID) {
+ msg_error_t err = MSG_SUCCESS;
+
+ msg_struct_t rcvSetting_info = msg_create_struct(MSG_STRUCT_SETTING_MMS_RECV_OPT);
+ err = msg_get_mms_recv_opt(viewer_play_data->msgHandle, rcvSetting_info);
+
+ if (err == MSG_SUCCESS) {
+ bool bReadReport;
+ msg_get_bool_value(rcvSetting_info, MSG_MMS_RECVOPT_READ_REPORT_BOOL, &bReadReport);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "bsend_read_report = %d", bReadReport);
+ /*read report request status and sent read report result of current message will be checked by MF after calling msg_mms_send_read_report.
+ *So, currently ui always call msg_mms_send_read_report when setting value of send read report is on*/
+ if (bReadReport)
+ msg_mms_send_read_report(viewer_play_data->msgHandle, msg_id, MSG_READ_REPORT_IS_READ);
+
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_config is failed!");
+ }
+ msg_release_struct(&rcvSetting_info);
+ }
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ }
+
+ //set volume key type as MEDIA, not SYSTEM
+ sound_manager_set_volume_key_type(VOLUME_KEY_TYPE_MEDIA);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+
+MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+ /*connect mouse down signal*/
+ if (!viewer_play_data->mouse_down_event_handler)
+ viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data);
+
+ /*change command bar*/
+ if (viewer_play_data->play_controller) {
+ edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
+ msg_ui_viewer_create_progressbar(viewer_play_data, 0);
+ }
+
+ /*Set title string*/
+ if (!viewer_play_data->navi_title_layout)
+ viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
+
+ msg_ui_viewer_set_navi_title_layout(viewer_play_data);
+
+ /*play player view*/
+ err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
+ if (err != MSG_SMIL_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+ return FALSE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
+ Evas_Object *navi_frame = NULL;
+
+ 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;
+}
+
+static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (!viewer_play_data->play_layout) {
+ viewer_play_data->play_layout = elm_layout_add(viewer_play_data->navi_frame);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->play_layout == NULL, FALSE);
+ elm_layout_file_set(viewer_play_data->play_layout, MSG_VIEWER_THEME, "viewer_main");
+ evas_object_size_hint_weight_set(viewer_play_data->play_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(viewer_play_data->play_layout);
+
+ evas_object_event_callback_add(viewer_play_data->play_layout, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_viewer_play_layout_mouse_down_cb, (void *)viewer_play_data);
+ evas_object_event_callback_add(viewer_play_data->play_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_viewer_play_layout_mouse_up_cb, (void *)viewer_play_data);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
+
+static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ char strSubject[MAX_SUBJECT_LEN] = {0};
+ msg_error_t err = MSG_SUCCESS;
+
+ Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
+ elm_layout_file_set(layout, MSG_VIEWER_THEME, "subject/pageindex");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(layout);
+ viewer_play_data->subject_index_layout = layout;
+
+ /*get msg info struct handle */
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ if (viewer_play_data->msgID != -1) {
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
+ } else { //preview data, subject string cannot be found in mms_t struct
+ msg_get_str_value(viewer_play_data->msg_t, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subject text is %s", strSubject);
+
+ if (strSubject[0] != '\0')
+ edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "subject", strSubject);
+
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.subject", viewer_play_data->subject_index_layout);
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
+ elm_layout_file_set(layout, MSG_VIEWER_THEME, "play_controller");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(layout);
+
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", layout);
+ viewer_play_data->play_controller = layout;
+
+ //add signal callbacks
+ edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "volume_clicked", "", msg_ui_viewer_volume_button_cb, (void *)viewer_play_data);
+ edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "prev_clicked", "", msg_ui_viewer_prev_button_cb, (void *)viewer_play_data);
+ edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "play_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
+ edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "pause_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
+ edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "next_clicked", "", msg_ui_viewer_next_button_cb, (void *)viewer_play_data);
+
+ viewer_play_data->playcontroller_opened = TRUE;
+
+ //register timer
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+
+ //create progressbar
+ msg_ui_viewer_create_progressbar(viewer_play_data, 0);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Evas_Object *toolbar = NULL;
+ int folder_id = MSG_MAX_FOLDER_ID;
+ msg_error_t err = MSG_SUCCESS;
+ MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+
+ toolbar = elm_toolbar_add(viewer_play_data->navi_frame);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, toolbar == NULL);
+
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+ msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
+
+ /*get msg info struct handle */
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ //All item should be empty
+ if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
+ // Toolbar item empty
+ } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
+ viewer_play_data->ctrltoolbar_item[0] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_ATTACH, NULL, msg_ui_viewer_save_button_cb, data);
+ viewer_play_data->ctrltoolbar_item[1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, msg_ui_viewer_delete_button_cb, data);
+
+ /* get folder ID */
+ msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type
+
+ if (folder_id == MSG_SENTBOX_ID) {
+ viewer_play_data->ctrltoolbar_item[2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_FORWARD, NULL, msg_ui_viewer_forward_button_cb, data);
+ } else if (folder_id == MSG_OUTBOX_ID) {
+ viewer_play_data->ctrltoolbar_item[2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_RESEND, NULL, msg_ui_viewer_resend_button_cb, data);
+ } else if (folder_id == MSG_INBOX_ID) {
+ viewer_play_data->ctrltoolbar_item[2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_REPLY, NULL, msg_ui_viewer_reply_button_cb, data);
+ }
+
+ viewer_play_data->ctrltoolbar_item[3] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_MORE, NULL, msg_ui_viewer_more_button_cb, data);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launch mode");
+ }
+
+ elm_object_item_part_content_set(viewer_play_data->navi_item, "controlbar", toolbar);
+
+ viewer_play_data->ctrl_toolbar = toolbar;
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ Evas_Object *title_layout = elm_layout_add(viewer_play_data->navi_frame);
+ elm_layout_file_set(title_layout, MSG_VIEWER_THEME, "title");
+ evas_object_size_hint_weight_set(title_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(title_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(title_layout);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return title_layout;
+}
+
+void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ int folder_id = MSG_MAX_FOLDER_ID;
+ char *display_name = NULL;
+ char title_address[MAX_ADDRESS_VAL_LEN + 1] = {0,};
+ MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type
+ msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
+
+ if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode is not applicable, current mode is %d", launchmode);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "folder_id = [%d]", folder_id);
+
+ if (folder_id == MSG_INBOX_ID) {
+ viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
+ elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
+ elm_object_style_set(viewer_play_data->title_button, "title_button");
+ evas_object_size_hint_weight_set(viewer_play_data->title_button, 0.0, 0.0);
+ evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) {
+ display_name = msg_viewer_util_get_display_name_by_index(viewer_play_data->addr_list.addr_info[0].contact_id);
+
+ if (display_name) {
+ snprintf(title_address, sizeof(title_address), "%s", display_name);
+ free(display_name);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
+ snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
+ }
+ } else {
+ snprintf(title_address, sizeof(title_address), "%s", viewer_play_data->addr_list.addr_info[0].address);
+ }
+
+ elm_object_text_set(viewer_play_data->title_button, title_address);
+
+ evas_object_show(viewer_play_data->title_button);
+ elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button);
+ evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data);
+ } else if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_SENTBOX_ID) {
+ viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
+ elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
+ elm_object_style_set(viewer_play_data->title_button, "title_button");
+ evas_object_size_hint_weight_set(viewer_play_data->title_button, 0.0, 0.0);
+ evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) {
+ display_name = msg_viewer_util_get_display_name_by_index(viewer_play_data->addr_list.addr_info[0].contact_id);
+
+ if (display_name) {
+ snprintf(title_address, sizeof(title_address), "%s", display_name);
+ free(display_name);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
+ snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
+ }
+ } else {
+ snprintf(title_address, sizeof(title_address), "%s", viewer_play_data->addr_list.addr_info[0].address);
+ }
+
+ if (viewer_play_data->addr_list.addr_cnt == 1) {
+ elm_object_text_set(viewer_play_data->title_button, title_address);
+ } else if (viewer_play_data->addr_list.addr_cnt > 1) {
+ char title_text[DEF_BUF_LEN+1] = {0,};
+ snprintf(title_text, sizeof(title_text), "%s +%d", title_address, viewer_play_data->addr_list.addr_cnt -1);
+ elm_object_text_set(viewer_play_data->title_button, title_text);
+ } else {
+ elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ }
+
+ evas_object_show(viewer_play_data->title_button);
+ elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button);
+ evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid type of message folder id = [%d]", folder_id);
+ }
+ }
+
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Evas_Object *msg_ui_viewer_create_title_toolbar(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ Evas_Object *toolbar = elm_toolbar_add(viewer_play_data->navi_frame);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, toolbar == NULL, NULL);
+
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+ elm_object_style_set(toolbar, "naviframe");
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return toolbar;
+}
+
+Evas_Object *msg_ui_viewer_create_title_toolbar_btn(Evas_Object *parent, char *icon_path, char *button_text)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL");
+
+ Evas_Object *button = elm_button_add(parent);
+
+ evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ elm_object_style_set(button, "naviframe_control/default");
+
+ if (icon_path) {
+ Evas_Object *icon = elm_icon_add(button);
+ elm_icon_file_set(icon, icon_path, NULL);
+ elm_object_content_set(button,icon);
+ evas_object_size_hint_min_set(icon, 50, 50);
+ evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ } else if (button_text) {
+ elm_object_text_set(button, button_text);
+ }
+ evas_object_show(button);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return button;
+}
+
+void msg_ui_viewer_add_title_toolbar_item(Evas_Object *toolbar, void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ int i;
+
+ /* create add/view contact button */
+ Evas_Object *addcontact_button = NULL;
+
+ /* clear toolbar items, max value is 3 */
+ for (i = 0; i < 3; i++) {
+ if (viewer_play_data->toolbar_item[i])
+ elm_object_item_del(viewer_play_data->toolbar_item[i]);
+ }
+
+ if (viewer_play_data->addr_list.addr_info[0].contact_id <= 0) {
+ addcontact_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_add_to_contact_cb, (void *)viewer_play_data);
+ } else {
+ addcontact_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_view_contact_cb, (void *)viewer_play_data);
+ }
+
+ if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
+ /* create voicecall button */
+ Evas_Object *voicecall_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_VOICECALL, NULL);
+ evas_object_smart_callback_add(voicecall_button, "clicked", msg_ui_viewer_toolbar_call_cb, (void *)viewer_play_data);
+ viewer_play_data->toolbar_item[0] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", voicecall_button);
+
+ /* create videocall button */
+ Evas_Object *videocall_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_VIDEOCALL, NULL);
+ evas_object_smart_callback_add(videocall_button, "clicked", msg_ui_viewer_toolbar_vcall_cb, (void *)viewer_play_data);
+ viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", videocall_button);
+
+ viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button);
+ } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
+ Evas_Object *email_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, NULL, dgettext("sys_string","IDS_COM_BODY_EMAIL"));
+ evas_object_smart_callback_add(email_button, "clicked", msg_ui_viewer_toolbar_email_cb, (void *)viewer_play_data);
+ viewer_play_data->toolbar_item[0] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", email_button);
+
+ viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "given address cannot be handled : %s", viewer_play_data->addr_list.addr_info[0].address);
+
+ viewer_play_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", addcontact_button);
+ elm_object_item_disabled_set(viewer_play_data->toolbar_item[0], EINA_TRUE);
+ elm_object_disabled_set(addcontact_button, EINA_TRUE);
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, left_top == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, right_bottom == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ int x = 0;
+ int y = 0;
+ int w = 0;
+ int navi_frame_height = 0;
+ int toolbar_height = 0;
+ int window_width = 0;
+ int window_height = 0;
+
+ /*get window size*/
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height);
+ viewer_play_data->window_width = window_width;
+ viewer_play_data->window_height = window_height;
+
+ /*get navi_frame height*/
+ double scale = elm_config_scale_get();
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "scale = %lf", scale);
+
+ navi_frame_height = (int)(scale * VIEWER_NAVI_FRAME_HEIGHT);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "navi_frame_height = %d", navi_frame_height);
+
+ /*get toolbar height*/
+ edje_object_part_geometry_get(_EDJ(viewer_play_data->play_layout), "viewer.swallow.toolbar", &x, &y, &w, &toolbar_height);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "window_width = %d, window_height = %d, toolbar_height = %d", window_width, window_height, toolbar_height);
+
+ left_top->x = 0;
+ left_top->y = navi_frame_height;
+ right_bottom->x = window_width;
+ right_bottom->y = (window_height - toolbar_height);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ int page_count = 0;
+ int media_count = 0;
+ int nmedia_count = 0;
+ int bgColor = 0;
+
+ /*get the SMIL content*/
+ if (!viewer_play_data->mms_t) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mms data struct is null");
+ return FALSE;
+ }
+
+ /*get bgcolor*/
+ msg_get_int_value(viewer_play_data->mms_t, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
+ viewer_play_data->bgcolor = bgColor;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->bgcolor = 0x%x", viewer_play_data->bgcolor);
+
+ /*get attach count*/
+ msg_list_handle_t attachlist_info = NULL;
+ msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+ viewer_play_data->attach_count= msg_list_length(attachlist_info);
+
+ /*get attach list */
+ viewer_play_data->attach_list = __msg_ui_viewer_get_attach_list(viewer_play_data);
+
+ /*get insert count*/
+ msg_list_handle_t pagelist_info = NULL;
+ msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ page_count = msg_list_length(pagelist_info);
+
+ if (page_count) {
+ int page_idx = 0;
+ for (page_idx = 0; page_idx < page_count; ++page_idx) {
+ msg_struct_t page_info = NULL;
+ page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
+
+ if (!page_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
+ return FALSE;
+ }
+
+ msg_list_handle_t medialist_info = NULL;
+ msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+ media_count = msg_list_length(medialist_info);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
+
+ int media_idx = 0;
+ for (media_idx = 0; media_idx < media_count; ++media_idx) {
+ int mediaType;
+ msg_struct_t media_info = NULL;
+ media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
+
+ if (!media_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is NULL", media_idx);
+ continue;
+ }
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ if (mediaType == MMS_SMIL_MEDIA_TEXT)
+ continue;
+
+ nmedia_count++;
+ }
+ }
+ }
+ viewer_play_data->insert_count = nmedia_count;
+
+ /* get insert item list */
+ viewer_play_data->insert_list = __msg_ui_viewer_get_inserted_item_list(viewer_play_data);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert count : %d, attach count : %d", viewer_play_data->insert_count, viewer_play_data->attach_count);
+
+ /* get address list(thread) */
+ __msg_ui_viewer_get_thread_addr_list(viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return TRUE;
+}
+
+static void __msg_ui_viewer_get_thread_addr_list(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_list_s addrList;
+ int thread_id;
+
+ /* get address list(thread) */
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+
+ err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ /*initialize addr list*/
+ memset(&viewer_play_data->addr_list, 0x00, sizeof(MSG_VIEWER_ADDR_LIST));
+
+ viewer_play_data->addr_list.addr_cnt = addrList.nCount;
+
+ int i = 0;
+ for (i = 0; i < addrList.nCount; i++) {
+ msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &viewer_play_data->addr_list.addr_info[i].contact_id);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, viewer_play_data->addr_list.addr_info[i].name, MAX_DISPLAY_NAME_LEN);
+ msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, viewer_play_data->addr_list.addr_info[i].address, MAX_ADDRESS_VAL_LEN);
+ }
+
+ msg_release_list_struct(&addrList);
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+
+}
+
+static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ int page_idx = 0;
+ int page_count = 0;
+ int media_count = 0;
+ int insertCnt = 0;
+ int drmType = 0;
+ Eina_List *insert_list = NULL;
+
+ char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
+ char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+
+ /*get insert count*/
+ msg_list_handle_t pagelist_info = NULL;
+ msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ page_count = msg_list_length(pagelist_info);
+
+ for (page_idx = 0; page_idx < page_count; ++page_idx) {
+ msg_struct_t page_info = NULL;
+ page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
+ if (!page_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
+ continue;
+ }
+
+ msg_list_handle_t medialist_info = NULL;
+ msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+ media_count = msg_list_length(medialist_info);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
+
+ int media_idx = 0;
+ for (media_idx = 0; media_idx < media_count; ++media_idx) {
+ int mediaType;
+ msg_struct_t media_info = NULL;
+ media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
+
+ if (!media_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
+ continue;
+ }
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ if (mediaType == MMS_SMIL_MEDIA_TEXT) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is TEXT type, skip adding", media_idx);
+ continue;
+ }
+
+ bzero(strFileName, sizeof(strFileName));
+ bzero(strFilePath, sizeof(strFilePath));
+
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName));
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert media file name: %s", strFileName);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
+
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pInsert_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
+ if (pInsert_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ if (insert_list)
+ goto FREE_LIST;
+ else
+ return NULL;
+ } else {
+ if (strlen(strFileName)) {
+ strncpy(pInsert_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
+ } else {
+ const char *file_name = NULL;
+ file_name = ecore_file_file_get(strFilePath);
+ if (file_name)
+ strncpy(pInsert_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
+ else
+ strncpy(pInsert_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
+ }
+
+ strncpy(pInsert_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
+
+ pInsert_info->pfile_size = ecore_file_size(strFilePath);
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType);
+
+ if (drmType != MSG_DRM_TYPE_NONE) {
+ pInsert_info->media_type = MSG_VIEWER_MEDIA_DRM;
+ } else {
+ switch (mediaType) {
+ case MMS_SMIL_MEDIA_IMG:
+ pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG;
+ break;
+ case MMS_SMIL_MEDIA_AUDIO:
+ pInsert_info->media_type = MSG_VIEWER_MEDIA_AUDIO;
+ break;
+ case MMS_SMIL_MEDIA_VIDEO:
+ pInsert_info->media_type = MSG_VIEWER_MEDIA_VIDEO;
+ break;
+ case MMS_SMIL_MEDIA_ANIMATE:
+ pInsert_info->media_type = MSG_VIEWER_MEDIA_ANIMATE;
+ break;
+ case MMS_SMIL_MEDIA_IMG_OR_VIDEO:
+ pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG_OR_VIDEO;
+ break;
+ default:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d type is not handled in switch!");
+ pInsert_info->media_type = MSG_VIEWER_MEDIA_ATTACH; // set attach type, it's better to set attach type, not to set invalid type
+ break;
+ }
+ }
+ pInsert_info->viewer_play_data = viewer_play_data;
+
+ /*append insert item list*/
+ insert_list = eina_list_append(insert_list, pInsert_info);
+ insertCnt++;
+ }
+ }
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d insert item(s) added", insertCnt);
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return insert_list;
+FREE_LIST:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free insert item list");
+ if (insert_list) {
+ int index = 0;
+ int ntotal = 0;
+ ntotal = eina_list_count(insert_list);
+ for (index = 0; index < ntotal; index++) {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(insert_list, index);
+ if (pMedia_info) {
+ free(pMedia_info);
+ pMedia_info = NULL;
+ }
+ }
+ eina_list_free(insert_list);
+ insert_list = NULL;
+ }
+ return NULL;
+}
+
+static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ /*get attached content list*/
+ int attach_idx = 0;
+ int attach_count = 0;
+ Eina_List *attach_list = NULL;
+ char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
+ char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+
+ /*get attach count*/
+ msg_list_handle_t attachlist_info = NULL;
+ msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+ attach_count = msg_list_length(attachlist_info);
+
+ for (attach_idx = 0; attach_idx < attach_count; ++attach_idx) {
+ msg_struct_t attach_info = NULL;
+
+ attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx);
+
+ if (attach_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL");
+ continue;
+ } else {
+ bzero(strFileName, sizeof(strFileName));
+ bzero(strFilePath, sizeof(strFilePath));
+
+ msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName));
+ msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath));
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
+
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
+ if (pAttach_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ if (attach_list)
+ goto FREE_LIST;
+ else
+ return NULL;
+ } else {
+ if (strlen(strFileName)) {
+ strncpy(pAttach_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
+ } else {
+ const char *file_name = NULL;
+ file_name = ecore_file_file_get(strFilePath);
+ if (file_name)
+ strncpy(pAttach_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
+ else
+ strncpy(pAttach_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
+ }
+
+ strncpy(pAttach_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
+
+ pAttach_info->pfile_size = ecore_file_size(strFilePath);
+ pAttach_info->media_type = MSG_VIEWER_MEDIA_ATTACH;
+ pAttach_info->viewer_play_data = viewer_play_data;
+
+ /*append attach list*/
+ attach_list = eina_list_append(attach_list, pAttach_info);
+ attach_count++;
+ }
+ }
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d attach(s) added", attach_count);
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return attach_list;
+FREE_LIST:
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free attachment list");
+ if (attach_list) {
+ int index = 0;
+ int ntotal = 0;
+ ntotal = eina_list_count(attach_list);
+ for (index = 0; index < ntotal; index++) {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(attach_list, index);
+ if (pAttach_info) {
+ free(pAttach_info);
+ pAttach_info = NULL;
+ }
+ }
+ eina_list_free(attach_list);
+ attach_list = NULL;
+ }
+ return NULL;
+}
+
+void msg_ui_viewer_contact_info_update(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ /* reload thread address list */
+ __msg_ui_viewer_get_thread_addr_list(viewer_play_data);
+
+ /* change control bar button */
+ if (viewer_play_data->title_optionheader_opened) {
+ if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) {
+ Evas_Object *addcontact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_view_contact_cb, (void *)viewer_play_data);
+
+ if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
+ elm_object_item_del(viewer_play_data->toolbar_item[2]);
+ viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button);
+ } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
+ elm_object_item_del(viewer_play_data->toolbar_item[1]);
+ viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button);
+ }
+ } else {
+ Evas_Object *addcontact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL);
+ evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_add_to_contact_cb, (void *)viewer_play_data);
+
+ if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
+ elm_object_item_del(viewer_play_data->toolbar_item[2]);
+ viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button);
+ } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
+ elm_object_item_del(viewer_play_data->toolbar_item[1]);
+ viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+ elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button);
+ }
+ }
+ }
+
+ /* change title button */
+ if (viewer_play_data->addr_list.addr_cnt == 1) {
+ if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0')
+ elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].name);
+ else
+ elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].address);
+ } else if (viewer_play_data->addr_list.addr_cnt > 1) {
+ char title_text[DEF_BUF_LEN+1] = {0,};
+
+ if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0')
+ snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].name, viewer_play_data->addr_list.addr_cnt-1);
+ else
+ snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].address, viewer_play_data->addr_list.addr_cnt-1);
+
+ elm_object_text_set(viewer_play_data->title_button, title_text);
+ } else {
+ elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+ return;
+}
+
+void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Evas_Object *popup = NULL;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ popup = elm_popup_add(parent);
+ MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, popup == NULL, "popup is NULL");
+ viewer_play_data->popup = popup;
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ if (pcontent) {
+ elm_object_text_set(popup, pcontent);
+ elm_popup_timeout_set(popup, 2);
+ evas_object_smart_callback_add(popup, "block,clicked", msg_ui_viewer_popup_block_clicked_cb, viewer_play_data);
+ evas_object_smart_callback_add(popup, "timeout", msg_ui_viewer_popup_timeout_cb, viewer_play_data);
+ } else {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ return;
+ }
+
+ evas_object_show(popup);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_popup_block_clicked_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->popup_mode == VIEWER_SAVE_MODE_POPUP)
+ msg_ui_viewer_update_player_state_after_save(data);
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_popup_timeout_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 == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->popup_mode == VIEWER_SAVE_MODE_POPUP) {
+ msg_ui_viewer_update_player_state_after_save(data);
+ } else if (viewer_play_data->popup_mode == VIEWER_DELETE_MSG_MODE_POPUP) {
+ //destroy ug
+ if (viewer_play_data->viewer_main) {
+ MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+ ug_destroy_me(viewer_main_data->viewer_ug);
+ return;
+ }
+ }
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Evas_Object *renderBox = (Evas_Object *)box;
+ MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+ int attach_count = viewer_play_data->attach_count;
+
+ /* create box (for setting min size of genlist)*/
+ Evas_Object *box2 = elm_box_add(renderBox);
+ evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(box2);
+
+ /* create genlist */
+ Evas_Object *genlist = elm_genlist_add(box2);
+ 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);
+ elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+ elm_genlist_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ evas_object_show(genlist);
+
+ elm_box_pack_end(box2, genlist);
+ evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1));
+
+ viewer_play_data->hp_sa_class.item_style = "dialogue/1text.1icon";
+ viewer_play_data->hp_sa_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
+ viewer_play_data->hp_sa_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
+ viewer_play_data->hp_sa_class.func.state_get = NULL;
+ viewer_play_data->hp_sa_class.func.del = __msg_ui_viewer_help_page_gl_del;
+
+ viewer_play_data->hp_class.item_style = "dialogue/1text.2icon";
+ viewer_play_data->hp_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
+ viewer_play_data->hp_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
+ viewer_play_data->hp_class.func.state_get = NULL;
+ viewer_play_data->hp_class.func.del = __msg_ui_viewer_help_page_gl_del;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "attachment_count = %d", attach_count);
+
+ if (attach_count > 0) {
+ int attach_index = 0;
+
+ //make 'Save all' item
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
+ memset(pItem, 0x00, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
+ strncpy(pItem->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"), strlen(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL")));
+ pItem->isSaveAll = TRUE;
+ pItem->viewer_play_data = viewer_play_data;
+
+ Elm_Object_Item *item = NULL;
+ item = elm_genlist_item_append(genlist, &(viewer_play_data->hp_sa_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, NULL);
+
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ for (attach_index = 0; attach_index < attach_count; attach_index++) {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
+ if (pAttach_info == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info is NULL");
+ } else {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
+ memcpy(pItem, pAttach_info, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
+
+ elm_genlist_item_append(genlist, &(viewer_play_data->hp_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, pItem);
+ }
+ }
+ }
+
+ viewer_play_data->help_page_gl = genlist;
+
+ elm_box_pack_end(renderBox, box2);
+ *attach_list = genlist;
+
+ return err;
+}
+
+static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
+
+ if (strcmp(part, "elm.text") == 0) {
+ if (pAttach_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_name = %s", pAttach_info->pfile_name);
+ return strdup(pAttach_info->pfile_name);
+ }
+ }
+
+ return NULL;
+}
+
+static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
+
+ if (strcmp(part, "elm.icon.2") == 0 || strcmp(part, "elm.icon") == 0) {
+ Evas_Object *box = elm_box_add(obj);
+ Evas_Object *button = elm_button_add(obj);
+ Evas_Object *icon = elm_icon_add(obj);
+
+ evas_object_propagate_events_set(button, EINA_FALSE);
+ elm_box_pack_start(box, button);
+ elm_icon_file_set(icon, MSG_VIEWER_IMAGE_SAVE_ICON, NULL);
+ elm_object_part_content_set(button, "icon", icon);
+ evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_button_clicked_cb, data);
+ evas_object_show(button);
+ evas_object_show(box);
+ return box;
+ } else if (strcmp(part, "elm.icon.1") == 0) {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
+ Evas_Object *image = NULL;
+
+ image = elm_icon_add(obj);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_path = %s", pAttach_info->pfile_path);
+
+ /*set attach file icon*/
+ if (pAttach_info->media_type == MSG_VIEWER_MEDIA_IMG ||
+ pAttach_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
+ elm_icon_file_set(image, pAttach_info->pfile_path, NULL);
+ } else if (pAttach_info->media_type == MSG_VIEWER_MEDIA_DRM) {
+ elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL);
+ } else {
+ if (strlen(pAttach_info->pfile_path)) {
+ const char *icon_path = NULL;
+
+ icon_path = msg_common_get_file_icon(pAttach_info->pfile_path);
+ if (icon_path) {
+ elm_icon_file_set(image, icon_path, NULL);
+ } else {
+ D_EMSG("icon_path is NULL");
+ elm_icon_file_set(image, MSG_VIEWER_IMAGE_ATTACH_ICON, NULL);
+ }
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
+ return NULL;
+ }
+ }
+
+ if (image)
+ evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+ return image;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
+ }
+
+ return NULL;
+}
+
+static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
+ Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info;
+
+ elm_genlist_item_selected_set(pselected_item, FALSE);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pAttach_info->pfile_name);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pAttach_info->pfile_path);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pAttach_info->media_type);
+
+ //Save all item
+ if (!strcmp(pAttach_info->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Save all item");
+ return;
+ }
+
+ char mimetype[MSG_BUFFER_SIZE_64 + 1] = {0,};
+ char defapp[MSG_BUFFER_SIZE_64 + 1] = {0,};
+
+ bundle *b = bundle_create();
+ appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
+ appsvc_set_uri(b, pAttach_info->pfile_path);
+
+ /*get mime type*/
+ if (aul_get_mime_from_file(pAttach_info->pfile_path, mimetype, sizeof(mimetype)) < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mime type failed");
+
+ if (appsvc_run_service(b, 0, NULL, NULL) < 0)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appsvc_run_service is failed");
+
+ bundle_free(b);
+ return;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mime type [%s]", mimetype);
+ }
+
+ /*get default app*/
+ if (aul_get_defapp_from_mime(mimetype, defapp, sizeof(defapp)) < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "default app failed");
+
+ if (appsvc_run_service(b, 0, NULL, NULL) < 0)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appsvc_run_service is failed");
+
+ bundle_free(b);
+ return;
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "default app [%s]", defapp);
+ }
+
+ /*launch application*/
+ if (strcmp(defapp, VIDEO_PLAYER_PKG_NAME) == 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Video content");
+ bundle_add(b, MSG_BUNDLE_KEY_LAUNCH_APPLICATION, MESSAGE_PKGNAME);
+ }
+
+ if (appsvc_run_service(b, 0, NULL, NULL) < 0)
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service is failed");
+
+ bundle_free(b);
+
+ return;
+}
+
+static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *del_data = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
+ if (del_data) {
+ free(del_data);
+ del_data = NULL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ //register timer for disappear play_controller automatically when time elapsed after shown
+ if (viewer_play_data->play_controller_timer) {
+ ecore_timer_del(viewer_play_data->play_controller_timer);
+ viewer_play_data->play_controller_timer = NULL;
+ }
+ viewer_play_data->play_controller_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_LIFETIME, msg_ui_viewer_play_controller_timer_cb, (void *)viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Evas_Object *progressbar = NULL;
+ MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+ MSG_BOOL bExcludeHp = FALSE;
+ double total_time = 0.0;
+ double remain_time = 0.0;
+ double elapse_time = 0.0;
+ int remain_second = 0.0;
+ int elapse_second = 0.0;
+ char strTimeBuf[10] = {0,};
+
+ if (slideIdx < 0 ) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d, slideIdx must be same or over 0", slideIdx);
+ return;
+ }
+
+ if (!viewer_play_data->progressbar) {
+ progressbar = elm_progressbar_add(viewer_play_data->play_controller);
+ elm_object_theme_set(progressbar, viewer_play_data->progress_th);
+ elm_object_style_set(progressbar, "list_progress");
+ elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+ evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ viewer_play_data->progressbar = progressbar;
+ evas_object_show(progressbar);
+ elm_object_part_content_set(viewer_play_data->play_controller,"progressbar", progressbar);
+ }
+
+ msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
+
+ //In preview mode, slide time for help page should not be considered to total slide time
+ bExcludeHp = (launchmode == MSG_VIEWER_PREVIEW_MODE) ? TRUE : FALSE;
+
+ if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, 0, bExcludeHp, &total_time)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", 0, bExcludeHp);
+ return;
+ }
+ if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, slideIdx, bExcludeHp, &remain_time)) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", slideIdx, bExcludeHp);
+ return;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total slide time is %f", total_time);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Remain slide time from current slide(%d) is %f", slideIdx, remain_time);
+ elapse_time = total_time-remain_time;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Elapsed slide time from first slide(0) to current slide(%d) is %f", slideIdx, elapse_time);
+
+ viewer_play_data->totalProgressTime = remain_second = (int)total_time/1000;
+ elapse_second = (int)elapse_time/1000;
+ viewer_play_data->elapsedProgressTime = elapse_second;
+
+ // START timer text set
+ snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", elapse_second/60, elapse_second%60);
+ edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
+
+ bzero(strTimeBuf, sizeof(strTimeBuf));
+
+ // END timer text set
+ snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", remain_second/60, remain_second%60);
+ edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/end/time", strTimeBuf);
+
+ elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
+ viewer_play_data->play_controller_progressbar_timer = NULL;
+ }
+
+ viewer_play_data->play_controller_progressbar_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME, msg_ui_viewer_play_controller_progressbar_timer_cb, viewer_play_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Eina_Bool msg_ui_viewer_play_controller_progressbar_timer_cb(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ char strTimeBuf[10] = {0,};
+
+ viewer_play_data->elapsedProgressTime += VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME;
+
+ // update START timer text
+ snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", viewer_play_data->elapsedProgressTime/60, viewer_play_data->elapsedProgressTime%60);
+ edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
+
+ if (viewer_play_data->elapsedProgressTime == viewer_play_data->totalProgressTime) {
+ if (viewer_play_data->play_controller && evas_object_visible_get(viewer_play_data->play_controller) == EINA_FALSE) {
+ elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+ evas_object_show(viewer_play_data->play_controller);
+ viewer_play_data->playcontroller_opened = TRUE;
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+ } else {
+ // create play controller timer again
+ msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+ }
+
+ elm_progressbar_value_set(viewer_play_data->progressbar, 1.0);
+ viewer_play_data->play_controller_progressbar_timer = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->play_controller_progressbar_timer) {
+ ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
+ viewer_play_data->play_controller_progressbar_timer = NULL;
+ viewer_play_data->elapsedProgressTime = 0;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ viewer_play_data->play_controller_timer = NULL;
+
+ if (viewer_play_data->playcontroller_opened) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play controller is hided after 3 seconds elapsed");
+ elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
+ evas_object_hide(viewer_play_data->play_controller);
+ viewer_play_data->playcontroller_opened = FALSE;
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->play_controller_timer) {
+ ecore_timer_del(viewer_play_data->play_controller_timer);
+ viewer_play_data->play_controller_timer = NULL;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = NULL;
+
+ int page_count = 0;
+ int media_count = 0;
+ bool is_text_copied = FALSE;
+ int media_idx = 0;
+ char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+ FILE *fp = NULL;
+
+ eventStatus = (SMIL_SLIDE_CLIENT_CB_PARAM_S * )viewer_play_data->smil_eventStatus;
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page index is %d", eventStatus->pageIdx);
+
+ /*get page list info*/
+ msg_list_handle_t pagelist_info = NULL;
+ msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+ page_count = msg_list_length(pagelist_info);
+
+ msg_struct_t page_info = NULL;
+ page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, eventStatus->pageIdx);
+ if (!page_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
+ return;
+ }
+
+ msg_list_handle_t medialist_info = NULL;
+ msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+ media_count = msg_list_length(medialist_info);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", eventStatus->pageIdx, media_count);
+
+ for (media_idx = 0; media_idx < media_count; media_idx++) {
+ int mediaType;
+ msg_struct_t media_info = NULL;
+ media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
+
+ if (!media_info) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
+ continue;
+ }
+
+ msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+ if (mediaType != MMS_SMIL_MEDIA_TEXT) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media type is not TEXT", media_idx);
+ continue;
+ }
+
+ bzero(strFilePath, sizeof(strFilePath));
+ msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
+
+ //if text media is exist, get text and store it
+ fp = fopen(strFilePath, "r");
+ if (fp) {
+ char *pszPageText = NULL;
+ struct stat stat_buf;
+ if (stat(strFilePath, &stat_buf) != 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Getting file information Error");
+ fclose(fp);
+ return;
+ }
+
+ if (stat_buf.st_size > 0) {
+ pszPageText = (void *)calloc(1, (size_t)stat_buf.st_size + 1);
+
+ if (pszPageText == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+ fclose(fp);
+ return;
+ } else {
+ int result = fread(pszPageText, sizeof(char), stat_buf.st_size, fp);
+ if (result != stat_buf.st_size) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "fread is failed result : %d", result);
+ }
+ }
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pszPageText : (%s)", (char *)pszPageText);
+
+ if (pszPageText[0] != '\0') {
+ Evas_Object *entry = elm_entry_add(viewer_play_data->main_window);
+ elm_cnp_selection_set(entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, pszPageText, strlen(pszPageText));
+ evas_object_del(entry);
+ is_text_copied = TRUE;
+ }
+
+ /*free message text after displaying*/
+ if (pszPageText) {
+ free(pszPageText);
+ pszPageText = NULL;
+ }
+
+ fclose(fp);
+ break;
+ }
+
+ fclose(fp);
+ }
+ }
+
+ if (is_text_copied)
+ status_message_post(dgettext("sys_string", "IDS_COM_POP_COPIED_P"));
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ Evas_Object *popup = NULL;
+ Evas_Object *layout = NULL;
+ Evas_Object *bg = NULL;
+ Evas_Object *scroller = NULL;
+ Evas_Object *box = NULL;
+ Evas_Object *entry = NULL;
+ Evas_Object *btn_close = NULL;
+
+ /* create popup */
+ popup = elm_popup_add(viewer_play_data->main_window);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_style_set(popup, "menustyle");
+ elm_object_part_text_set(popup, "title,text", (char *)"Message details");
+
+ /* create layout */
+ layout = elm_layout_add(viewer_play_data->main_window);
+ elm_layout_file_set(layout, MSG_VIEWER_THEME, "msg/detail");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(layout);
+
+ /* create bg */
+ bg = evas_object_rectangle_add(evas_object_evas_get(layout));
+ elm_object_part_content_set(layout, "msg/detail/bg", bg);
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, 0.0);
+ evas_object_show(bg);
+
+ /* create scroller */
+ scroller = elm_scroller_add(layout);
+ evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_scroller_bounce_set(scroller, FALSE, TRUE);
+ elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+ elm_object_part_content_set(layout, "msg/detail/content", scroller);
+ evas_object_show(scroller);
+
+ /* create box */
+ box = elm_box_add(layout);
+ 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);
+ elm_box_homogeneous_set(box, EINA_FALSE);
+ evas_object_show(box);
+ evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT*4);
+ elm_object_content_set(scroller, box);
+
+ /*create entry */
+ entry = elm_entry_add(layout);
+ 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_single_line_set(entry, EINA_FALSE);
+ elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
+ elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+ elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
+ elm_entry_editable_set(entry, EINA_FALSE);
+ __msg_ui_viewer_make_details_text(viewer_play_data, entry);
+ elm_box_pack_end(box, entry);
+ evas_object_show(entry);
+
+ /* add close button */
+ btn_close = elm_button_add(popup);
+ elm_object_style_set(btn_close, "popup_button/default");
+ elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
+ elm_object_part_content_set(popup, "button1", btn_close);
+ evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_message_details_popup_close_clicked_cb, viewer_play_data);
+
+ viewer_play_data->popup = popup;
+ elm_object_content_set(popup, layout);
+
+ evas_object_show(popup);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object *entry)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+ int folder_id = MSG_MAX_FOLDER_ID;
+ msg_error_t err = MSG_SUCCESS;
+ int thread_id = 0;
+ char addr_value[MAX_ADDRESS_VAL_LEN] = {0,};
+ char name[MAX_DISPLAY_NAME_LEN]= {0,};
+ int contact_id = 0;
+ msg_struct_list_s addrList;
+
+ /**********************
+ * [ For sent/outbox msg]
+ * 1. Type:
+ * 2. To:
+ * 3. Sent time:
+ * 4. Subject:
+ * 5. Message size:
+ * 5. Delivery report: //TBD : FW for multistatus
+ * 6. Read report: //TBD : FW for multistatus
+ *
+ * [For inbox msg]
+ * 1. Type:
+ * 2. From:
+ * 3. To: //TBD : FW for multistatus
+ * 4. Received time:
+ * 5. Subject:
+ * 6. Message size:
+ **********************/
+
+ /*get msg info struct handle */
+ msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+ msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+ err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+ msg_release_struct(&msgInfo);
+ msg_release_struct(&sendOpt);
+ return;
+ }
+
+ /* create str buf */
+ Eina_Strbuf *text_data = eina_strbuf_new();
+
+ /* set font size */
+ eina_strbuf_append(text_data, "<font_size=32>");
+
+ /*message type*/
+ eina_strbuf_append(text_data, (char *)"Type : "); //TODO : change to string resource
+
+ /*message type value - current view details is supporting only multimedia message */
+ int msg_type;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msg_type);
+ if (msg_type == MSG_TYPE_MMS || msg_type == MSG_TYPE_MMS_NOTI)
+ eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"));
+ else if (msg_type == MSG_TYPE_SMS)
+ eina_strbuf_append(text_data, (char *)"Text message"); //TODO : change to string resource
+ else
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid msg type!");
+
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ /*get time format setting */
+ int timeformat = msg_common_get_timeformat();
+
+ /* get folder ID */
+ msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type
+
+ if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) {
+ int index = 0;
+ eina_strbuf_append(text_data, (char *)"To : " ); //TODO : change to string resource
+
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+ err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address count = %d", addrList.nCount);
+
+ for (index = 0; index<addrList.nCount; index++) {
+ bzero(name, sizeof(name));
+ bzero(addr_value, sizeof(addr_value));
+
+ msg_get_int_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
+ msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_DISPLAYNAME_STR, name, MAX_DISPLAY_NAME_LEN);
+ msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
+
+ if (name[0] != '\0') {
+ eina_strbuf_append(text_data, name);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+ eina_strbuf_append(text_data, addr_value);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
+ } else {
+ eina_strbuf_append(text_data, addr_value);
+ }
+ if (index != addrList.nCount-1)
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COMMA);
+ }
+
+ msg_release_list_struct(&addrList);
+
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ /*time*/
+ eina_strbuf_append(text_data, (char *)"Sent : "); //TODO : change to string resource
+ int dptime = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &dptime);
+
+ char *str_time = NULL;
+ if (timeformat == MSG_TIME_FORMAT_24H)
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM y", &dptime);
+ else
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM y", &dptime);
+ eina_strbuf_append(text_data, str_time);
+
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+ } else if (folder_id == MSG_INBOX_ID) {
+ int index = 0;
+
+ /*From address*/
+ eina_strbuf_append(text_data, (char *)"From : " ); //TODO : change to string resource
+
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+ err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address count = %d", addrList.nCount);
+
+ for (index = 0; index<addrList.nCount; index++) {
+ bzero(name, sizeof(name));
+ bzero(addr_value, sizeof(addr_value));
+
+ msg_get_int_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id);
+ msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_DISPLAYNAME_STR, name, MAX_DISPLAY_NAME_LEN);
+ msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
+
+ if (name[0] != '\0') {
+ eina_strbuf_append(text_data, name);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+ eina_strbuf_append(text_data, addr_value);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
+ } else {
+ eina_strbuf_append(text_data, addr_value);
+ }
+ if (index != addrList.nCount-1)
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COMMA);
+ }
+
+ msg_release_list_struct(&addrList);
+
+ /*To addess*/
+ //TODO : HOW to get??
+
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ /*time*/
+ eina_strbuf_append(text_data, (char *)"Received : "); //TODO : change to string resource
+ int dptime = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &dptime);
+
+ char *str_time = NULL;
+ if (timeformat == MSG_TIME_FORMAT_24H)
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM y", &dptime);
+ else
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM y", &dptime);
+ eina_strbuf_append(text_data, str_time);
+
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+ }
+
+ /*subject*/
+ eina_strbuf_append(text_data, (char *)"Subject : "); //TODO : change to string resource
+ char strSubject[MAX_SUBJECT_LEN] = {0};
+ msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
+ if (strSubject[0] != '\0')
+ eina_strbuf_append(text_data, strSubject);
+ else
+ eina_strbuf_append(text_data, (char *)"Untitled"); //TODO : change to string resource
+
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ /*msg size - make sure what is the mms size, pdu size? or media total size??*/
+ eina_strbuf_append(text_data, (char *)"Size : "); //TODO : change to string resource
+
+ int mediaindex = 0;
+ long long totalSize = 0;
+ long long sizeKB = 0;
+ long long sizeB = 0;
+ char count_str[DEF_BUF_LEN] = {0,};
+ int totalCnt = viewer_play_data->insert_count+viewer_play_data->attach_count;
+
+ for (mediaindex = 0; mediaindex<totalCnt; mediaindex++) {
+ MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+
+ if (mediaindex < viewer_play_data->insert_count) {
+ media_info = eina_list_nth(viewer_play_data->insert_list, mediaindex);
+ } else if (mediaindex < totalCnt) {
+ media_info = eina_list_nth(viewer_play_data->attach_list, mediaindex-viewer_play_data->insert_count);
+ } else {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", mediaindex);
+ continue;
+ }
+
+ totalSize += ecore_file_size(media_info->pfile_path);
+ }
+
+ if (totalSize < VIEWER_DETAILS_TEXT_MSG_SIZE_KB) {
+ snprintf(count_str, sizeof(count_str), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
+ } else {
+ sizeKB = (long long)totalSize/VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
+ sizeB = (long long)totalSize%VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
+
+ if (sizeB >= (VIEWER_DETAILS_TEXT_MSG_SIZE_KB/2))
+ sizeKB++;
+
+ snprintf(count_str, sizeof(count_str), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
+ }
+
+ eina_strbuf_append(text_data, count_str);
+
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ /*report status*/
+ if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) {
+ msg_struct_t msg_struct = msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT);
+ err = msg_get_mms_send_opt(viewer_play_data->msgHandle, msg_struct);
+
+ if (err != MSG_SUCCESS) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_mms_send_opt is failed");
+ eina_strbuf_free(text_data);
+ return;
+ }
+ /*delivery report*/
+ eina_strbuf_append(text_data, (char *)"Delivery report : "); //TODO : change to string resource
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ bool bValue = false;
+ err = msg_get_bool_value(msg_struct, MSG_MMS_SENDOPT_DELIVERY_REPORT_BOOL, &bValue);
+ if (!bValue) {
+ eina_strbuf_append(text_data, (char *)"Not required"); //TODO : change to string resource
+ } else {
+ //TODO : How to Get Multistatus delivery report?
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+ err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
+
+ bzero(addr_value, sizeof(addr_value));
+ msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
+
+ msg_release_list_struct(&addrList);
+
+ // now 1st address delivery status can be get only.
+ eina_strbuf_append(text_data, addr_value);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH);
+
+ msg_struct_t report_status = msg_create_struct(MSG_STRUCT_REPORT_STATUS_INFO);
+ int msgId = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId);
+ msg_get_report_status(viewer_play_data->msgHandle, msgId, report_status);
+
+ int deliveryStatus = 0;
+ msg_get_int_value(report_status, MSG_REPORT_STATUS_DELIVERY_STATUS_INT, &deliveryStatus);
+
+ if (deliveryStatus == MSG_DELIVERY_REPORT_NONE) {
+ eina_strbuf_append(text_data, (char *)"Requested"); //TODO : change to string resource
+ } else if (deliveryStatus == MSG_DELIVERY_REPORT_EXPIRED) {
+ eina_strbuf_append(text_data, (char *)"Expired"); //TODO : change to string resource
+ } else if (deliveryStatus == MSG_DELIVERY_REPORT_SUCCESS) {
+ eina_strbuf_append(text_data, (char *)"Received "); //TODO : change to string resource
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+
+ int dsTime = 0;
+ msg_get_int_value(report_status, MSG_REPORT_STATUS_DELIVERY_TIME_INT, &dsTime);
+ char *str_time = NULL;
+ if (timeformat == MSG_TIME_FORMAT_24H)
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &dsTime);
+ else
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &dsTime);
+ eina_strbuf_append(text_data, str_time);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
+ } else if (deliveryStatus == MSG_DELIVERY_REPORT_REJECTED) {
+ eina_strbuf_append(text_data, (char *)"Rejected "); //TODO : change to string resource
+ }
+
+ msg_release_struct(&report_status);
+ }
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ /*read reportt*/
+ eina_strbuf_append(text_data, (char *)"Read report : "); //TODO : change to string resource
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ err = msg_get_bool_value(msg_struct, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &bValue);
+ if (!bValue) {
+ eina_strbuf_append(text_data, (char *)"Not required"); //TODO : change to string resource
+ } else {
+ //TODO : How to Get Multistatus read report?
+ memset(&addrList, 0x00, sizeof(msg_struct_list_s));
+ msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
+ err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
+
+ bzero(addr_value, sizeof(addr_value));
+ msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
+
+ msg_release_list_struct(&addrList);
+
+ // now 1st address delivery status can be get only.
+ eina_strbuf_append(text_data, addr_value);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH);
+
+ msg_struct_t report_status = msg_create_struct(MSG_STRUCT_REPORT_STATUS_INFO);
+ int msgId = 0;
+ msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId);
+ msg_get_report_status(viewer_play_data->msgHandle, msgId, report_status);
+
+ int readStatus = 0;
+ msg_get_int_value(report_status, MSG_REPORT_STATUS_READ_STATUS_INT, &readStatus);
+
+ if (readStatus == MSG_READ_REPORT_NONE) {
+ eina_strbuf_append(text_data, (char *)"Requested "); //TODO : change to string resource
+ } else if (readStatus == MSG_READ_REPORT_IS_READ) {
+ eina_strbuf_append(text_data, (char *)"Read "); //TODO : change to string resource
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+
+ int rsTime = 0;
+ msg_get_int_value(report_status, MSG_REPORT_STATUS_READ_TIME_INT, &rsTime);
+
+ char *str_time = NULL;
+ if (timeformat == MSG_TIME_FORMAT_24H)
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &rsTime);
+ else
+ str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &rsTime);
+ eina_strbuf_append(text_data, str_time);
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+ } else if (readStatus == MSG_READ_REPORT_IS_DELETED) {
+ eina_strbuf_append(text_data, (char *)"Deleted "); //TODO : change to string resource
+ }
+
+ msg_release_struct(&report_status);
+ }
+ /*line change*/
+ eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+
+ msg_release_struct(&msg_struct);
+ }
+
+ /*display total text*/
+ elm_entry_entry_set(entry, eina_strbuf_string_get(text_data));
+ eina_strbuf_free(text_data);
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+ if (viewer_play_data->popup) {
+ evas_object_del(viewer_play_data->popup);
+ viewer_play_data->popup = NULL;
+ }
+}
diff --git a/viewer/src/msg-ui-viewer-utility.c b/viewer/src/msg-ui-viewer-utility.c
new file mode 100755
index 0000000..628e0f8
--- /dev/null
+++ b/viewer/src/msg-ui-viewer-utility.c
@@ -0,0 +1,369 @@
+/*
+ * 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-viewer-utility.h"
+#include <msg-ui-util.h>
+#include "contacts-svc.h"
+
+#include <ctype.h>
+#include <Ecore_File.h>
+
+/*==================================================================================================
+ * FUNCTION DECLARATIONS
+ *==================================================================================================*/
+static void __msg_viewer_util_get_color_code(int color_dec);
+
+/*==================================================================================================
+ * FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+/* Note: Caller should free returned string after using it*/
+char *msg_viewer_util_get_display_name_by_index(int index)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Label Contact Index [%d]", index);
+ CTSstruct *contact = NULL;
+ CTSvalue *name = NULL;
+ char *first = NULL;
+ char *last = NULL;
+ char *display = NULL;
+
+ contacts_svc_get_contact(index, &contact);
+ contacts_svc_struct_get_value(contact, CTS_CF_NAME_VALUE, &name);
+
+ first = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_FIRST_STR));
+ last = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_LAST_STR));
+
+ if (first != NULL && last != NULL) {
+ if (CTS_ORDER_NAME_FIRSTLAST == contacts_svc_get_order(CTS_ORDER_OF_DISPLAY)) {
+ display = g_strconcat(first, " ", last, NULL);
+ } else {
+ display = g_strconcat(last, " ", first, NULL);
+ }
+ } else if (first != NULL || last != NULL) {
+ display = (first != NULL) ? g_strdup(first) : g_strdup(last);
+ } else {
+ display = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_FIRST_STR));
+ }
+
+ g_free(first);
+ g_free(last);
+ contacts_svc_value_free(name);
+ contacts_svc_struct_free(contact);
+
+ return display;
+}
+
+MSG_BOOL msg_viewer_util_get_file_ext(const char *filepath, char *file_ext, int ext_len)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_ext == NULL, FALSE);
+ const char *filename = NULL;
+ char *pdot = NULL;
+
+ filename = (const char *)ecore_file_file_get(filepath);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filename == NULL, FALSE);
+
+ pdot = strrchr(filename, '.');
+
+ if (!pdot) {
+ return FALSE;
+ } else if (pdot != filepath) {
+ strncpy(file_ext, pdot + 1, ext_len);
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+int msg_viewer_util_get_next_number(char *file_name_without_ext)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_name_without_ext == NULL, MSG_VIEWER_INVALID_FILE_NUMBER);
+ int nCount = 0;
+ int nLength = 0;
+ int nUnderline = 0;
+ MSG_BOOL bAllDigits = TRUE;
+ int i = 0;
+
+ /* check _02d format */
+ nLength = strlen(file_name_without_ext);
+
+ for (nUnderline = nLength - 1 ; nUnderline >= 0 ; nUnderline--) {
+ if (file_name_without_ext[nUnderline] == '_') {
+ break;
+ }
+ }
+
+ if (nUnderline == 0 && file_name_without_ext[0] != '_') {
+ return MSG_VIEWER_DEFAULT_FILE_NUMBER; /*doesn't match*/
+ }
+
+ /* check the right characters are all digits */
+ for (i = nUnderline + 1 ; i < nLength ; i++) {
+ if (file_name_without_ext[i] < '0' || file_name_without_ext[i] > '9') {
+ bAllDigits = FALSE;
+ break;
+ }
+ }
+
+ if (bAllDigits) {
+ for (i = nUnderline + 1 ; i < nLength ; i++) {
+ nCount *= 10;
+ nCount += file_name_without_ext[i]-'0';
+ }
+ /* truncate the last '_dd' */
+ file_name_without_ext[nUnderline] = '\0';
+ }
+
+ /* increase nCount by 1*/
+ nCount++;
+
+ return nCount;
+}
+
+char hexa_data[MSG_VIEWER_COLOR_HEXA_BUFFER_LEN];
+char hexa_value[MSG_VIEWER_HEXA_SIZE] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+static void __msg_viewer_util_get_color_code(int color_dec)
+{
+ int col = color_dec;
+ int rem = 0;
+
+ memset(hexa_data, 0x00, sizeof(hexa_data));
+ rem = col % MSG_VIEWER_HEXA_SIZE;
+ col = col / MSG_VIEWER_HEXA_SIZE;
+ hexa_data[0] = hexa_value[col];
+ hexa_data[1] = hexa_value[rem];
+}
+
+void msg_viewer_util_get_color_as_string(char *szcolor, int szcolor_len, int r, int g, int b)
+{
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, szcolor == NULL);
+ MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, szcolor_len < MSG_VIEWER_RGB_COLOR_BUF);
+ char col_hex[MSG_VIEWER_RGB_COLOR_BUF] = {0x0,};
+ /* Get color*/
+ __msg_viewer_util_get_color_code(r);
+ col_hex[0] = hexa_data[0];
+ col_hex[1] = hexa_data[1];
+ __msg_viewer_util_get_color_code(g);
+ col_hex[2] = hexa_data[0];
+ col_hex[3] = hexa_data[1];
+ __msg_viewer_util_get_color_code(b);
+ col_hex[4] = hexa_data[0];
+ col_hex[5] = hexa_data[1];
+ col_hex[6] = '\0';
+
+ snprintf(szcolor, MSG_VIEWER_RGB_COLOR_BUF, "%s", col_hex);
+}
+
+MSG_BOOL msg_viewer_util_get_default_path(char *dir_path, int dir_path_len)
+{
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dir_path == NULL, FALSE);
+
+ if (ecore_file_is_dir(MSG_VIEWER_DOWNLOAD_PATH) == EINA_FALSE) {
+ if (ecore_file_mkdir(MSG_VIEWER_DOWNLOAD_PATH) == EINA_FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_file_mkdir is failed");
+ snprintf(dir_path, dir_path_len, "%s", MSG_VIEWER_CONTENT_PATH);
+ } else {
+ snprintf(dir_path, dir_path_len, "%s", MSG_VIEWER_DOWNLOAD_PATH);
+ }
+ } else {
+ snprintf(dir_path, dir_path_len, "%s", MSG_VIEWER_DOWNLOAD_PATH);
+ }
+
+ return TRUE;
+}
+
+unsigned char *msg_ui_viewer_get_buffer_from_file(const char *filepath, const char *opt, unsigned int *buffer_size)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, buffer_size == NULL, NULL);
+
+ *buffer_size = 0;
+ FILE *pFile = NULL;
+
+ pFile = fopen(filepath, opt);
+ if (pFile == NULL) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File Open Error");
+ return NULL;
+ }
+
+ if (fseek(pFile, 0, SEEK_END) < 0) {
+ fclose(pFile);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File fseek Error: ");
+ return NULL;
+ }
+
+ int file_size = ftell(pFile);
+
+ if (file_size <= 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Filesize is error : %d", file_size);
+ fclose(pFile);
+ return NULL;
+ }
+
+ unsigned char *buffer = NULL;
+
+ buffer = (unsigned char *)malloc(file_size);
+
+ if (fseek(pFile, 0, SEEK_SET) < 0) {
+ fclose(pFile);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File seek Error");
+ return NULL;
+ }
+ if (fread(buffer, sizeof(char), file_size, pFile) != (size_t)file_size) {
+ fclose(pFile);
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File Read Error");
+ return NULL;
+ }
+
+ *buffer_size = file_size;
+ fclose(pFile);
+
+ return buffer;
+}
+
+char *msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src_path == NULL, NULL);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dst_path == NULL, NULL);
+ char file_ext[MSG_VIEWER_FILE_EXT_MAX_LEN + 1] = {0};
+ char file_name_without_ext[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
+ char new_file_name[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
+ MSG_BOOL result = FALSE;
+ int ncount = 0;
+ Eina_Bool is_exists = FALSE;
+
+ snprintf(new_file_name, sizeof(new_file_name), "%s", dst_path);
+
+ /*check for same file*/
+ is_exists = ecore_file_exists(new_file_name);
+ if (is_exists == EINA_TRUE) {
+ strncpy(file_name_without_ext, dst_path, MSG_VIEWER_FILENAME_MAX_LEN);
+ result = msg_viewer_util_get_file_ext(dst_path, file_ext, MSG_VIEWER_FILE_EXT_MAX_LEN);
+ if (result)
+ file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0';
+
+ ncount = MSG_VIEWER_DEFAULT_FILE_NUMBER;
+ memset(new_file_name, 0x00, sizeof(new_file_name));
+
+ /*make new filename*/
+ do {
+ if (strlen(file_ext) > 0)
+ snprintf(new_file_name, sizeof(new_file_name), "%s_%02d.%s", file_name_without_ext, ncount, file_ext);
+ else
+ snprintf(new_file_name, sizeof(new_file_name), "%s_%02d", file_name_without_ext, ncount);
+ /*check for same file*/
+ is_exists = ecore_file_exists(new_file_name);
+ if (is_exists == EINA_TRUE) {
+ memset(new_file_name, 0x00, sizeof(new_file_name));
+ ncount++;
+ } else {
+ break;
+ }
+ } while (is_exists);
+ }
+
+ if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_file_cp is failed");
+ return NULL;
+ }
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "new_file_name = %s", new_file_name);
+
+ return strdup(new_file_name);
+}
+
+char *msg_ui_viewer_util_create_working_dir(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/viewer_%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;
+}
+
+MSG_BOOL msg_ui_viewer_auto_rename(char *src_path, char *dst_path)
+{
+ MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src_path == NULL, FALSE);
+ MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dst_path == NULL, FALSE);
+ char file_ext[MSG_VIEWER_FILE_EXT_MAX_LEN + 1] = {0};
+ char file_name_without_ext[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
+ char new_file_name[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
+ MSG_BOOL result = FALSE;
+ int ncount = 0;
+
+ strncpy(file_name_without_ext, dst_path, MSG_VIEWER_FILENAME_MAX_LEN);
+ result = msg_viewer_util_get_file_ext(dst_path, file_ext, MSG_VIEWER_FILE_EXT_MAX_LEN);
+ if (result)
+ file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0';
+ ncount = msg_viewer_util_get_next_number(file_name_without_ext);
+ if (ncount < 0) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid filename");
+ return FALSE;
+ } else {
+ /*find new filename*/
+ Eina_Bool is_exists = FALSE;
+ do {
+ if (strlen(file_ext) > 0)
+ snprintf(new_file_name, sizeof(new_file_name), "%s_%d.%s", file_name_without_ext, ncount, file_ext);
+ else
+ snprintf(new_file_name, sizeof(new_file_name), "%s_%d", file_name_without_ext, ncount);
+ /*check for same file*/
+ is_exists = ecore_file_exists(new_file_name);
+ if (is_exists == EINA_TRUE) {
+ memset(new_file_name, 0x00, sizeof(new_file_name));
+ ncount++;
+ } else {
+ break;
+ }
+ } while (is_exists);
+
+ if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE)
+ return FALSE;
+ }
+
+ MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+ return TRUE;
+}
diff --git a/viewer/theme/msg_viewer.edc b/viewer/theme/msg_viewer.edc
new file mode 100755
index 0000000..956e5dd
--- /dev/null
+++ b/viewer/theme/msg_viewer.edc
@@ -0,0 +1,1051 @@
+#define MAIN_W 720
+#define BODY_TOP_PADDING_MIN_H 34
+#define SUBJECT_MIN_H 48
+#define COLOR_SUBJECT_BG 216 226 232 255
+#define COLOR_DETAIL_INFO_TEXT 108 168 199 255
+#define COLOR_PROGRESS_START_TEXT 255 255 255 255
+#define COLOR_PROGRESS_END_TEXT 142 142 142 255
+
+//play controllbar attributes
+#define PLAY_CTRBAR_MIN_H 218
+#define PLAY_CTRBAR_TOP_PADDING_MIN_H 48
+#define PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H 28
+#define PLAY_CTRBAR_MIDDLE_PADDING_MIN_H 54
+#define PLAY_CTRBAR_BOTTOM_PADDING_MIN_H 32
+#define PLAY_CTRBAR_PROGRESS_BAR_W 482
+#define PLAY_CTRBAR_PROGRESS_TEXT_START_X 20
+#define PLAY_CTRBAR_PROGRESS_TEXT_W 79
+#define PLAY_CTRBAR_PROGRESS_PADDING_W 22
+#define PLAY_CTRBAR_BUTTON_W 56
+#define PLAY_CTRBAR_BUTTON_PADDING_W 88
+#define PLAY_CTRBAR_BUTTON_VOLUME_START_X 44
+#define PLAY_CTRBAR_BUTTON_PREV_START_X (PLAY_CTRBAR_BUTTON_VOLUME_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W)
+#define PLAY_CTRBAR_BUTTON_PLAY_START_X (PLAY_CTRBAR_BUTTON_PREV_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W)
+#define PLAY_CTRBAR_BUTTON_NEXT_START_X (PLAY_CTRBAR_BUTTON_PLAY_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W)
+
+//msg details popup
+#define DETAIL_PADDING_V_MIN 30
+#define DETAIL_PADDING_H_MIN 20
+
+//edc images
+#define PLAYER_BG "M01_player_bg.png"
+#define VOL_BTN "M01_play_btn_volume.png"
+#define VOL_BTN_PRESS "M01_play_btn_volume_press.png"
+#define PREV_BTN "M01_play_btn_previous.png"
+#define PREV_BTN_PRESS "M01_play_btn_previous_press.png"
+#define PLAY_BTN "M01_play_btn_play.png"
+#define PLAY_BTN_PRESS "M01_play_btn_play_press.png"
+#define PAUSE_BTN "M01_play_btn_pause.png"
+#define PAUSE_BTN_PRESS "M01_play_btn_pause_press.png"
+#define NEXT_BTN "M01_play_btn_next.png"
+#define NEXT_BTN_PRESS "M01_play_btn_next_press.png"
+#define PROGRESS_BAR "M01_player_progress_bar.png"
+#define PROGRESS_BG "M01_player_progress_bg.png"
+
+collections {
+ group {
+ name: "play_controller";
+ images {
+ image: PLAYER_BG COMP;
+ image: VOL_BTN COMP;
+ image: VOL_BTN_PRESS COMP;
+ image: PREV_BTN COMP;
+ image: PREV_BTN_PRESS COMP;
+ image: PLAY_BTN COMP;
+ image: PLAY_BTN_PRESS COMP;
+ image: PAUSE_BTN COMP;
+ image: PAUSE_BTN_PRESS COMP;
+ image: NEXT_BTN COMP;
+ image: NEXT_BTN_PRESS COMP;
+ }
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 PLAY_CTRBAR_MIN_H;
+ }
+ }
+ part {
+ name: "rect/bg";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1{to:"rect"; relative:0.0 0.0;}
+ rel2{to:"rect"; relative:1.0 1.0;}
+ image { normal: PLAYER_BG; }
+ }
+ }
+ part {
+ name: "rect/padding/top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 PLAY_CTRBAR_TOP_PADDING_MIN_H;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1{to:"rect"; relative:0.0 0.0;}
+ rel2{to:"rect"; relative:1.0 0.0;}
+ }
+ }
+ part {
+ name: "rect/padding/progressbar";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1{to:"rect/padding/top"; relative:0.0 1.0;}
+ rel2{to:"rect/padding/top"; relative:1.0 1.0;}
+ }
+ }
+ part {
+ name: "progress/start/time";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H;
+ align: 0.5 0.5;
+ fixed: 1 1;
+ rel1{to:"rect/padding/progressbar"; relative:0.0 0.0; offset: PLAY_CTRBAR_PROGRESS_TEXT_START_X 0;}
+ rel2{to:"progressbar"; relative:0.0 1.0; offset: -PLAY_CTRBAR_PROGRESS_PADDING_W 0;}
+ color: COLOR_PROGRESS_START_TEXT;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: 28;
+ align: 0.5 0.5;
+ ellipsis: 0.0;
+ text: "";
+ }
+ }
+ }
+ part {
+ name: "progressbar";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1{to:"rect/padding/progressbar"; relative:((MAIN_W-PLAY_CTRBAR_PROGRESS_BAR_W)/2)/MAIN_W 0.0;}
+ rel2{to:"rect/padding/progressbar"; relative:(((MAIN_W-PLAY_CTRBAR_PROGRESS_BAR_W)/2)+PLAY_CTRBAR_PROGRESS_BAR_W)/MAIN_W 0.0;}
+ }
+ }
+ part {
+ name: "progress/end/time";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H;
+ align: 0.5 0.5;
+ fixed: 1 1;
+ rel1{to:"progressbar"; relative:1.0 0.0; offset: PLAY_CTRBAR_PROGRESS_PADDING_W 0;}
+ rel2{to:"rect/padding/progressbar"; relative:1.0 1.0; offset: -PLAY_CTRBAR_PROGRESS_PADDING_W 0;}
+ color: COLOR_PROGRESS_END_TEXT;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: 28;
+ align: 0.5 0.5;
+ ellipsis: 0.0;
+ text: "";
+ }
+ }
+ }
+ part {
+ name: "rect/padding/middle";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 PLAY_CTRBAR_MIDDLE_PADDING_MIN_H;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1{to:"rect/padding/progressbar"; relative:0.0 1.0;}
+ rel2{to:"rect/padding/progressbar"; relative:1.0 1.0;}
+ }
+ }
+ part {
+ name: "rect/padding/buttons";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ rel1{to:"rect/padding/middle"; relative:0.0 1.0;}
+ rel2{to:"rect/padding/bottom"; relative:1.0 0.0;}
+ }
+ }
+ part {
+ name: "rect/padding/bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 PLAY_CTRBAR_BOTTOM_PADDING_MIN_H;
+ align: 0.0 1.0;
+ fixed: 1 1;
+ rel1{to:"rect"; relative:0.0 1.0;}
+ rel2{to:"rect"; relative:1.0 1.0;}
+ }
+ }
+ part {
+ name: "volume";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 56 56;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
+ rel2 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+ image { normal: VOL_BTN; }
+
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image { normal: VOL_BTN_PRESS; }
+ }
+ }
+ part {
+ name: "rect/divide/line";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 1 56;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1{to:"volume"; relative:1.0 0.0; offset: 35 0;}
+ rel2{to:"volume"; relative:1.0 1.0; offset: 35 0;}
+ color: 144 144 144 255;
+ }
+ }
+ part { name: "prev";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 56 56;
+ fixed: 1 1;
+ rel1 { relative: PLAY_CTRBAR_BUTTON_PREV_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
+ rel2 { relative: PLAY_CTRBAR_BUTTON_PREV_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+ image { normal: PREV_BTN; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image { normal: PREV_BTN_PRESS; }
+ }
+ }
+ part { name: "next";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 56 56;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: PLAY_CTRBAR_BUTTON_NEXT_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
+ rel2 { relative: PLAY_CTRBAR_BUTTON_NEXT_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+ image { normal: NEXT_BTN; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image { normal: NEXT_BTN_PRESS; }
+ }
+ }
+ part { name: "play_pause";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 56 56;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: PLAY_CTRBAR_BUTTON_PLAY_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
+ rel2 { relative: PLAY_CTRBAR_BUTTON_PLAY_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+ image { normal: PLAY_BTN; }
+ }
+ description { state: "default" 1.0;
+ inherit: "default" 0.0;
+ image { normal: PAUSE_BTN; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image { normal: PLAY_BTN_PRESS; }
+ }
+ description { state: "pressed" 1.0;
+ inherit: "default" 0.0;
+ image { normal: PAUSE_BTN_PRESS; }
+ }
+ }
+ programs {
+ program {
+ name: "vol_btn_click";
+ source: "volume";
+ signal: "mouse,clicked,1";
+ script {
+ emit ("volume_clicked", "");
+ }
+ }
+ program {
+ name: "vol_btn_down";
+ source: "volume";
+ signal: "mouse,down,1";
+ script {
+ set_state(PART:"volume", "pressed", 0.0);
+ }
+ }
+ program {
+ name: "vol_btn_up";
+ source: "volume";
+ signal: "mouse,up,1";
+ script {
+ set_state(PART:"volume", "default", 0.0);
+ }
+ }
+ program {
+ name: "prev_btn_click";
+ source: "prev";
+ signal: "mouse,clicked,1";
+ script {
+ emit ("prev_clicked", "");
+ }
+ }
+ program {
+ name: "prev_btn_down";
+ source: "prev";
+ signal: "mouse,down,1";
+ script {
+ set_state(PART:"prev", "pressed", 0.0);
+ }
+ }
+ program {
+ name: "prev_btn_up";
+ source: "prev";
+ signal: "mouse,up,1";
+ script {
+ set_state(PART:"prev", "default", 0.0);
+ }
+ }
+ program {
+ name: "play_btn_click";
+ source: "play_pause";
+ signal: "mouse,clicked,1";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"play_pause", st, 30, vl)
+ if(vl == 0.0)
+ emit ("play_clicked", "");
+ else
+ emit ("pause_clicked", "");
+ }
+ }
+ program {
+ name: "play_btn_down";
+ source: "play_pause";
+ signal: "mouse,down,1";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"play_pause", st, 30, vl)
+ if(vl == 0.0)
+ set_state(PART:"play_pause", "pressed", 0.0);
+ else
+ set_state(PART:"play_pause", "pressed", 1.0);
+ }
+ }
+ program {
+ name: "play_btn_up";
+ source: "play_pause";
+ signal: "mouse,up,1";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"play_pause", st, 30, vl)
+ if(vl == 0.0)
+ set_state(PART:"play_pause", "default", 0.0);
+ else
+ set_state(PART:"play_pause", "default", 1.0);
+ }
+ }
+ program {
+ name: "play_btn_play";
+ source: "*";
+ signal: "play";
+ script {
+ set_state(PART:"play_pause", "default", 0.0);
+ }
+ }
+ program {
+ name: "play_btn_pause";
+ source: "*";
+ signal: "pause";
+ script {
+ set_state(PART:"play_pause", "default", 1.0);
+ }
+ }
+ program {
+ name: "next_btn_click";
+ source: "next";
+ signal: "mouse,clicked,1";
+ script {
+ emit ("next_clicked", "");
+ }
+ }
+ program {
+ name: "next_btn_down";
+ source: "next";
+ signal: "mouse,down,1";
+ script {
+ set_state(PART:"next", "pressed", 0.0);
+ }
+ }
+ program {
+ name: "next_btn_up";
+ source: "next";
+ signal: "mouse,up,1";
+ script {
+ set_state(PART:"next", "default", 0.0);
+ }
+ }
+ }
+ }
+ }
+ group {
+ name: "elm/progressbar/horizontal/list_progress";
+ images {
+ image: PROGRESS_BAR COMP;
+ image: PROGRESS_BG COMP;
+ }
+ parts {
+ part {
+ name: "elm.padding.left";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ offset: 0 0;
+ }
+ color: 0 0 0 0;
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "elm.padding.right";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ }
+ color: 0 0 0 0;
+ align: 1.0 0.0;
+ }
+ }
+ part {
+ name: "elm.background.progressbar";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to_x: "elm.padding.left";
+ relative: 1.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ to_x: "elm.padding.right";
+ relative: 0.0 1.0;
+ offset: 0 0;
+ }
+ }
+ }
+ part {
+ name: "elm.swallow.bar";
+ mouse_events: 0;
+ scale: 1;
+ type: SWALLOW;
+ description {
+ min: 1 7;
+ max: 99999 7;
+ state: "default" 0.0;
+ rel1 {
+ to: "elm.background.progressbar";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "elm.background.progressbar";
+ relative: 1.0 1.0;
+ }
+ }
+ }
+ part {
+ name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {
+ offset: 0 0;
+ to_y: "elm.background.progressbar";
+ }
+ rel2 {
+ offset: 0 -1;
+ relative: 0.0 1.0;
+ to_y: "elm.background.progressbar";
+ }
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ rel2.offset: 4 -1;
+ }
+ }
+ part {
+ name: "background";
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.background.progressbar";
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "elm.swallow.bar";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "elm.swallow.bar";
+ relative: 1.0 1.0;
+ }
+ image {
+ normal: PROGRESS_BG;
+ //border: 0 0 1 1;
+ }
+ }
+ }
+ part {
+ name: "elm.progress.progressbar";
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.background.progressbar";
+ description {
+ state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 1;
+ rel1 {
+ to: "elm.swallow.bar";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to_y: "elm.swallow.bar";
+ to_x: "elm.cur.progressbar";
+ offset: -1 -1;
+ }
+ image {
+ normal: PROGRESS_BAR;
+ //border: 0 0 1 1;
+ }
+ }
+ description {
+ state: "invert" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ to_y: "elm.swallow.bar";
+ to_x: "elm.cur.progressbar";
+ }
+ rel2 {
+ to: "elm.swallow.bar";
+ relative: 1.0 1.0;
+ }
+ }
+ description {
+ state: "state_begin" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ to: "elm.swallow.bar";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "elm.swallow.bar";
+ relative: 0.1 1.0;
+ }
+ }
+ description {
+ state: "state_end" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ to: "elm.swallow.bar";
+ relative: 0.9 0.0;
+ }
+ rel2 {
+ to: "elm.swallow.bar";
+ relative: 1.0 1.0;
+ }
+ }
+ }
+ part {
+ name: "elm.cur.progressbar";
+ mouse_events: 0;
+ scale: 1;
+ dragable {
+ confine: "background";
+ x: 1 1 1;
+ y: 0 0 0;
+ }
+ description {
+ state: "default" 0.0;
+ min: 0 28;
+ fixed: 1 1;
+ visible: 0;
+ rel1 {
+ to: "background";
+ relative: 0 0;
+ }
+ rel2.to: "background";
+ }
+ }
+ part {
+ name: "progress-rect";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1.to: "elm.progress.progressbar";
+ rel2.to: "elm.progress.progressbar";
+ }
+ }
+ }
+ }
+
+ group {
+ name: "subject/pageindex";
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 SUBJECT_MIN_H;
+ color: COLOR_SUBJECT_BG;
+ }
+ }
+ part {
+ name: "subject";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1{to:"rect"; relative:0.0 0.0; offset: DETAIL_PADDING_H_MIN 0; }
+ rel2{to:"rect"; relative:0.8 1.0;}
+ align: 0.0 0.5;
+ color: COLOR_DETAIL_INFO_TEXT;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: 32;
+ align: 0.0 0.5;
+ ellipsis: 0.0;
+ text: "";
+ }
+ }
+ }
+ part {
+ name: "page/index";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ align: 1.0 0.5;
+ rel1{to:"rect"; relative:0.8 0.0;}
+ rel2{to:"rect"; relative:1.0 1.0; offset: -DETAIL_PADDING_H_MIN 0;}
+ color: COLOR_DETAIL_INFO_TEXT;
+ text {
+ font: SLP_FONT_REGULAR;
+ text_class: FONT_TEXT_CLASS_REGULAR;
+ size: 32;
+ align: 1.0 0.5;
+ ellipsis: 0.0;
+ text: "";
+ }
+ }
+ }
+ }
+ }
+
+ group {
+ name : "viewer_main";
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "viewer.body.bg";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ rel1{to: "rect"; relative: 0.0 0.0;}
+ rel2{to: "rect"; relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "viewer.swallow.subject";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 SUBJECT_MIN_H;
+ fixed: 0 1;
+ align: 0.0 0.0;
+ rel1 {to: "rect"; relative:0.0 0.0;}
+ rel2 {to: "rect"; relative:1.0 0.0;}
+ }
+ }
+ part {
+ name: "viewer.body";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 0 0;
+ color: 0 0 0 0;
+ rel1 {to: "viewer.swallow.subject"; relative: 0.02 1.0; offset: 0 BODY_TOP_PADDING_MIN_H;}
+ rel2 {to: "rect"; relative: 0.98 1.0;}
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "viewer.body.content";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ min:0 0;
+ color: 0 0 0 0;
+ rel1 {to: "viewer.swallow.subject"; relative: 0.02 0.0;}
+ rel2 {to: "rect"; relative: 0.98 1.0;}
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "viewer.swallow.play.controller";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 PLAY_CTRBAR_MIN_H;
+ visible: 1;
+ fixed: 0 1;
+ align: 0.5 1.0;
+ rel1 {to: "rect"; relative:0.0 1.0;}
+ rel2 {to: "rect"; relative:1.0 1.0;}
+ }
+ }
+ part {
+ name:"viewer.titlebtn.list";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ min: 0 1;
+ rel1 {to: "rect"; relative: 0.0 0.0;}
+ rel2 {to: "rect"; relative: 1.0 0.0;}
+ align: 0.0 0.0;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ }
+ }
+ programs
+ {
+ program {
+ name: "viewer.titlebtn.list.open";
+ signal: "elm,state,titlelist,open";
+ source: "";
+ action: STATE_SET "show" 0.0;
+ target: "viewer.titlebtn.list";
+ transition: LINEAR 0.2;
+ }
+ program {
+ name: "viewer.titlebtn.list.close";
+ signal: "elm,state,titlelist,close";
+ source: "";
+ action: STATE_SET "hide" 0.0;
+ target: "viewer.titlebtn.list";
+ transition: LINEAR 0.2;
+ }
+ }
+ }
+ }
+
+ group {
+ name : "msg/detail";
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "msg/detail/bg";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ rel1{to: "rect"; relative: 0.0 0.0;}
+ rel2{to: "rect"; relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "rect/padding/top";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 DETAIL_PADDING_V_MIN;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1{to:"rect"; relative:0.0 0.0;}
+ rel2{to:"rect"; relative:1.0 0.0;}
+ }
+ }
+ part {
+ name: "rect/padding/left";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: DETAIL_PADDING_H_MIN 0;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1{to:"rect"; relative:0.0 0.0;}
+ rel2{to:"rect"; relative:0.0 1.0;}
+ }
+ }
+ part {
+ name: "rect/padding/right";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: DETAIL_PADDING_H_MIN 0;
+ align: 1.0 0.0;
+ fixed: 1 1;
+ rel1{to:"rect"; relative:1.0 0.0;}
+ rel2{to:"rect"; relative:1.0 1.0;}
+ }
+ }
+ part {
+ name: "rect/padding/bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 DETAIL_PADDING_V_MIN;
+ align: 0.0 1.0;
+ fixed: 1 1;
+ rel1{to:"rect"; relative:0.0 1.0;}
+ rel2{to:"rect"; relative:1.0 1.0;}
+ }
+ }
+ part {
+ name: "msg/detail/content";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 0;
+ min: 0 0;
+ color: 0 0 0 0;
+ rel1 {relative: 1.0 1.0; to_x: "rect/padding/left"; to_y: "rect/padding/top";}
+ rel2 {relative: 0.0 0.0; to_x: "rect/padding/right"; to_y: "rect/padding/bottom";}
+ align: 0.0 0.0;
+ }
+ }
+ }
+ }
+
+ group {
+ name : "item_list";
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "viewer.itemlist.body";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ rel1 {to: "rect"; relative: 0.0 0.0;}
+ rel2 {to: "rect"; relative: 1.0 1.0;}
+ }
+ }
+ }
+ }
+
+ group {
+ name : "title";
+ images {
+ image: "optionheader_arrow.png" COMP;
+ }
+ script {
+ public title_show = 0;
+ }
+ parts {
+ part {
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "title_btn";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 0 78;
+ align: 0 0.5;
+ color: 255 0 0 255;
+ rel1{to: "rect"; relative: 0.0 0.5;}
+ rel2{to: "rect"; relative: 1.0 0.5;}
+ }
+ }
+ part {
+ name: "titlebtn_arrow";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 28 24;
+ max: 28 24;
+ fixed: 1 1;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 0.89; to_x: "title_btn"; }
+ rel2 { relative: 1.0 0.89; to_x: "title_btn"; }
+ image.normal: "optionheader_arrow.png";
+ color: 255 255 255 0;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "title_show";
+ signal: "elm,state,title,show";
+ source: "";
+ script {
+ set_int(title_show, 1);
+ set_state(PART:"titlebtn_arrow", "show", 0.0);
+ }
+ }
+ program {
+ name: "title_hide";
+ signal: "elm,state,title,hide";
+ source: "";
+ script {
+ set_int(title_show, 0);
+ set_state(PART:"titlebtn_arrow", "default", 0.0);
+ }
+ }
+ }
+ }
+