From 61d887669565c965aa743e90cf921c65d59f1d52 Mon Sep 17 00:00:00 2001 From: Jungmin Kim Date: Tue, 21 Aug 2012 17:39:12 +0900 Subject: [PATCH] Make TIZEN 2.0 --- call-engine/core/include/vc-core-callagent.h | 13 +- call-engine/core/include/vc-core-callmanager.h | 15 +- call-engine/core/include/vc-core-ecc.h | 41 + call-engine/core/include/vc-core-engine-group.h | 2 +- call-engine/core/include/vc-core-engine-status.h | 20 + call-engine/core/include/vc-core-engine-types.h | 7 +- call-engine/core/include/vc-core-engine.h | 34 +- call-engine/core/include/vc-core-tapi-evnt.h | 17 +- call-engine/core/include/vc-core-util.h | 123 +- call-engine/core/vc-core-callagent.c | 5 +- call-engine/core/vc-core-callmanager.c | 6 +- call-engine/core/vc-core-ecc.c | 207 + call-engine/core/vc-core-engine-status.c | 27 +- call-engine/core/vc-core-engine.c | 1596 ++- call-engine/core/vc-core-svcall.c | 1 - call-engine/core/vc-core-tapi-evnt.c | 183 +- call-engine/core/vc-core-tapi-rqst.c | 134 +- call-engine/core/vc-core-util.c | 578 +- call-engine/include/voice-call-core.h | 219 +- call-engine/include/voice-call-dbus.h | 4 +- call-engine/include/voice-call-device.h | 23 - call-engine/include/voice-call-engine-msg.h | 29 +- call-engine/include/voice-call-engine.h | 78 +- call-engine/include/voice-call-service.h | 22 + call-engine/include/voice-call-sound.h | 69 +- call-engine/voice-call-bt.c | 248 +- call-engine/voice-call-core.c | 664 +- call-engine/voice-call-dbus.c | 62 +- call-engine/voice-call-device.c | 251 +- call-engine/voice-call-engine.c | 234 +- call-engine/voice-call-service.c | 320 +- call-engine/voice-call-sound.c | 781 +- debian/README | 6 - debian/changelog | 9 - debian/compat | 1 - debian/control | 42 - debian/copyright | 0 debian/dirs | 2 - debian/docs | 2 - debian/org.tizen.call.install.in | 4 - debian/org.tizen.call.postinst | 12 - debian/rules | 154 - packaging/org.tizen.call.spec | 38 +- ui/CMakeLists.txt | 69 +- ui/call_edc/vcui-view-button-layout.edc | 260 + ui/call_edc/vcui-view-caller-info.edc | 233 + ui/call_edc/vcui-view-dialing.edc | 124 +- ui/call_edc/vcui-view-end-conf-call.edc | 57 +- ui/call_edc/vcui-view-end-single-call.edc | 152 +- ui/call_edc/vcui-view-incoming-lock.edc | 426 +- ui/call_edc/vcui-view-incoming.edc | 177 - ui/call_edc/vcui-view-keypad.edc | 363 +- ui/call_edc/vcui-view-landscape-quick-pannel.edc | 122 + ui/call_edc/vcui-view-multi-call-conf.edc | 137 +- ui/call_edc/vcui-view-multi-call-list.edc | 41 +- ui/call_edc/vcui-view-multi-call-split.edc | 616 +- ui/call_edc/vcui-view-naviframe.edc | 26 +- ui/call_edc/vcui-view-quick-pannel.edc | 133 + ui/call_edc/vcui-view-reject.edc | 72 + ui/call_edc/vcui-view-single-call.edc | 210 +- ui/call_edc/vcui-view-ug-effect.edc | 1 - ui/call_edc/vcui-view-volume-popup.edc | 1 - ui/call_edc/voice-call-ui.edc | 38 +- ui/images/hd/icon/vc_call_bg_img.png | Bin 0 -> 92521 bytes ui/images/hd/icon/vc_call_not_saved_bg_img.png | Bin 0 -> 60603 bytes ui/images/hd/icon/vc_caller_ID_default.png | Bin 0 -> 12473 bytes ui/images/hd/icon/vc_caller_ID_split.png | Bin 0 -> 14200 bytes ui/images/hd/icon/vc_caller_ID_split_group.png | Bin 0 -> 18834 bytes ui/images/hd/icon/vc_caller_info_icon.png | Bin 0 -> 4137 bytes ui/images/hd/icon/vc_icon_conf_list_hold.png | Bin 245 -> 0 bytes ui/images/hd/icon/vc_icon_conf_list_unhold.png | Bin 443 -> 0 bytes .../hd/icon/vc_icon_hold_call.png} | Bin 2788 -> 2860 bytes ui/images/hd/icon/vc_icon_swap_call.png | Bin 0 -> 2918 bytes ui/images/hd/icon/vc_icon_unhold.png | Bin 3675 -> 0 bytes ui/images/hd/icon/vc_icon_unhold_call.png | Bin 0 -> 3319 bytes ui/images/hd/icon/vc_icon_unhold_dim.png | Bin 3655 -> 0 bytes ui/images/hd/icon/vc_more_add_call.png | Bin 0 -> 3008 bytes ui/images/hd/icon/vc_more_contacts.png | Bin 0 -> 3371 bytes ui/images/hd/icon/vc_more_join.png | Bin 0 -> 3415 bytes ui/images/hd/icon/vc_more_manage_conf.png | Bin 0 -> 836 bytes ui/images/hd/icon/vc_mute_on_icon.png | Bin 0 -> 5425 bytes ui/images/hd/icon/vc_normal_caller_ID_group.png | Bin 68777 -> 11808 bytes .../{vc_btn_more.png => vc_notify_missed_call.png} | Bin 4287 -> 4343 bytes ..._icon_dim.png => vc_notify_sub_missed_call.png} | Bin 3648 -> 4642 bytes ui/images/hd/icon/vc_outgoingcall_No_caller_ID.png | Bin 0 -> 69936 bytes ui/images/hd/icon/vc_qp_caller_ID.png | Bin 2772 -> 5874 bytes ui/images/hd/icon/vc_qp_caller_ID_group.png | Bin 3949 -> 7290 bytes ui/images/hd/icon/vc_qp_mute_on.png | Bin 0 -> 3710 bytes ui/images/hd/icon/vc_rcs_share_icon.png | Bin 3580 -> 0 bytes ui/images/hd/icon/vc_record_icon.png | Bin 3538 -> 0 bytes ui/images/hd/icon/vc_record_icon_dim.png | Bin 3530 -> 0 bytes .../hd/icon/vc_reject_back_icon.png} | Bin .../hd/icon/vc_reject_create_icon.png} | Bin 3048 -> 3064 bytes ui/images/hd/keypad/vc_keypad_btn_icon-1.png | Bin 3875 -> 0 bytes ui/images/hd/keypad/vc_keypad_btn_normal-1.png | Bin 3392 -> 0 bytes ui/images/hd/keypad/vc_keypad_btn_normal.png | Bin 3329 -> 0 bytes ui/images/hd/keypad/vc_keypad_btn_press-1.png | Bin 3270 -> 0 bytes ui/images/hd/keypad/vc_keypad_btn_press.png | Bin 3320 -> 0 bytes ui/images/hd/{keypad => }/vc_keypad_btn_icon.png | Bin ui/images/hd/vc_keypad_btn_normal.png | Bin 0 -> 972 bytes ui/images/hd/vc_keypad_btn_press.png | Bin 0 -> 9447 bytes ui/images/hd/vc_lock_accept_icon.png | Bin 1276 -> 0 bytes ui/images/hd/vc_lock_bottom_bg.png | Bin 302 -> 0 bytes ui/images/hd/vc_lock_left_bg.png | Bin 2726 -> 0 bytes ui/images/hd/vc_lock_reject_icon.png | Bin 1906 -> 0 bytes .../hd/vc_lock_reject_message_arrow_close.png | Bin 0 -> 2948 bytes ...d.png => vc_lock_reject_message_arrow_open.png} | Bin 2937 -> 2929 bytes ui/images/hd/vc_lock_reject_message_bg.png | Bin 0 -> 3489 bytes ui/images/hd/vc_lock_right_bg.png | Bin 2208 -> 0 bytes .../vc_reject_msg_icon.png} | Bin 3246 -> 3406 bytes ui/images/wvga/icon/vc_caller_info_icon.png | Bin 0 -> 4137 bytes ui/images/wvga/icon/vc_more_icon.png | Bin 0 -> 1199 bytes ui/images/wvga/icon/vc_record_icon_dim.png | Bin 3228 -> 0 bytes ui/images/wvga/icon/vc_record_stop_icon_crop.png | Bin 3117 -> 0 bytes ui/org.tizen.call.desktop.in | 10 - ui/org.tizen.call.png | Bin 0 -> 5942 bytes ui/org.tizen.call.xml | 15 + ui/po/de_DE.po | 230 +- ui/po/el_GR.po | 216 +- ui/po/en.po | 216 +- ui/po/es_ES.po | 220 +- ui/po/fr_FR.po | 228 +- ui/po/it_IT.po | 226 +- ui/po/ja_JP.po | 250 +- ui/po/ko_KR.po | 220 +- ui/po/nl_NL.po | 226 +- ui/po/pt_PT.po | 222 +- ui/po/ru_RU.po | 228 +- ui/po/tr_TR.po | 218 +- ui/po/zh_CN.po | 218 +- ui/po/zh_HK.po | 220 +- ui/po/zh_TW.po | 238 +- ui/{ => src/include}/vcui-app-data.h | 96 +- ui/{ => src/include}/vcui-app-window.h | 0 ui/{ => src/include}/vcui-application.h | 91 +- ui/{ => src/include}/vcui-doc-launch.h | 10 +- ui/src/include/vcui-document.h | 474 + ui/{ => src/include}/vcui-view-callend.h | 16 +- ui/{ => src/include}/vcui-view-choice.h | 3 +- ui/{ => src/include}/vcui-view-common.h | 7 +- ui/{ => src/include}/vcui-view-dialing.h | 19 +- ui/{ => src/include}/vcui-view-elements.h | 47 +- ui/{ => src/include}/vcui-view-incoming-lock.h | 22 +- ui/{ => src/include}/vcui-view-keypad.h | 32 +- ui/src/include/vcui-view-layout-hd.h | 1958 ++++ ui/src/include/vcui-view-multi-call-conf.h | 33 + ui/{ => src/include}/vcui-view-multi-call-list.h | 27 +- ui/{ => src/include}/vcui-view-multi-call-split.h | 25 +- ui/{ => src/include}/vcui-view-popup.h | 20 +- .../include/vcui-view-quickpanel.h} | 61 +- ui/{ => src/include}/vcui-view-single-call.h | 19 +- ui/{ => src}/vcui-app-window.c | 160 +- ui/src/vcui-application.c | 2195 ++++ ui/{ => src}/vcui-doc-launch.c | 211 +- ui/src/vcui-document.c | 976 ++ ui/{ => src}/vcui-view-callend.c | 173 +- ui/{ => src}/vcui-view-choice.c | 99 +- ui/{ => src}/vcui-view-common.c | 170 +- ui/{ => src}/vcui-view-dialing.c | 248 +- ui/src/vcui-view-elements.c | 1575 +++ ui/src/vcui-view-incoming-lock.c | 1142 +++ ui/src/vcui-view-keypad.c | 342 + ui/src/vcui-view-multi-call-conf.c | 420 + ui/{ => src}/vcui-view-multi-call-list.c | 299 +- ui/src/vcui-view-multi-call-split.c | 453 + ui/{ => src}/vcui-view-popup.c | 577 +- ui/src/vcui-view-quickpanel.c | 472 + ui/{ => src}/vcui-view-single-call.c | 250 +- ui/themes/bg/vc_button_callend_press.png | Bin 0 -> 2959 bytes ui/themes/bg/vc_button_conflist_hold_normal.png | Bin 0 -> 1587 bytes ui/themes/bg/vc_button_conflist_hold_press.png | Bin 0 -> 1962 bytes ui/themes/bg/vc_button_hold_swap_normal.png | Bin 0 -> 1176 bytes ui/themes/bg/vc_button_hold_swap_press.png | Bin 0 -> 1331 bytes ui/themes/{ => bg}/vc_button_press.png | Bin ui/themes/bg/vc_button_qp_end_normal.png | Bin 0 -> 3191 bytes ui/themes/bg/vc_button_qp_end_press.png | Bin 0 -> 3176 bytes .../vc_button_qp_normal.png} | Bin 3079 -> 3092 bytes ui/themes/bg/vc_button_qp_press.png | Bin 0 -> 3150 bytes ui/themes/{ => bg}/vc_button_red_normal.png | Bin .../vc_conf_button_bigend_call.png} | Bin 2813 -> 2853 bytes ui/themes/bg/vc_conf_button_bigend_call_press.png | Bin 0 -> 1105 bytes ui/themes/{ => bg}/vc_conf_call_list_bg.png | Bin ui/themes/bg/vc_conf_end_normal.png | Bin 0 -> 1246 bytes ui/themes/bg/vc_conf_end_press.png | Bin 0 -> 1276 bytes ui/themes/bg/vc_conf_split_normal.png | Bin 0 -> 1143 bytes ui/themes/bg/vc_conf_split_press.png | Bin 0 -> 1277 bytes ui/themes/bg/vc_contact_btn.png | Bin 0 -> 3799 bytes ui/themes/bg/vc_contact_btn_press.png | Bin 0 -> 3750 bytes ui/themes/bg/vc_more_button_normal.png | Bin 0 -> 3106 bytes ui/themes/bg/vc_more_button_press.png | Bin 0 -> 3102 bytes ui/themes/{ => bg}/vc_six_btn_layout_normal.png | Bin ui/themes/{ => bg}/vc_six_btn_layout_press.png | Bin ui/themes/call_theme.edc | 10117 +++++-------------- ui/{images/hd => themes}/icon/vc_add_icon.png | Bin ui/{images/hd => themes}/icon/vc_add_icon_dim.png | Bin .../icon/vc_add_icon_press.png} | Bin 2939 -> 3006 bytes .../icon/vc_contacts_icon.png} | Bin .../icon/vc_contacts_icon_dim.png} | Bin ui/themes/icon/vc_contacts_icon_press.png | Bin 0 -> 3390 bytes ui/themes/icon/vc_end_call_icon.png | Bin 0 -> 3714 bytes ui/themes/icon/vc_end_call_icon_dim.png | Bin 0 -> 3702 bytes ui/themes/icon/vc_end_call_icon_press.png | Bin 0 -> 3409 bytes ui/{images/hd => themes}/icon/vc_join_icon.png | Bin ui/{images/hd => themes}/icon/vc_join_icon_dim.png | Bin ui/themes/icon/vc_join_icon_press.png | Bin 0 -> 3598 bytes ui/{images/hd => themes}/icon/vc_keypad_icon.png | Bin .../hd => themes}/icon/vc_keypad_icon_dim.png | Bin ui/themes/icon/vc_keypad_icon_press.png | Bin 0 -> 4048 bytes ui/themes/icon/vc_live_video_icon.png | Bin 0 -> 3865 bytes ui/themes/icon/vc_live_video_icon_dim.png | Bin 0 -> 3814 bytes ui/themes/icon/vc_live_video_icon_press.png | Bin 0 -> 3481 bytes ui/themes/icon/vc_msg_icon.png | Bin 0 -> 3493 bytes ui/themes/icon/vc_msg_icon_press.png | Bin 0 -> 3489 bytes ui/themes/icon/vc_mute_icon.png | Bin 0 -> 3897 bytes ui/themes/icon/vc_mute_icon_dim.png | Bin 0 -> 3972 bytes ui/themes/icon/vc_mute_icon_press.png | Bin 0 -> 3584 bytes ui/themes/icon/vc_mute_on_icon.png | Bin 0 -> 5425 bytes ui/themes/icon/vc_mute_on_icon_press.png | Bin 0 -> 5178 bytes ui/themes/icon/vc_popup_arrow.png | Bin 0 -> 1430 bytes ui/themes/icon/vc_popup_bg.png | Bin 0 -> 1012 bytes .../wvga => themes}/icon/vc_rcs_share_icon.png | Bin .../wvga => themes}/icon/vc_rcs_share_icon_dim.png | Bin ui/{images/hd => themes}/icon/vc_speaker_icon.png | Bin .../hd => themes}/icon/vc_speaker_icon_dim.png | Bin ui/themes/icon/vc_speaker_icon_press.png | Bin 0 -> 3533 bytes ui/themes/icon/vc_speaker_on_icon.png | Bin 0 -> 5309 bytes ui/themes/icon/vc_speaker_on_icon_press.png | Bin 0 -> 5081 bytes ui/themes/icon/vc_video_call_icon.png | Bin 0 -> 4572 bytes ui/themes/icon/vc_video_call_icon_press.png | Bin 0 -> 4568 bytes ui/themes/icon/vc_voice_call_icon.png | Bin 0 -> 3544 bytes ui/themes/icon/vc_voice_call_icon_press.png | Bin 0 -> 3559 bytes ui/themes/vc_btn_green.png | Bin 3628 -> 0 bytes ui/themes/vc_button_grey.png | Bin 502 -> 0 bytes ui/themes/vc_button_hide_keypad_normal.png | Bin 3595 -> 0 bytes ui/themes/vc_button_rej_w_msg_normal.png | Bin 3700 -> 0 bytes ui/themes/vc_button_rej_w_msg_press.png | Bin 3717 -> 0 bytes ui/themes/vc_conference_call_btn_press.png | Bin 3093 -> 0 bytes ui/themes/vc_conference_call_btn_red.png | Bin 3077 -> 0 bytes ui/themes/vc_control_btn_prev.png | Bin 3235 -> 0 bytes ui/themes/vc_reject_with_msg_back_icon.png | Bin 313 -> 0 bytes ui/themes/vc_second_mt_btn_normal.png | Bin 3755 -> 0 bytes ui/vcui-application.c | 1224 --- ui/vcui-document.c | 501 - ui/vcui-document.h | 87 - ui/vcui-engine-interface.c | 1113 -- ui/vcui-engine-interface.h | 132 - ui/vcui-view-elements.c | 1158 --- ui/vcui-view-incoming-lock.c | 421 - ui/vcui-view-incoming.c | 350 - ui/vcui-view-keypad.c | 438 - ui/vcui-view-layout-hd.h | 754 -- ui/vcui-view-layout-wvga.h | 745 -- ui/vcui-view-layout.h | 592 -- ui/vcui-view-multi-call-conf.c | 241 - ui/vcui-view-multi-call-conf.h | 32 - ui/vcui-view-multi-call-split.c | 402 - 256 files changed, 22176 insertions(+), 21795 deletions(-) mode change 100755 => 100644 call-engine/core/include/vc-core-callmanager.h create mode 100755 call-engine/core/include/vc-core-ecc.h mode change 100755 => 100644 call-engine/core/include/vc-core-engine-group.h mode change 100755 => 100644 call-engine/core/include/vc-core-engine-status.h mode change 100755 => 100644 call-engine/core/include/vc-core-engine-types.h mode change 100755 => 100644 call-engine/core/include/vc-core-engine.h mode change 100755 => 100644 call-engine/core/vc-core-callmanager.c create mode 100755 call-engine/core/vc-core-ecc.c mode change 100755 => 100644 call-engine/include/voice-call-dbus.h delete mode 100755 debian/README delete mode 100755 debian/changelog delete mode 100755 debian/compat delete mode 100755 debian/control delete mode 100755 debian/copyright delete mode 100755 debian/dirs delete mode 100755 debian/docs delete mode 100755 debian/org.tizen.call.install.in delete mode 100755 debian/org.tizen.call.postinst delete mode 100755 debian/rules mode change 100644 => 100755 packaging/org.tizen.call.spec create mode 100644 ui/call_edc/vcui-view-button-layout.edc create mode 100755 ui/call_edc/vcui-view-caller-info.edc delete mode 100755 ui/call_edc/vcui-view-incoming.edc create mode 100755 ui/call_edc/vcui-view-landscape-quick-pannel.edc create mode 100755 ui/call_edc/vcui-view-quick-pannel.edc create mode 100755 ui/call_edc/vcui-view-reject.edc create mode 100755 ui/images/hd/icon/vc_call_bg_img.png create mode 100755 ui/images/hd/icon/vc_call_not_saved_bg_img.png create mode 100644 ui/images/hd/icon/vc_caller_ID_default.png create mode 100755 ui/images/hd/icon/vc_caller_ID_split.png create mode 100755 ui/images/hd/icon/vc_caller_ID_split_group.png create mode 100755 ui/images/hd/icon/vc_caller_info_icon.png delete mode 100755 ui/images/hd/icon/vc_icon_conf_list_hold.png delete mode 100755 ui/images/hd/icon/vc_icon_conf_list_unhold.png rename ui/{themes/vc_reject_with_msg_control_top_bg.png => images/hd/icon/vc_icon_hold_call.png} (91%) mode change 100755 => 100644 create mode 100644 ui/images/hd/icon/vc_icon_swap_call.png delete mode 100755 ui/images/hd/icon/vc_icon_unhold.png create mode 100644 ui/images/hd/icon/vc_icon_unhold_call.png delete mode 100755 ui/images/hd/icon/vc_icon_unhold_dim.png create mode 100755 ui/images/hd/icon/vc_more_add_call.png create mode 100755 ui/images/hd/icon/vc_more_contacts.png create mode 100755 ui/images/hd/icon/vc_more_join.png create mode 100755 ui/images/hd/icon/vc_more_manage_conf.png create mode 100755 ui/images/hd/icon/vc_mute_on_icon.png rename ui/images/hd/icon/{vc_btn_more.png => vc_notify_missed_call.png} (61%) mode change 100644 => 100755 rename ui/images/hd/icon/{vc_rcs_share_icon_dim.png => vc_notify_sub_missed_call.png} (59%) mode change 100644 => 100755 create mode 100644 ui/images/hd/icon/vc_outgoingcall_No_caller_ID.png mode change 100644 => 100755 ui/images/hd/icon/vc_qp_caller_ID.png mode change 100644 => 100755 ui/images/hd/icon/vc_qp_caller_ID_group.png create mode 100755 ui/images/hd/icon/vc_qp_mute_on.png delete mode 100644 ui/images/hd/icon/vc_rcs_share_icon.png delete mode 100644 ui/images/hd/icon/vc_record_icon.png delete mode 100644 ui/images/hd/icon/vc_record_icon_dim.png rename ui/{themes/vc_control_btn_new_prev.png => images/hd/icon/vc_reject_back_icon.png} (100%) rename ui/{themes/vc_reject_with_msg_control_top_arrow.png => images/hd/icon/vc_reject_create_icon.png} (87%) mode change 100755 => 100644 delete mode 100644 ui/images/hd/keypad/vc_keypad_btn_icon-1.png delete mode 100644 ui/images/hd/keypad/vc_keypad_btn_normal-1.png delete mode 100644 ui/images/hd/keypad/vc_keypad_btn_normal.png delete mode 100644 ui/images/hd/keypad/vc_keypad_btn_press-1.png delete mode 100644 ui/images/hd/keypad/vc_keypad_btn_press.png rename ui/images/hd/{keypad => }/vc_keypad_btn_icon.png (100%) create mode 100644 ui/images/hd/vc_keypad_btn_normal.png create mode 100644 ui/images/hd/vc_keypad_btn_press.png delete mode 100644 ui/images/hd/vc_lock_accept_icon.png delete mode 100644 ui/images/hd/vc_lock_bottom_bg.png delete mode 100644 ui/images/hd/vc_lock_left_bg.png delete mode 100644 ui/images/hd/vc_lock_reject_icon.png create mode 100644 ui/images/hd/vc_lock_reject_message_arrow_close.png rename ui/images/hd/{icon/vc_icon_hold.png => vc_lock_reject_message_arrow_open.png} (91%) mode change 100755 => 100644 create mode 100644 ui/images/hd/vc_lock_reject_message_bg.png delete mode 100644 ui/images/hd/vc_lock_right_bg.png rename ui/images/{wvga/icon/vc_record_icon.png => hd/vc_reject_msg_icon.png} (80%) mode change 100644 => 100755 create mode 100755 ui/images/wvga/icon/vc_caller_info_icon.png create mode 100755 ui/images/wvga/icon/vc_more_icon.png delete mode 100644 ui/images/wvga/icon/vc_record_icon_dim.png delete mode 100644 ui/images/wvga/icon/vc_record_stop_icon_crop.png delete mode 100755 ui/org.tizen.call.desktop.in create mode 100755 ui/org.tizen.call.png create mode 100755 ui/org.tizen.call.xml rename ui/{ => src/include}/vcui-app-data.h (68%) rename ui/{ => src/include}/vcui-app-window.h (100%) rename ui/{ => src/include}/vcui-application.h (74%) rename ui/{ => src/include}/vcui-doc-launch.h (84%) create mode 100755 ui/src/include/vcui-document.h rename ui/{ => src/include}/vcui-view-callend.h (60%) rename ui/{ => src/include}/vcui-view-choice.h (93%) rename ui/{ => src/include}/vcui-view-common.h (91%) rename ui/{ => src/include}/vcui-view-dialing.h (60%) rename ui/{ => src/include}/vcui-view-elements.h (55%) rename ui/{ => src/include}/vcui-view-incoming-lock.h (64%) rename ui/{ => src/include}/vcui-view-keypad.h (56%) create mode 100755 ui/src/include/vcui-view-layout-hd.h create mode 100755 ui/src/include/vcui-view-multi-call-conf.h rename ui/{ => src/include}/vcui-view-multi-call-list.h (55%) rename ui/{ => src/include}/vcui-view-multi-call-split.h (51%) rename ui/{ => src/include}/vcui-view-popup.h (72%) rename ui/{vcui-view-incoming.h => src/include/vcui-view-quickpanel.h} (56%) rename ui/{ => src/include}/vcui-view-single-call.h (55%) rename ui/{ => src}/vcui-app-window.c (60%) create mode 100755 ui/src/vcui-application.c rename ui/{ => src}/vcui-doc-launch.c (65%) create mode 100755 ui/src/vcui-document.c rename ui/{ => src}/vcui-view-callend.c (59%) rename ui/{ => src}/vcui-view-choice.c (69%) rename ui/{ => src}/vcui-view-common.c (69%) rename ui/{ => src}/vcui-view-dialing.c (60%) create mode 100755 ui/src/vcui-view-elements.c create mode 100755 ui/src/vcui-view-incoming-lock.c create mode 100755 ui/src/vcui-view-keypad.c create mode 100755 ui/src/vcui-view-multi-call-conf.c rename ui/{ => src}/vcui-view-multi-call-list.c (56%) create mode 100755 ui/src/vcui-view-multi-call-split.c rename ui/{ => src}/vcui-view-popup.c (55%) create mode 100755 ui/src/vcui-view-quickpanel.c rename ui/{ => src}/vcui-view-single-call.c (54%) create mode 100644 ui/themes/bg/vc_button_callend_press.png create mode 100644 ui/themes/bg/vc_button_conflist_hold_normal.png create mode 100644 ui/themes/bg/vc_button_conflist_hold_press.png create mode 100644 ui/themes/bg/vc_button_hold_swap_normal.png create mode 100644 ui/themes/bg/vc_button_hold_swap_press.png rename ui/themes/{ => bg}/vc_button_press.png (100%) create mode 100644 ui/themes/bg/vc_button_qp_end_normal.png create mode 100644 ui/themes/bg/vc_button_qp_end_press.png rename ui/themes/{vc_conference_call_btn_normal.png => bg/vc_button_qp_normal.png} (86%) create mode 100644 ui/themes/bg/vc_button_qp_press.png rename ui/themes/{ => bg}/vc_button_red_normal.png (100%) rename ui/themes/{vc_reject_with_msg_option_header_bt_press.png => bg/vc_conf_button_bigend_call.png} (94%) create mode 100644 ui/themes/bg/vc_conf_button_bigend_call_press.png rename ui/themes/{ => bg}/vc_conf_call_list_bg.png (100%) create mode 100644 ui/themes/bg/vc_conf_end_normal.png create mode 100644 ui/themes/bg/vc_conf_end_press.png create mode 100644 ui/themes/bg/vc_conf_split_normal.png create mode 100644 ui/themes/bg/vc_conf_split_press.png create mode 100644 ui/themes/bg/vc_contact_btn.png create mode 100644 ui/themes/bg/vc_contact_btn_press.png create mode 100644 ui/themes/bg/vc_more_button_normal.png create mode 100644 ui/themes/bg/vc_more_button_press.png rename ui/themes/{ => bg}/vc_six_btn_layout_normal.png (100%) rename ui/themes/{ => bg}/vc_six_btn_layout_press.png (100%) mode change 100755 => 100644 ui/themes/call_theme.edc rename ui/{images/hd => themes}/icon/vc_add_icon.png (100%) rename ui/{images/hd => themes}/icon/vc_add_icon_dim.png (100%) rename ui/{images/hd/icon/vc_icon_hold_dim.png => themes/icon/vc_add_icon_press.png} (91%) mode change 100755 => 100644 rename ui/{images/hd/icon/vc_contact_icon.png => themes/icon/vc_contacts_icon.png} (100%) rename ui/{images/hd/icon/vc_contact_icon_dim.png => themes/icon/vc_contacts_icon_dim.png} (100%) create mode 100644 ui/themes/icon/vc_contacts_icon_press.png create mode 100644 ui/themes/icon/vc_end_call_icon.png create mode 100644 ui/themes/icon/vc_end_call_icon_dim.png create mode 100644 ui/themes/icon/vc_end_call_icon_press.png rename ui/{images/hd => themes}/icon/vc_join_icon.png (100%) rename ui/{images/hd => themes}/icon/vc_join_icon_dim.png (100%) create mode 100644 ui/themes/icon/vc_join_icon_press.png rename ui/{images/hd => themes}/icon/vc_keypad_icon.png (100%) rename ui/{images/hd => themes}/icon/vc_keypad_icon_dim.png (100%) create mode 100644 ui/themes/icon/vc_keypad_icon_press.png create mode 100755 ui/themes/icon/vc_live_video_icon.png create mode 100755 ui/themes/icon/vc_live_video_icon_dim.png create mode 100755 ui/themes/icon/vc_live_video_icon_press.png create mode 100644 ui/themes/icon/vc_msg_icon.png create mode 100644 ui/themes/icon/vc_msg_icon_press.png create mode 100644 ui/themes/icon/vc_mute_icon.png create mode 100644 ui/themes/icon/vc_mute_icon_dim.png create mode 100644 ui/themes/icon/vc_mute_icon_press.png create mode 100644 ui/themes/icon/vc_mute_on_icon.png create mode 100644 ui/themes/icon/vc_mute_on_icon_press.png create mode 100644 ui/themes/icon/vc_popup_arrow.png create mode 100644 ui/themes/icon/vc_popup_bg.png rename ui/{images/wvga => themes}/icon/vc_rcs_share_icon.png (100%) rename ui/{images/wvga => themes}/icon/vc_rcs_share_icon_dim.png (100%) rename ui/{images/hd => themes}/icon/vc_speaker_icon.png (100%) rename ui/{images/hd => themes}/icon/vc_speaker_icon_dim.png (100%) create mode 100644 ui/themes/icon/vc_speaker_icon_press.png create mode 100644 ui/themes/icon/vc_speaker_on_icon.png create mode 100644 ui/themes/icon/vc_speaker_on_icon_press.png create mode 100644 ui/themes/icon/vc_video_call_icon.png create mode 100644 ui/themes/icon/vc_video_call_icon_press.png create mode 100644 ui/themes/icon/vc_voice_call_icon.png create mode 100644 ui/themes/icon/vc_voice_call_icon_press.png delete mode 100644 ui/themes/vc_btn_green.png delete mode 100644 ui/themes/vc_button_grey.png delete mode 100644 ui/themes/vc_button_hide_keypad_normal.png delete mode 100644 ui/themes/vc_button_rej_w_msg_normal.png delete mode 100644 ui/themes/vc_button_rej_w_msg_press.png delete mode 100644 ui/themes/vc_conference_call_btn_press.png delete mode 100644 ui/themes/vc_conference_call_btn_red.png delete mode 100644 ui/themes/vc_control_btn_prev.png delete mode 100755 ui/themes/vc_reject_with_msg_back_icon.png delete mode 100644 ui/themes/vc_second_mt_btn_normal.png delete mode 100755 ui/vcui-application.c delete mode 100755 ui/vcui-document.c delete mode 100755 ui/vcui-document.h delete mode 100755 ui/vcui-engine-interface.c delete mode 100755 ui/vcui-engine-interface.h delete mode 100755 ui/vcui-view-elements.c delete mode 100755 ui/vcui-view-incoming-lock.c delete mode 100755 ui/vcui-view-incoming.c delete mode 100755 ui/vcui-view-keypad.c delete mode 100755 ui/vcui-view-layout-hd.h delete mode 100755 ui/vcui-view-layout-wvga.h delete mode 100755 ui/vcui-view-layout.h delete mode 100755 ui/vcui-view-multi-call-conf.c delete mode 100755 ui/vcui-view-multi-call-conf.h delete mode 100755 ui/vcui-view-multi-call-split.c diff --git a/call-engine/core/include/vc-core-callagent.h b/call-engine/core/include/vc-core-callagent.h index 78fc48b..47e3db0 100755 --- a/call-engine/core/include/vc-core-callagent.h +++ b/call-engine/core/include/vc-core-callagent.h @@ -14,7 +14,6 @@ * limitations under the License. */ - #ifndef __VC_CORE_CALL_AGENT_H_ #define __VC_CORE_CALL_AGENT_H_ @@ -25,10 +24,11 @@ #endif /**< Maximum Telephony Event */ -#define CALL_VC_TAPI_CALL_EVENT_MAX_NUM 33 -#define CALL_VC_SIMATK_EVENT_MAX_NUM 3 /**< Maximum SIM ATK Event */ -#define CALL_VC_TAPI_READY_EVENT_NUM 1 /**< Tapi Service Ready Event */ -#define CALL_VC_TAPI_SUBSCRIPTION_MAX (CALL_VC_TAPI_CALL_EVENT_MAX_NUM+CALL_VC_TAPI_READY_EVENT_NUM+CALL_VC_SIMATK_EVENT_MAX_NUM) +#define CALL_VC_TAPI_CALL_EVENT_MAX_NUM 33 +#define CALL_VC_SIMATK_EVENT_MAX_NUM 3 /**< Maximum SIM ATK Event */ +#define CALL_VC_TAPI_READY_EVENT_NUM 1 /**< Tapi Service Ready Event */ +#define CALL_VC_TAPI_FACTORY_EVENT_NUM 1 /**< Tapi Service FACTORY Event */ +#define CALL_VC_TAPI_SUBSCRIPTION_MAX (CALL_VC_TAPI_CALL_EVENT_MAX_NUM+CALL_VC_TAPI_READY_EVENT_NUM+CALL_VC_SIMATK_EVENT_MAX_NUM+CALL_VC_TAPI_FACTORY_EVENT_NUM) /** * This enumeration provides CA STATEs @@ -66,6 +66,7 @@ typedef enum { * This structure defines voicecall agent data */ typedef struct _voicecall_engine_t { + TapiHandle *tapi_handle; call_vc_ca_state_t callagent_state; /**< Call Agent State */ voicecall_inout_state_t io_state; /**< Voicecall Engine IO State */ call_vc_manager_t call_manager; /**< Handle for the Call Manager */ @@ -73,7 +74,6 @@ typedef struct _voicecall_engine_t { gboolean bdtmf_ring; /**< dtmf ring? */ - gboolean bonly_sos_call; /**< only SOS calls possible , if TRUE */ gboolean bis_no_sim; /**< SIM not available , if TRUE */ gboolean bdownload_call; /**< Automated call test after binary download , if TRUE */ @@ -81,6 +81,7 @@ typedef struct _voicecall_engine_t { /*tapi_call_ccbs_info_t ccbs_info[CALL_VC_CCBS_NUMBER_MAX]; < call control for busy subscriber info */ int ccbs_index; /**< Index for ccbs_info*/ + int barring_ind_type; /* barring ind type */ /*AOC*/ float aoc_ppm; /**< Price per unit value of currency meter */ diff --git a/call-engine/core/include/vc-core-callmanager.h b/call-engine/core/include/vc-core-callmanager.h old mode 100755 new mode 100644 index fc01c5c..b9b1e8e --- a/call-engine/core/include/vc-core-callmanager.h +++ b/call-engine/core/include/vc-core-callmanager.h @@ -59,9 +59,9 @@ typedef struct { * This structure is used to handle SAT setup information */ typedef struct { - TelSatSetupCallIndCallData_t satengine_setupcall_data; /**< Sat call setup proactive command*/ - TelSatCallCtrlIndData_t satengine_callctrl_data; /**< Sat call control confirm data*/ - TelSatSendDtmfIndDtmfData_t satengine_dtmf_data; /**< Sat send dtmf data*/ + TelSatSetupCallIndCallData_t satengine_setupcall_data; /**< Sat call setup proactive command : LiMo SAT*/ + TelSatCallCtrlIndData_t satengine_callctrl_data; /**< Sat call control confirm data : LiMo SAT*/ + TelSatSendDtmfIndDtmfData_t satengine_dtmf_data; /**< Sat send dtmf data : LiMo SAT*/ int satengine_event_type; /**< Event type of Sat engine */ gboolean redial; /**< Redial yes? or No? */ TelCallCause_t tapi_cause; /**< Tapi Success / Error Cause */ @@ -621,4 +621,13 @@ gboolean call_vc_cm_search_holdcall_ctinfo(call_vc_manager_t *pMng, call_vc_hand * @param[in] pMng Pointer to the call manager structure */ int _vc_core_cm_get_new_callId(call_vc_manager_t *pMng); + +/** + * This function checks if outgoing call exists + * + * @return Returns TRUE if outgoing call exist FALSE otherwise + * @param[in] pMng Pointer to the call manager structure + * @see _vc_core_cm_isexists_incoming_call, _vc_core_cm_isexists_connected_call + */ +gboolean _vc_core_cm_isexits_outgoing_call(call_vc_manager_t *pMng); #endif /* __VC_CORE_CALL_MANAGER_H_ */ diff --git a/call-engine/core/include/vc-core-ecc.h b/call-engine/core/include/vc-core-ecc.h new file mode 100755 index 0000000..2b43b9f --- /dev/null +++ b/call-engine/core/include/vc-core-ecc.h @@ -0,0 +1,41 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __VC_CORE_ECC_H_ +#define __VC_CORE_ECC_H_ + +#include +#include +#include +#include "vc-core-util.h" + +#ifdef CALL_DEBUG_ON_DLOG +#include +#endif + +#define CALL_ECC_MAX_COUNT_DEFAULT_NO_SIM 7 +#define CALL_ECC_MAX_COUNT_DEFAULT 2 +#define CALL_ECC_MAX_COUNT_3 3 +#define CALL_ECC_MAX_COUNT_4 4 +#define CALL_ECC_MAX_COUNT_5 5 +#define CALL_ECC_MAX_COUNT_6 6 +#define CALL_ECC_MAX_COUNT_7 7 +#define CALL_ECC_MAX_COUNT_8 8 +#define CALL_ECC_MAX_COUNT_9 9 +#define CALL_ECC_MAX_COUNT_10 10 + +gboolean _vc_core_ecc_check_emergency_number(TapiHandle *tapi_handle, TelSimCardType_t card_type, char *pNumber, gboolean b_is_no_sim, int *ecc_category); +#endif /* __VC_CORE_ECC_H_ */ diff --git a/call-engine/core/include/vc-core-engine-group.h b/call-engine/core/include/vc-core-engine-group.h old mode 100755 new mode 100644 index 9794c8e..6d9d98f --- a/call-engine/core/include/vc-core-engine-group.h +++ b/call-engine/core/include/vc-core-engine-group.h @@ -74,6 +74,6 @@ voicecall_error_t _vc_core_engine_group_get_call_handle_byposition(voicecall_eng * @param[out] bcall_exists Contains TRUE if call exists in the given group, FALSE otherwise * @remarks pvoicecall_agent and bcall_exists cannot be NULL. */ -voicecall_error_t _vc_core_engine_group_isexists_connected_call_ingroup(voicecall_engine_t *pvoicecall_agent, int group_index, gboolean * bcall_exists); +voicecall_error_t _vc_core_engine_group_isexists_connected_call_ingroup(voicecall_engine_t *pvoicecall_agent, int group_index, gboolean *bcall_exists); #endif /*__VC_CORE_ENGINE_GROUP_H_*/ diff --git a/call-engine/core/include/vc-core-engine-status.h b/call-engine/core/include/vc-core-engine-status.h old mode 100755 new mode 100644 index faf6405..81bb8d6 --- a/call-engine/core/include/vc-core-engine-status.h +++ b/call-engine/core/include/vc-core-engine-status.h @@ -224,9 +224,29 @@ voicecall_error_t _vc_core_engine_status_isvalid_ss_code(voicecall_engine_t *pvo */ voicecall_error_t _vc_core_engine_status_is_zuhause_area(voicecall_engine_t *pvoicecall_agent, gboolean *bzuhause); +/** +* This function checks whether the given incoming call is a restricted call or not +* +* @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure +* @param[in] pvoicecall_agent Handle to voicecall engine +* @param[in] call_handle Call handle of the call to be checked +* @param[out] pbrestricted Pointer to the restricted name mode +* @remarks pvoicecall_agent and prestricted cannot be NULL. +* This API shall only be used with the incoming call handle before it is connected +*/ +voicecall_error_t _vc_core_engine_status_get_calling_namemode(voicecall_engine_t *pvoicecall_agent, int call_handle, gboolean *bcalling_namemode); + voicecall_error_t _vc_core_engine_status_dump_call_details(voicecall_engine_t *pvoicecall_agent); +/** +* This function checks the possiblity of making private calls +* +* @param[in] pvoicecall_agent Handle to Voicecall Engine +* @param[out] b_download_call Contains TRUE if zuhause area, FALSE otherwise +* @remarks pvoicecall_agent and pbprivate_call cannot be NULL +*/ void _vc_core_engine_status_set_download_call(voicecall_engine_t *pvoicecall_agent, gboolean b_download_call); + gboolean _vc_core_engine_status_get_download_call(voicecall_engine_t *pvoicecall_agent); #endif /* __VC_CORE_ENGINE_STATUS_H_ */ diff --git a/call-engine/core/include/vc-core-engine-types.h b/call-engine/core/include/vc-core-engine-types.h old mode 100755 new mode 100644 index 33aff01..91a3333 --- a/call-engine/core/include/vc-core-engine-types.h +++ b/call-engine/core/include/vc-core-engine-types.h @@ -146,7 +146,6 @@ typedef enum { VC_ENDCAUSE_UNASSIGNED_NUMBER, /**< Unassigned/Unallocated number*/ VC_ENDCAUSE_USER_DOESNOT_RESPOND, /**< Called Party does not respond*/ VC_ENDCAUSE_IMEI_REJECTED, /**< Called Party does not respond*/ - /*VC_ENDCAUSE_SWITCHING_EQUIPMENT_CONGESTION, /**< Switching Equipment Congestion : 20090627 match as NW_BUSY*/ } voice_call_end_cause_type_t; /** @@ -312,6 +311,8 @@ typedef enum _voicecall_engine_event_t { VC_ACTION_NO_ACTIVE_TASK, /**< This event will be published when engine becomes idle after executing/aborting a request from other apps - eg) if SAT request is not processed*/ VC_CALL_GET_VOLUME_RESP, /**< Response data from tapi for get tapi sound volume*/ + + VC_CALL_NOTI_WBAMR, /**< Notification Wideband amr */ VC_ENGINE_EVENT_MAX } voicecall_engine_event_t; @@ -495,7 +496,7 @@ typedef enum { * This enumeration defines calling name mode to be verified dueing an incoming call */ typedef enum { - CALL_VC_CALLING_NAME_MODE_AVAILABLE, /**< Calling Name Unavailable*/ + CALL_VC_CALLING_NAME_MODE_AVAILABLE, /**< Calling Name available*/ CALL_VC_CALLING_NAME_MODE_RESTRICTED, /**< Calling Name restricted by the caller*/ CALL_VC_CALLING_NAME_MODE_UNAVAILABLE, /**< Calling Name Unavailable*/ CALL_VC_CALLING_NAME_MODE_AVAILABLE_RESTRICTED, /**< Calling name is available but restricted*/ @@ -527,9 +528,7 @@ typedef struct _call_vc_call_objectinfo_t { call_vc_calling_name_mode_t bcalling_namemode; /**< Name mode of calling name information */ /*Caller Details */ -/*PDIAL_SEND_DTMF*/ char source_tel_number[VC_PHONE_NUMBER_LENGTH_MAX]; /**< Source Telephone number */ -/*PDIAL_SEND_DTMF*/ char tel_number[VC_PHONE_NUMBER_LENGTH_MAX]; /**< Telephone number */ char calling_name[VC_PHONE_NAME_LENGTH_MAX]; /**< Calling part name */ char dtmf_number[VC_PHONE_NUMBER_LENGTH_MAX]; /**< DTMF number */ diff --git a/call-engine/core/include/vc-core-engine.h b/call-engine/core/include/vc-core-engine.h old mode 100755 new mode 100644 index b3f1469..37b523f --- a/call-engine/core/include/vc-core-engine.h +++ b/call-engine/core/include/vc-core-engine.h @@ -23,6 +23,7 @@ #include "vc-core-engine-group.h" #include "vc-core-engine-status.h" #include +#include /*Voicecall Engine Exposed API's */ @@ -273,12 +274,13 @@ void _vc_core_engine_engine_finish(voicecall_engine_t *pvoicecall_agent); /** * This function changes the voice audio path * -* @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure + * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure * @param[in] pvoicecall_agent Handle to Voicecall Engine -* @param[in] audio_path audio path to be changed -* @remarks pvoicecall_agent cannot be NULL + * @param[in] audio_path audio path to be changed + * @param[in] bextra_volume TRUE - extra volume on, FALSE - extra volume off + * @remarks pvoicecall_agent cannot be NULL */ -voicecall_error_t _vc_core_engine_change_audio_path(voicecall_engine_t *pvoicecall_agent, voicecall_audio_path_t audio_path); +voicecall_error_t _vc_core_engine_change_audio_path(voicecall_engine_t *pvoicecall_agent, voicecall_audio_path_t audio_path, gboolean bextra_volume); /** * This function sets the voice call audio volume for the given audio path type @@ -311,6 +313,7 @@ voicecall_error_t _vc_core_engine_set_audio_mute(voicecall_engine_t *pvoicecall_ */ voicecall_error_t _vc_core_engine_get_audio_volume(voicecall_engine_t *pvoicecall_agent, voicecall_audio_path_t audio_path_type); + #ifdef _SAT_MENU_ /** * This function requests SAT Engine to setup SIM services Menu @@ -351,7 +354,7 @@ voicecall_error_t _vc_core_engine_prepare_redial(voicecall_engine_t *pvoicecall_ * @param[out] bredial_duration Contains TRUE if SAT redial duration is enabled, FALSE otherwise * @remarks pvoicecall_agent and bredial_duration cannot be NULL */ -voicecall_error_t voicecall_get_sat_redial_duration_status(voicecall_engine_t *pvoicecall_agent, gboolean * bredial_duration); +voicecall_error_t voicecall_get_sat_redial_duration_status(voicecall_engine_t *pvoicecall_agent, gboolean *bredial_duration); /** * This function sets the current duration and retireives the modified remaining SAT redial duration @@ -364,7 +367,7 @@ voicecall_error_t voicecall_get_sat_redial_duration_status(voicecall_engine_t *p voicecall_error_t voicecall_get_set_sat_remaining_duration(voicecall_engine_t *pvoicecall_agent, long *remaining_duration); #endif -voicecall_error_t _vc_core_engine_get_sat_dtmf_hidden_mode(voicecall_engine_t *pvoicecall_agent, gboolean * bhidden_mode); +voicecall_error_t _vc_core_engine_get_sat_dtmf_hidden_mode(voicecall_engine_t *pvoicecall_agent, gboolean *bhidden_mode); /** * This function sends response to sat based on the given sat response type @@ -377,4 +380,23 @@ voicecall_error_t _vc_core_engine_get_sat_dtmf_hidden_mode(voicecall_engine_t *p voicecall_error_t _vc_core_engine_send_sat_response(voicecall_engine_t *pvoicecall_agent, voicecall_engine_sat_rqst_resp_type sat_rqst_resp_type, call_vc_sat_reponse_type_t sat_response_type); voicecall_error_t _vc_core_engine_set_to_default_values(voicecall_engine_t *pvoicecall_agent); + +/* Tapi response call back */ +void _vc_core_engine_dial_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_answer_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_end_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_hold_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_active_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_swap_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_join_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_split_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_transfer_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_dtmf_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_set_volume_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_get_volume_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_set_sound_path_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_set_mute_status_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +void _vc_core_engine_get_aoc_info_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data); +/* Tapi response call back end */ + #endif /* __VC_CORE_ENGINE_H_ */ diff --git a/call-engine/core/include/vc-core-tapi-evnt.h b/call-engine/core/include/vc-core-tapi-evnt.h index bf41865..e27b01a 100755 --- a/call-engine/core/include/vc-core-tapi-evnt.h +++ b/call-engine/core/include/vc-core-tapi-evnt.h @@ -32,16 +32,6 @@ gboolean _vc_core_tapi_event_connected_line_ind_handle(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle, TelCallConnectedNumberInfo_t *connected_number_info); /** - * This function handles different type of tapi indications given in tapi_event_type - * - * @return Returns TRUE on success and FALSE on failure - * @param[in] pcall_agent Pointer to the call agent state - * @param[in] tapi_event_type Tapi Event Type - * @param[in] param2 sub param associated with tapi_event_type - */ -gboolean _vc_core_tapi_event_handle_notification(call_vc_callagent_state_t *pcall_agent, int tapi_event_type, int param2); - -/** * This function handles the AOC Event * * @return Returns TRUE on success and FALSE on failure @@ -55,11 +45,12 @@ gboolean _vc_core_tapi_event_handle_aoc(call_vc_callagent_state_t *pcall_agent, * This function retreives the voicecall engine specific end cause type for the given tapi end cause type * * @return Returns TRUE on success and FALSE on failure - * @param[in] type tapi event type + * @param[in] pcall_agent Pointer to the call agent state + * @param[in] noti_id tapi event type * @param[in] cause tapi call end cause * @param[out] end_cause_type voicecall engine end cause */ -void _vc_core_tapi_event_get_end_cause_type(int type, TelTapiEndCause_t cause, voice_call_end_cause_type_t *end_cause_type); +void _vc_core_tapi_event_get_end_cause_type(call_vc_callagent_state_t *pcall_agent, const char *noti_id, TelTapiEndCause_t cause, voice_call_end_cause_type_t *end_cause_type); /** * This function Copies Telephony incoming call data to voice call incoming call data @@ -108,7 +99,7 @@ gboolean _vc_core_tapi_event_handle_alert_event(call_vc_callagent_state_t *pcall * @param[in] handle Call Handle of the call being ended * @param[in] cause Tapi End Cause */ -gboolean _vc_core_tapi_event_handle_call_end_event(call_vc_callagent_state_t *pcall_agent, int type, call_vc_handle handle, TelTapiEndCause_t cause); +gboolean _vc_core_tapi_event_handle_call_end_event(call_vc_callagent_state_t *pcall_agent, const char * noti_id, call_vc_handle handle, TelTapiEndCause_t cause); /** * This function handles the tapi call connect event diff --git a/call-engine/core/include/vc-core-util.h b/call-engine/core/include/vc-core-util.h index c18bf1c..8de3bad 100755 --- a/call-engine/core/include/vc-core-util.h +++ b/call-engine/core/include/vc-core-util.h @@ -28,17 +28,16 @@ #include "vc-core-error.h" #include "vc-core-engine-types.h" -#include "TelDefines.h" -#include "TelNetwork.h" -#include "TelSim.h" -#include "TapiCommon.h" -#include "TapiEvent.h" -#include "ITapiCall.h" -#include "ITapiSim.h" -#include "ITapiNetwork.h" -#include "ITapiSound.h" -#include "ITapiSs.h" -#include "ITapiSat.h" +#ifdef DRM_USED +#include "drm-service-types.h" +#include "drm-service.h" +#endif + +#include +#include +#include +#include +#include #include "vconf.h" #include "vconf-keys.h" @@ -47,11 +46,62 @@ #include #endif -#define CALL_NETWORK_MCC_UK 0xEA /*234*/ -#define CALL_NETWORK_MCC_IE 0x110 /*272*/ -#define CALL_NETWORK_MCC_UKRAINE 0xFF /*255*/ -#define CALL_NETWORK_MCC_SAMSUNG_SUWON_3G 450001 /*450001*/ -#define CALL_NETWORK_MCC_ITALY 222 +/* Mcc */ +#define CALL_NETWORK_MCC_UK 234 /*UK = 234*/ +#define CALL_NETWORK_MCC_IRELAND 272 /*Ireland = 272*/ +#define CALL_NETWORK_MCC_UAE 424 /*UAE = 424*/ +#define CALL_NETWORK_MCC_GHANA 620 /*Ghana = 620*/ +#define CALL_NETWORK_MCC_ISRAEL 425 /*Israel = 425*/ +#define CALL_NETWORK_MCC_CROATIA 219 /*Croatia = 219*/ +#define CALL_NETWORK_MCC_SERBIA 220 /*Serbia = 220*/ +#define CALL_NETWORK_MCC_RUSSIA 250 /*Russia = 250*/ + +#define CALL_NETWORK_MCC_TAIWAN 466 /*Taiwan = 466*/ +#define CALL_NETWORK_MCC_HONGKONG 454 /*Hongkong = 454*/ +#define CALL_NETWORK_MCC_MALAYSIA 502 /*MALAYSIA = 502*/ +#define CALL_NETWORK_MCC_AUSTRALIA 505 /*Australia = 505*/ +#define CALL_NETWORK_MCC_NEWZEALAND 530 /*NewZealand = 530*/ + +#define CALL_NETWORK_MCC_USA 310 /*USA = 310*/ +#define CALL_NETWORK_MCC_CANADA 302 /*Canada = 302*/ +#define CALL_NETWORK_MCC_BRASIL 724 /*Brasil = 724*/ +#define CALL_NETWORK_MCC_MEXICO 334 /*Mexico = 334*/ +#define CALL_NETWORK_MCC_URGUAY 748 /*Urguay = 748*/ +#define CALL_NETWORK_MCC_COLOMBIA 732 /*Colombia = 732*/ +#define CALL_NETWORK_MCC_CHILE 730 /*Chile = 730*/ +#define CALL_NETWORK_MCC_PERU 716 /*Peru = 716*/ +#define CALL_NETWORK_MCC_VENEZUELA 734 /*Venezuela = 734*/ +#define CALL_NETWORK_MCC_GUATEMALA 704 /*Guatemala = 704*/ +#define CALL_NETWORK_MCC_ELSALVADOR 706 /*El Salvador = 706*/ +#define CALL_NETWORK_MCC_NICARAGUA 710 /*Nicaragua = 710*/ +#define CALL_NETWORK_MCC_PANAMA 714 /*Panama = 714*/ + +#define CALL_NETWORK_MCC_JAPAN 440 /*Japan = 440*/ +#define CALL_NETWORK_MCC_KOREA 450 /*Korae = 450*/ +#define CALL_NETWORK_MCC_CHINA 460 /*China = 460*/ + +#define CALL_NETWORK_MCC_FRANCE 208 /*France = 208*/ +#define CALL_NETWORK_MCC_PORTUGAL 268 /*Protugal = 268*/ +#define CALL_NETWORK_MCC_ROMANIA 226 /*Romania = 226*/ +#define CALL_NETWORK_MCC_DE 262 /*DE = 262(0x106)*/ + +#define CALL_NETWORK_MCC_TEST_USA 0x001 /*Test MMC*/ + +/* MNC */ +#define CALL_NETWORK_MNC_01 1 /*MNC 01*/ +#define CALL_NETWORK_MNC_02 2 /*MNC 02*/ +#define CALL_NETWORK_MNC_03 3 /*MNC 03*/ +#define CALL_NETWORK_MNC_04 4 /*MNC 04*/ +#define CALL_NETWORK_MNC_05 5 /*MNC 05*/ +#define CALL_NETWORK_MNC_06 6 /*MNC 06*/ +#define CALL_NETWORK_MNC_11 11 /*MNC 11 for +Movil in Panama*/ +#define CALL_NETWORK_MNC_20 20 /*MNC 20 for TELCEL in Mexico*/ +#define CALL_NETWORK_MNC_123 123 /*MNC 123 for Movistar in Colombia*/ +#define CALL_NETWORK_MNC_103 103 /*MNC 103 for TIGO in Colombia*/ +#define CALL_NETWORK_MNC_111 111 /*MNC 111 for TIGO in Colombia*/ +#define CALL_NETWORK_MNC_30 30 /*MNC 30 for Movistar in Nicaragua*/ +#define CALL_NETWORK_MNC_300 300 /*MNC 30 for Movistar in Nicaragua*/ +#define CALL_NETWORK_MNC_TEST_USA 0x01 /*Test MNC*/ #define IS_DIGIT(value) ((value) >= '0' && (value) <= '9') @@ -101,17 +151,6 @@ typedef unsigned int call_vc_handle; -#ifdef TIMER_ENABLED -#define GET_CURR_TIME() _vc_core_util_get_curr_time() -#define PRINT_DIFF_TIME(start, end, message) _vc_core_util_print_diff_time(start, end, message) -#define PRINT_CURRENT_TIME(message) _vc_core_util_print_curr_time(message) - -#else -#define GET_CURR_TIME() 0 -#define PRINT_DIFF_TIME(start, end, message) -#define PRINT_CURRENT_TIME(message) -#endif - /** * This enumeration defines SS's SI vaild types */ @@ -167,15 +206,6 @@ void call_vc_print_diff_time(time_t time1, time_t time2); #endif /** - * This function checks whether the given number is emergency number by verifying with sim emergency numbers - * - * @return TRUE if the number is emergency number, FALSE otherwise - * @param[in] card_type simcard type - * @param[in] pNumber number to be verified - */ -gboolean _vc_core_util_check_emergency_number(TelSimCardType_t card_type, char *pNumber, gboolean b_is_no_sim, int *ecc_category); - -/** * This function checks whether the given number is SS string or not * * @return TRUE if the number is SS string, FALSE otherwise @@ -191,7 +221,6 @@ gboolean _vc_core_util_check_ss_string(const char *pNumber); */ gboolean _vc_core_util_check_incall_ss_string(const char *number); -/*PDIAL_SEND_DTMF*/ /** * This function extracts the dtmf number from the given telephone number * @@ -200,7 +229,6 @@ gboolean _vc_core_util_check_incall_ss_string(const char *number); * @param[out] dtmf_buf_len size of dtmf number buffer */ gboolean _vc_core_util_extract_dtmf_number(const char *tel_number, char *dtmf_number, const int dtmf_buf_len); -/*PDIAL_SEND_DTMF*/ /** * This function checks whether the given number ia a valid dtmf number or not @@ -257,6 +285,16 @@ gboolean _vc_core_util_check_zuhause_status(void); */ gboolean _vc_core_util_get_mcc(unsigned long *mcc); +/** +* This function retreive mnc information from the telephony +* +* @internal +* @return TRUE on success, FALSE - otherwise +* @param[out] mnc mnc information to be retreived +*/ +gboolean _vc_core_util_get_mnc(unsigned long *mnc); + + gboolean _vc_core_util_set_call_status(int call_status); gboolean _vc_core_util_check_video_call_status(void); gboolean _vc_core_util_get_SAP_status(); @@ -284,15 +322,6 @@ char *_vc_core_util_get_date_time(time_t time); */ gboolean _vc_core_util_phonelock_status(void); -gboolean _vc_core_util_set_sleep_status(call_vc_power_mode_t type); -gboolean _vc_core_util_get_call_alert_type(int *alert_type); - -#ifdef TIMER_ENABLED /*unused*/ -clock_t _vc_core_util_get_curr_time(); -void _vc_core_util_print_diff_time(clock_t start, clock_t end, char *message); -void _vc_core_util_print_curr_time(char *message); -#endif - void _vc_core_util_download_test_call(char *result); gboolean _vc_core_util_set_call_volume(int vol_level); diff --git a/call-engine/core/vc-core-callagent.c b/call-engine/core/vc-core-callagent.c index 8c68abb..91941ec 100755 --- a/call-engine/core/vc-core-callagent.c +++ b/call-engine/core/vc-core-callagent.c @@ -121,7 +121,6 @@ call_vc_callagent_state_t *_vc_core_ca_init_agent() void _vc_core_ca_init_data(call_vc_callagent_state_t *pagent) { VOICECALL_RETURN_IF_FAIL(pagent != NULL); - pagent->bonly_sos_call = FALSE; pagent->callagent_state = CALL_VC_CA_STATE_NORMAL; pagent->io_state = VC_INOUT_STATE_NONE; pagent->bis_no_sim = FALSE; @@ -312,7 +311,8 @@ gboolean _vc_core_ca_send_sat_response(call_vc_callagent_state_t *pagent, voicec CALL_ENG_DEBUG(ENG_DEBUG, "Invalid SAT Rquest Response Type"); break; } - error_code = tel_send_sat_app_exec_result(&call_vc_sat_response); + + error_code = tel_send_sat_app_exec_result(pagent->tapi_handle, &call_vc_sat_response); if (error_code != TAPI_API_SUCCESS) { CALL_ENG_DEBUG(ENG_DEBUG, "Error tel_send_sat_app_exec_result():%#X", error_code); return FALSE; @@ -321,6 +321,7 @@ gboolean _vc_core_ca_send_sat_response(call_vc_callagent_state_t *pagent, voicec else { CALL_ENG_DEBUG(ENG_DEBUG, "tel_send_sat_app_exec_result: Success"); } + return TRUE; } diff --git a/call-engine/core/vc-core-callmanager.c b/call-engine/core/vc-core-callmanager.c old mode 100755 new mode 100644 index 806899e..18a2c42 --- a/call-engine/core/vc-core-callmanager.c +++ b/call-engine/core/vc-core-callmanager.c @@ -532,7 +532,7 @@ void _vc_core_cm_set_group_state(call_vc_manager_t *pMng, int nGroup, call_vc_gr VOICECALL_RETURN_IF_FAIL(pMng != NULL); /*Only Group 0 and Group 1 are possible */ VOICECALL_RETURN_IF_FAIL((nGroup >= CALL_VC_CALL_GROUP_0 && nGroup < CALL_VC_CALL_GROUP_MAX)); - + pMng->callgroup_info[nGroup].state = state; } @@ -1821,8 +1821,8 @@ int _vc_core_cm_get_new_callId(call_vc_manager_t *pMng) int i = 0; VOICECALL_RETURN_VALUE_IF_FAIL(pMng != NULL, VC_TAPI_INVALID_CALLHANDLE); - - memset(bCheck, 0, sizeof(bCheck)); + + memset(bCheck, 0, VC_MAX_CALL_ID); for (i = 0; i < VC_MAX_CALL_MEMBER; i++) { if ((pMng->callobject_info[i].state != VC_CALL_STATE_ENDED) && (pMng->callobject_info[i].state != VC_CALL_STATE_ENDED_FINISH)) { VOICECALL_RETURN_INVALID_IF_FAIL(((pMng->callobject_info[i].call_id >= 0) && (pMng->callobject_info[i].call_id <= VC_MAX_CALL_ID))); diff --git a/call-engine/core/vc-core-ecc.c b/call-engine/core/vc-core-ecc.c new file mode 100755 index 0000000..4bf3a60 --- /dev/null +++ b/call-engine/core/vc-core-ecc.c @@ -0,0 +1,207 @@ +/* + * 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 "vc-core-ecc.h" +#include "vc-core-util.h" + +/** + * This function checks whether the given number is emergency number by verifying with no sim emergency numbers + * + * @return TRUE if the number is emergency number, FALSE otherwise + * @param[in] pNumber number to be verified + */ +static gboolean __vc_core_ecc_check_emergency_number_nosim(const char *pNumber); + +static char *gcall_vc_ecc_numbers_default[] = { + "112", + "911" +}; + +/** + * This function checks whether the given number is emergency number by verifying with sim emergency numbers + * + * @return TRUE if the number is emergency number, FALSE otherwise + * @param[in] card_type simcard type + * @param[in] pNumber number to be verified + */ +gboolean _vc_core_ecc_check_emergency_number(TapiHandle *tapi_handle, TelSimCardType_t card_type, char *pNumber, gboolean b_is_no_sim, int *ecc_category) +{ + int i = 0; + int ecc_count = 0; + char **p_ecc_numbers = NULL; + TapiResult_t tapi_err = TAPI_API_SUCCESS; + unsigned long mcc = 0; /* for checking Emergency number for each country */ + unsigned long mnc = 0; /* for checking Emergency number for each operator */ + + VOICECALL_RETURN_FALSE_IF_FAIL(pNumber != NULL); + VOICECALL_RETURN_FALSE_IF_FAIL(ecc_category != NULL); + + CALL_ENG_DEBUG(ENG_DEBUG, "pNumber = %s", pNumber); + *ecc_category = 0; + + if (b_is_no_sim == TRUE) { + return __vc_core_ecc_check_emergency_number_nosim(pNumber); + } + + _vc_core_util_get_mcc(&mcc); + _vc_core_util_get_mnc(&mnc); + + switch (card_type) { + case TAPI_SIM_CARD_TYPE_GSM: + { + TelSimEccList_t sim_ecc_list; /* used to get data for the Ecc information for 2G and 3G. */ + + CALL_ENG_DEBUG(ENG_DEBUG, "[SimCardType=SIM_CARD_TYPE_GSM]"); + memset(&sim_ecc_list, 0x00, sizeof(TelSimEccList_t)); + + /*TAPI api Compliance */ + /*To get Emergency data of 2G */ + tapi_err = tel_get_sim_ecc(tapi_handle, &sim_ecc_list); + + if (TAPI_API_SUCCESS != tapi_err) { + CALL_ENG_DEBUG(ENG_DEBUG, "tapi_sim_get_ecc_info failed, tapi_err=%d", tapi_err); + return FALSE; + } + + if (sim_ecc_list.ecc_count > 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "GSM pNumber ecc1(%s) ecc2(%s) ecc3(%s) ecc4(%s) ecc5(%s)", + sim_ecc_list.list[0].number, sim_ecc_list.list[1].number, sim_ecc_list.list[2].number, sim_ecc_list.list[3].number, sim_ecc_list.list[4].number); + + if ((strcmp(pNumber, sim_ecc_list.list[0].number) == 0) + || (strcmp(pNumber, sim_ecc_list.list[1].number) == 0) + || (strcmp(pNumber, sim_ecc_list.list[2].number) == 0) + || (strcmp(pNumber, sim_ecc_list.list[3].number) == 0) + || (strcmp(pNumber, sim_ecc_list.list[4].number) == 0)) { + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_check_emergency_number: return TRUE"); + return TRUE; + } + } + } + break; + case TAPI_SIM_CARD_TYPE_USIM: + { + TelSimEccList_t usim_ecc_list; /* used to get data for the Ecc information for both 2G and 3G */ + + CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=SIM_CARD_TYPE_USIM"); + memset(&usim_ecc_list, 0x00, sizeof(TelSimEccList_t)); + + /*Synchronous function used to get ECC data */ + tapi_err = tel_get_sim_ecc(tapi_handle, &usim_ecc_list); + + if (TAPI_API_SUCCESS != tapi_err) { + CALL_ENG_DEBUG(ENG_DEBUG, "tapi_sim_get_usim_ecc_info failed, tapi_err=%d", tapi_err); + return FALSE; + } + + if (usim_ecc_list.ecc_count > 0) { + for (i = 0; i < usim_ecc_list.ecc_count; i++) { + CALL_ENG_DEBUG(ENG_DEBUG, "[ecc=%s, category:[%d]]", usim_ecc_list.list[i].number, usim_ecc_list.list[i].category); + if (!strcmp(pNumber, usim_ecc_list.list[i].number)) { + *ecc_category = usim_ecc_list.list[i].category; + CALL_ENG_DEBUG(ENG_DEBUG, "uecc matched!!"); + return TRUE; + } + } + } + } + break; + case TAPI_SIM_CARD_TYPE_RUIM: + CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=TAPI_SIM_CARD_TYPE_RUIM"); + break; + case TAPI_SIM_CARD_TYPE_IMS: + CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=TAPI_SIM_CARD_TYPE_IMS"); + break; + case TAPI_SIM_CARD_TYPE_UNKNOWN: + CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=SIM_CARD_TYPE_UNKNOWN"); + break; + } + + /* There is no ecc number in the SIM card. */ + CALL_ENG_DEBUG(ENG_DEBUG, "mcc : %ld", mcc); + + switch (mcc) { + default: + ecc_count = CALL_ECC_MAX_COUNT_DEFAULT; + p_ecc_numbers = gcall_vc_ecc_numbers_default; /*112, 911 */ + break; + } + + VOICECALL_RETURN_FALSE_IF_FAIL(ecc_count > 0); + VOICECALL_RETURN_FALSE_IF_FAIL(p_ecc_numbers != NULL); + + for (i = 0; i < ecc_count; i++) { + if (!strcmp(pNumber, p_ecc_numbers[i])) { + CALL_ENG_DEBUG(ENG_DEBUG, "pNumber (%s), p_ecc_numbers[%d] (%s)", pNumber, i, p_ecc_numbers[i]); + return TRUE; + } + } + + CALL_ENG_DEBUG(ENG_DEBUG, "No emegency number..."); + return FALSE; +} + +/* No SIM - Default*/ +static char *gcall_vc_ecc_numbers_nosim_default[] = { + "000", + "112", + "110", + "118", + "119", + "911", + "999" +}; + +static gboolean __vc_core_ecc_check_emergency_number_nosim(const char *pNumber) +{ + int i = 0; + int ecc_count = 0; + char **p_nosim_ecc_numbers = NULL; + unsigned long mcc = 0; /* for checking Emergency number for each country */ + unsigned long mnc = 0; /* for checking Emergency number for each operator */ + + VOICECALL_RETURN_FALSE_IF_FAIL(pNumber != NULL); + + if (strlen(pNumber) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "pNumber's length is ZERO so return FALSE"); + return FALSE; + } + + _vc_core_util_get_mcc(&mcc); + _vc_core_util_get_mnc(&mnc); + + CALL_ENG_DEBUG(ENG_DEBUG, "mcc : %ld", mcc); + + switch (mcc) { + default: + ecc_count = CALL_ECC_MAX_COUNT_DEFAULT_NO_SIM; + p_nosim_ecc_numbers = gcall_vc_ecc_numbers_nosim_default; /*3GPP SPecs = 000, 08, 112, 100, 118, 119, 911 */ + break; + } + + VOICECALL_RETURN_FALSE_IF_FAIL(ecc_count > 0); + VOICECALL_RETURN_FALSE_IF_FAIL(p_nosim_ecc_numbers != NULL); + + for (i = 0; i < ecc_count; i++) { + if (!strcmp(pNumber, p_nosim_ecc_numbers[i])) { + CALL_ENG_DEBUG(ENG_DEBUG, "pNumber (%s), p_nosim_ecc_numbers[%d] (%s)", pNumber, i, p_nosim_ecc_numbers[i]); + return TRUE; + } + } + + CALL_ENG_DEBUG(ENG_DEBUG, "No emegency number..."); + + return FALSE; +} diff --git a/call-engine/core/vc-core-engine-status.c b/call-engine/core/vc-core-engine-status.c index d5f4fe1..63030c0 100755 --- a/call-engine/core/vc-core-engine-status.c +++ b/call-engine/core/vc-core-engine-status.c @@ -64,7 +64,7 @@ voicecall_error_t _vc_core_engine_status_isrestricted_call(voicecall_engine_t *p * @remarks pvoicecall_agent and prestricted cannot be NULL. * This API shall only be used with the incoming call handle before it is connected */ -voicecall_error_t _vc_core_engine_status_get_calling_namemode(voicecall_engine_t *pvoicecall_agent, int call_handle, gboolean * bcalling_namemode) +voicecall_error_t _vc_core_engine_status_get_calling_namemode(voicecall_engine_t *pvoicecall_agent, int call_handle, gboolean *bcalling_namemode) { call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent; call_vc_call_objectinfo_t call_object; @@ -375,31 +375,6 @@ voicecall_error_t _vc_core_engine_status_check_emergency_byindex(voicecall_engin } /** -* This function checks and returns the FDN status -* -* @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure -* @param[in] pcall_agent Handle to Voicecall Engine - Currently not used, reserved for future use -* @param[out] bfdn_enabled TRUE - if FDN is enabled, FALSE otherwise -* @remarks pvoicecall_agent and bfdn_anabled cannot be NULL -*/ -voicecall_error_t _vc_core_engine_status_isenabled_fdn(voicecall_engine_t *pcall_agent, gboolean *bfdn_enabled) -{ - gboolean bfdn = FALSE; - VOICECALL_RETURN_VALUE_IF_FAIL(bfdn_enabled != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS); - VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS); - - CALL_ENG_KPI("tel_get_sim_fdn_status start"); - if (TAPI_API_SUCCESS == tel_get_sim_fdn_status(&bfdn)) { - *bfdn_enabled = bfdn; - return ERROR_VOICECALL_NONE; - } - CALL_ENG_KPI("tel_get_sim_fdn_status done"); - - *bfdn_enabled = FALSE; - return ERROR_VOICECALL_TAPI_ERROR; -} - -/** * This function checks the possiblity of transfering calls * * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure diff --git a/call-engine/core/vc-core-engine.c b/call-engine/core/vc-core-engine.c index cafbfd5..d7a8bd9 100755 --- a/call-engine/core/vc-core-engine.c +++ b/call-engine/core/vc-core-engine.c @@ -18,6 +18,7 @@ #include #include #include +#include /* Call Module File Includes */ #include "vc-core-engine.h" @@ -28,6 +29,7 @@ #include "vc-core-tapi-rqst.h" #include "vc-core-svcall.h" #include "vc-core-engine-status.h" +#include "vc-core-ecc.h" /*Global Variable Declerations */ @@ -39,13 +41,14 @@ static TelCallIncomingCallInfo_t gincoming_call_info; static gboolean gphone_init_finished = FALSE; static call_vc_handle gphone_rejected_call = VC_TAPI_INVALID_CALLHANDLE; -static call_vc_callagent_state_t *gpcall_agent_for_callback = NULL; +static call_vc_callagent_state_t *gpcall_agent_for_callback = NULL; /*jspark event subscribe & callback function*/ + /* SAT call detail used for self event */ static int gsat_event_type = 0; static int gtype = 0; static void *gpresult = NULL; static TelSatSetupCallIndCallData_t gSatSetupCallInfo; -static TelSatSendDtmfIndDtmfData_t gSatSendDtmfInfo; +//static TelSatSendDtmfIndDtmfData_t gSatSendDtmfInfo; /*Local Function Declarations*/ /** @@ -58,7 +61,7 @@ static TelSatSendDtmfIndDtmfData_t gSatSendDtmfInfo; * @param[in] type type of the tapi event * @param[in] tapi_cause tapi cause */ -static gboolean __call_vc_outgoingcall_endhandle(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle, int type, TelTapiEndCause_t tapi_cause); +static gboolean __call_vc_outgoingcall_endhandle(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle, const char *type, TelTapiEndCause_t tapi_cause); /** * This function handles the end event for incoming call * @@ -92,22 +95,26 @@ static gboolean __call_vc_create_outgoing_callinfo(call_vc_callagent_state_t *pa * This function handles all telephony events * * @internal - * @return Returns TRUE on if call agent is in wait state or FALSE - * @param[in] event tapi event data - * @param[in] userdata user callback data + * @return void +* @param[in] tapi_handle tapi handle +* @param[in] noti_id event type +* @param[in] data tapi event data +* @param[in] userdata user callback data */ -static void __call_vc_handle_tapi_events(TelTapiEvent_t *event, void *userdata); +static void __call_vc_handle_tapi_events(TapiHandle *handle, const char *noti_id, void *data, void *user_data); /** * This function handles sat engine notification * * @internal -* @return Returns TRUE on success or FALSE on failure -* @param[in] event tapi event data +* @return void +* @param[in] tapi_handle tapi handle +* @param[in] noti_id event type +* @param[in] data tapi event data * @param[in] userdata user callback data */ -static void __call_vc_handle_sat_engine_events_cb(TelTapiEvent_t *event, void *userdata); +static void __call_vc_handle_sat_engine_events_cb(TapiHandle *handle, const char *noti_id, void *data, void *user_data); /** * This function subscribes for all notifications required for voicecall engine @@ -123,10 +130,12 @@ static gboolean __call_vc_subscribe_call_events(call_vc_callagent_state_t *pcall * * @internal * @return Returns TRUE on success or FALSE on failure -* @param[in] event tapi event data +* @param[in] tapi_handle tapi handle +* @param[in] noti_id event type +* @param[in] data tapi event data * @param[in] userdata user callback data */ -static void __call_vc_tapi_initialized_cb(TelTapiEvent_t *event, void *userdata); +static void __call_vc_tapi_initialized_cb(TapiHandle *handle, const char *noti_id, void *data, void *user_data); /** * This function subscribes for telephony call notifications @@ -202,6 +211,14 @@ static gboolean __call_vc_sat_idle_cb(gpointer puser_data); static void __vc_core_check_engine_active_task(call_vc_callagent_state_t *pcall_agent); /** + * This function checks whether dtmf is possible + * + * @return This function returns TRUE if dtmf is possible or else FALSE + * @param[in] pcall_agent Pointer to the call agent structure + */ +static gboolean __vc_core_is_dtmf_possible(call_vc_callagent_state_t *pcall_agent); + +/** * This function initializes the voicecall engine * * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure @@ -257,19 +274,20 @@ void _vc_core_engine_handle_sat_events_cb(void *sat_setup_call_data, void *userd memcpy(&gSatSetupCallInfo, data, sizeof(TelSatSetupCallIndCallData_t)); gsat_event_type = SAT_RQST_SETUP_CALL; - gtype = TAPI_EVENT_SAT_SETUP_CALL_IND; + //gtype = TAPI_EVENT_SAT_SETUP_CALL_IND; gpresult = &gSatSetupCallInfo; g_idle_add(__call_vc_sat_idle_cb, pcall_agent); CALL_ENG_DEBUG(ENG_DEBUG, "Call back Ends and returning.."); } -static void __call_vc_handle_sat_engine_events_cb(TelTapiEvent_t *event, void *userdata) +static void __call_vc_handle_sat_engine_events_cb(TapiHandle *handle, const char *noti_id, void *data, void *user_data) { - call_vc_callagent_state_t *pcall_agent = gpcall_agent_for_callback; +// call_vc_callagent_state_t *pcall_agent = gpcall_agent_for_callback; CALL_ENG_DEBUG(ENG_DEBUG, "sat event callback."); +#if 0 int event_type = event->EventType; /*int status = event->Status;*/ char *data = event->pData; @@ -284,6 +302,7 @@ static void __call_vc_handle_sat_engine_events_cb(TelTapiEvent_t *event, void *u case TAPI_EVENT_SAT_SEND_DTMF_IND: { + /* async for SAT sync noti */ memset(&gSatSendDtmfInfo, 0, sizeof(TelSatSendDtmfIndDtmfData_t)); memcpy(&gSatSendDtmfInfo, data, sizeof(TelSatSendDtmfIndDtmfData_t)); @@ -314,17 +333,12 @@ static void __call_vc_handle_sat_engine_events_cb(TelTapiEvent_t *event, void *u } else { __vc_core_check_engine_active_task(pcall_agent); } - +#endif } /*Subscribe Noti Events*/ static gboolean __call_vc_subscribe_call_events(call_vc_callagent_state_t *pcall_agent) { - clock_t start = 0; - clock_t end = 0; - - start = GET_CURR_TIME(); - CALL_ENG_KPI("__call_vc_subscribe_tapi_event start"); /* Subscribe Tapi Events */ if (FALSE == __call_vc_subscribe_tapi_event(pcall_agent)) { @@ -334,9 +348,6 @@ static gboolean __call_vc_subscribe_call_events(call_vc_callagent_state_t *pcall } CALL_ENG_KPI("__call_vc_subscribe_tapi_event done"); - end = GET_CURR_TIME(); - PRINT_DIFF_TIME(start, end, "Duration For tapi_call_subscription"); - CALL_ENG_DEBUG(ENG_DEBUG, "Noti Subscription Sucess"); return TRUE; } @@ -360,7 +371,7 @@ gboolean _vc_core_ca_send_event_to_client(call_vc_callagent_state_t *pcall_agent return FALSE; } -static void __call_vc_tapi_initialized_cb(TelTapiEvent_t *event, void *userdata) +static void __call_vc_tapi_initialized_cb(TapiHandle *handle, const char *noti_id, void *data, void *user_data) { call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; TapiResult_t tapi_err = TAPI_API_SUCCESS; @@ -368,6 +379,14 @@ static void __call_vc_tapi_initialized_cb(TelTapiEvent_t *event, void *userdata) TelSimCardType_t card_type = 0; int sim_changed = 0; + VOICECALL_RETURN_IF_FAIL(data != NULL); + tapi_power_phone_power_status_t *power = (tapi_power_phone_power_status_t *)data; + + if (power != TAPI_PHONE_POWER_STATUS_ON) { + CALL_ENG_DEBUG(ENG_DEBUG, "Modem is not available"); + return; + } + CALL_ENG_DEBUG(ENG_DEBUG, "gphone_init_finished %d", gphone_init_finished); if (gphone_init_finished != TRUE) { @@ -375,32 +394,38 @@ static void __call_vc_tapi_initialized_cb(TelTapiEvent_t *event, void *userdata) CALL_ENG_DEBUG(ENG_DEBUG, "Query Card Status .."); - /*memset(&sim_status, 0, sizeof(sim_status));*/ - tapi_err = tel_get_sim_init_info(&sim_status, &sim_changed); + memset(&sim_status, 0, sizeof(sim_status)); + tapi_err = tel_get_sim_init_info(pagent->tapi_handle, &sim_status, &sim_changed); if (TAPI_API_SUCCESS != tapi_err) { - CALL_ENG_DEBUG(ENG_DEBUG, "tapi_sim_get_card_type failed.. tapi_err = %d", tapi_err); + CALL_ENG_DEBUG(ENG_DEBUG, "tel_get_sim_init_info failed.. tapi_err = %d", tapi_err); pagent->bis_no_sim = TRUE; } else { - tel_get_sim_type(&card_type); + + tapi_err = tel_get_sim_type(pagent->tapi_handle, &card_type); + if (TAPI_API_SUCCESS == tapi_err) { + CALL_ENG_DEBUG(ENG_DEBUG, "tel_get_sim_type failed.. tapi_err = %d", tapi_err); + } + pagent->card_type = card_type; CALL_ENG_DEBUG(ENG_DEBUG, "card_status = %d, card_type = %d", sim_status, pagent->card_type); + /*Telephony team's reqeust..*/ switch (sim_status) { - case TAPI_SIM_STATUS_CARD_NOT_PRESENT: /* = 0x01, /**< Card not present */ - case TAPI_SIM_STATUS_CARD_REMOVED: /* =0x0b, /**< Card removed **/ + case TAPI_SIM_STATUS_CARD_NOT_PRESENT: /* = 0x01, < Card not present */ + case TAPI_SIM_STATUS_CARD_REMOVED: /* =0x0b, < Card removed **/ pagent->bis_no_sim = TRUE; break; - case TAPI_SIM_STATUS_CARD_ERROR: /* = 0x00, /**< Bad card / On the fly SIM gone bad **/ - case TAPI_SIM_STATUS_SIM_INITIALIZING: /* = 0x02, /**< Sim is Initializing state **/ - case TAPI_SIM_STATUS_SIM_INIT_COMPLETED: /* = 0x03, /**< Sim Initialization ok **/ - case TAPI_SIM_STATUS_SIM_PIN_REQUIRED: /* = 0x04, /**< PIN required state **/ - case TAPI_SIM_STATUS_SIM_PUK_REQUIRED: /* = 0x05, /**< PUK required state **/ - case TAPI_SIM_STATUS_CARD_BLOCKED: /* = 0x06, /**< PIN/PUK blocked(permanently blocked- All the attempts for PIN/PUK failed) **/ - case TAPI_SIM_STATUS_SIM_NCK_REQUIRED: /* = 0x07, /**< Network Control Key required state **/ - case TAPI_SIM_STATUS_SIM_NSCK_REQUIRED: /* = 0x08, /**< Network Subset Control Key required state **/ - case TAPI_SIM_STATUS_SIM_SPCK_REQUIRED: /* = 0x09, /**< Service Provider Control Key required state **/ - case TAPI_SIM_STATUS_SIM_CCK_REQUIRED: /* = 0x0a, /**< Corporate Control Key required state **/ + case TAPI_SIM_STATUS_CARD_ERROR: /* = 0x00, < Bad card / On the fly SIM gone bad **/ + case TAPI_SIM_STATUS_SIM_INITIALIZING: /* = 0x02, < Sim is Initializing state **/ + case TAPI_SIM_STATUS_SIM_INIT_COMPLETED: /* = 0x03, < Sim Initialization ok **/ + case TAPI_SIM_STATUS_SIM_PIN_REQUIRED: /* = 0x04, < PIN required state **/ + case TAPI_SIM_STATUS_SIM_PUK_REQUIRED: /* = 0x05, < PUK required state **/ + case TAPI_SIM_STATUS_CARD_BLOCKED: /* = 0x06, < PIN/PUK blocked(permanently blocked- All the attempts for PIN/PUK failed) **/ + case TAPI_SIM_STATUS_SIM_NCK_REQUIRED: /* = 0x07, < Network Control Key required state **/ + case TAPI_SIM_STATUS_SIM_NSCK_REQUIRED: /* = 0x08, < Network Subset Control Key required state **/ + case TAPI_SIM_STATUS_SIM_SPCK_REQUIRED: /* = 0x09, < Service Provider Control Key required state **/ + case TAPI_SIM_STATUS_SIM_CCK_REQUIRED: /* = 0x0a, < Corporate Control Key required state **/ case TAPI_SIM_STATUS_SIM_LOCK_REQUIRED: pagent->bis_no_sim = FALSE; break; @@ -425,88 +450,81 @@ static gboolean __call_vc_subscribe_tapi_event(call_vc_callagent_state_t *pcall_ TapiResult_t api_err = TAPI_API_SUCCESS; int num_event = 0; - if (tel_init() == TAPI_API_SUCCESS) { + pcall_agent->tapi_handle = tel_init(NULL); + if (pcall_agent->tapi_handle != NULL) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_init() success."); } else { CALL_ENG_DEBUG(ENG_DEBUG, "tel_init() failed."); return FALSE; } - int call_event_list[] = { - TAPI_EVENT_CALL_SETUP_CNF, - TAPI_EVENT_CALL_ALERT_IND, - TAPI_EVENT_CALL_CONNECTED_IND, - TAPI_EVENT_CALL_INCOM_IND, - TAPI_EVENT_CALL_ANSWER_CNF, - TAPI_EVENT_CALL_RETRIEVE_CNF, - TAPI_EVENT_CALL_RETRIEVE_IND, - TAPI_EVENT_CALL_HOLD_IND, - TAPI_EVENT_CALL_HOLD_CNF, - TAPI_EVENT_CALL_TRANSFER_CNF, - TAPI_EVENT_CALL_TRANSFER_IND, - TAPI_EVENT_CALL_SETUPCONFERENCE_CNF, - TAPI_EVENT_CALL_SETUPCONFERENCE_IND, - TAPI_EVENT_CALL_SPLITCONFERENCE_CNF, - TAPI_EVENT_CALL_SEND_DTMF_CNF, - TAPI_EVENT_CALL_WAITING_IND, - TAPI_EVENT_CALL_FORWARD_IND, - TAPI_EVENT_CALL_RELEASE_CNF, - TAPI_EVENT_CALL_RELEASE_ALL_CNF, - TAPI_EVENT_CALL_RELEASE_ALL_ACTIVE_CNF, - TAPI_EVENT_CALL_RELEASE_ALL_HELD_CNF, - TAPI_EVENT_CALL_END_IND, - TAPI_EVENT_CALL_BARRING_IND, - TAPI_EVENT_CALL_CUGINFO_IND, - TAPI_EVENT_CALL_AOCINFO_IND, - TAPI_EVENT_CALL_CALLINGNAMEINFO_IND, - TAPI_EVENT_CALL_CONNECTEDNUMBERINFO_IND, - TAPI_EVENT_CALL_CLISUPRESSIONREJ_IND, - TAPI_EVENT_CALL_DEFLECTED_IND, - TAPI_EVENT_CALL_UNCOND_FORWARDING_IND, - TAPI_EVENT_CALL_COND_FORWARDING_IND, - - TAPI_EVENT_SS_AOC_RSP, - - TAPI_EVENT_SOUND_VOLUMECTRL_RSP, /*CALL_VC_TAPI_CALL_EVENT_MAX_NUM : 33*/ + const char *call_event_list[] = { + TAPI_NOTI_VOICE_CALL_STATUS_IDLE, + TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE, + TAPI_NOTI_VOICE_CALL_STATUS_DIALING, + TAPI_NOTI_VOICE_CALL_STATUS_ALERT, + TAPI_NOTI_VOICE_CALL_STATUS_INCOMING, + TAPI_NOTI_VOICE_CALL_STATUS_WAITING, + TAPI_NOTI_CALL_INFO_CALL_CONNECTED_LINE, + TAPI_NOTI_CALL_INFO_WAITING, + TAPI_NOTI_CALL_INFO_CUG, + TAPI_NOTI_CALL_INFO_FORWARDED, + TAPI_NOTI_CALL_INFO_BARRED_INCOMING, + TAPI_NOTI_CALL_INFO_BARRED_OUTGOING, + TAPI_NOTI_CALL_INFO_DEFLECTED, + TAPI_NOTI_CALL_INFO_CLIR_SUPPRESSION_REJECT, + TAPI_NOTI_CALL_INFO_FORWARD_UNCONDITIONAL, + TAPI_NOTI_CALL_INFO_FORWARD_CONDITIONAL, + TAPI_NOTI_CALL_INFO_CALL_LINE_IDENTITY, + TAPI_NOTI_CALL_INFO_CALL_NAME_INFORMATION, + TAPI_NOTI_CALL_INFO_FORWARDED_CALL, + TAPI_NOTI_CALL_INFO_CUG_CALL, + TAPI_NOTI_CALL_INFO_DEFLECTED_CALL, + TAPI_NOTI_CALL_INFO_TRANSFERED_CALL, + TAPI_NOTI_CALL_INFO_HELD, + TAPI_NOTI_CALL_INFO_ACTIVE, + TAPI_NOTI_CALL_INFO_JOINED, + TAPI_NOTI_CALL_INFO_RELEASED_ON_HOLD, + TAPI_NOTI_CALL_INFO_TRANSFER_ALERT, + TAPI_NOTI_CALL_INFO_TRANSFERED, + TAPI_NOTI_CALL_SOUND_WBAMR, }; num_event = sizeof(call_event_list) / sizeof(int); for (index = 0; index < num_event; index++) { - api_err = tel_register_event(call_event_list[index], &pcall_agent->subscription_id[index], (TelAppCallback) & __call_vc_handle_tapi_events, NULL); + api_err = tel_register_noti_event(pcall_agent->tapi_handle, call_event_list[index], __call_vc_handle_tapi_events, NULL); if (api_err != TAPI_API_SUCCESS) { - CALL_ENG_DEBUG(ENG_DEBUG, "tel_register_event() failed.. event id:[%d], api_err:[%d]", call_event_list[index], api_err); + CALL_ENG_DEBUG(ENG_DEBUG, "tel_register_noti_event() failed.. event id:[%s], api_err:[%d]", call_event_list[index], api_err); return FALSE; } } - int ready_event_list[] = { - TAPI_EVENT_POWER_SERVICE_READY_IND, /*CALL_VC_TAPI_READY_EVENT_NUM 1*/ + const char *ready_event_list[] = { + TAPI_NOTI_MODEM_POWER, }; num_event = sizeof(ready_event_list) / sizeof(int); for (index = 0; index < num_event; index++) { - api_err = tel_register_event(ready_event_list[index], &pcall_agent->subscription_id[index + CALL_VC_TAPI_CALL_EVENT_MAX_NUM], (TelAppCallback) & __call_vc_tapi_initialized_cb, NULL); + api_err = tel_register_noti_event(pcall_agent->tapi_handle, ready_event_list[index], __call_vc_tapi_initialized_cb, NULL); if (api_err != TAPI_API_SUCCESS) { - CALL_ENG_DEBUG(ENG_DEBUG, "tel_register_event() failed.. event id:[%d], api_err:[%d]", ready_event_list[index], api_err); + CALL_ENG_DEBUG(ENG_DEBUG, "tel_register_noti_event() failed.. event id:[%s], api_err:[%d]", ready_event_list[index], api_err); return FALSE; } } - int sat_event_list[] = { - TAPI_EVENT_SAT_SETUP_CALL_IND, - TAPI_EVENT_SAT_CALL_CONTROL_IND, - TAPI_EVENT_SAT_SEND_DTMF_IND, /*CALL_VC_SIMATK_EVENT_MAX_NUM : 3*/ +#if 0 + const char *sat_event_list[] = { + "SETUP CALL"/*TAPI_EVENT_SAT_SETUP_CALL_IND*/, + "CALL CONTROL" /*TAPI_EVENT_SAT_CALL_CONTROL_IND*/, + "SEND DTMF" /*TAPI_EVENT_SAT_SEND_DTMF_IND*/, /*CALL_VC_SIMATK_EVENT_MAX_NUM : 3*/ }; num_event = sizeof(sat_event_list) / sizeof(int); for (index = 0; index < num_event; index++) { - api_err = tel_register_event(sat_event_list[index], &pcall_agent->subscription_id[index + CALL_VC_TAPI_CALL_EVENT_MAX_NUM + CALL_VC_TAPI_READY_EVENT_NUM], (TelAppCallback) & __call_vc_handle_sat_engine_events_cb, NULL); + api_err = tel_register_noti_event(pcall_agent->tapi_handle, sat_event_list[index], __call_vc_handle_sat_engine_events_cb, NULL); if (api_err != TAPI_API_SUCCESS) { - CALL_ENG_DEBUG(ENG_DEBUG, "tel_register_event() failed.. event id:[%d], api_err:[%d]", sat_event_list[index], api_err); + CALL_ENG_DEBUG(ENG_DEBUG, "tel_register_noti_event() failed.. event id:[%s], api_err:[%d]", sat_event_list[index], api_err); return FALSE; } } - - if (tel_register_app_name("org.tizen.voicecall") != TAPI_API_SUCCESS) { - CALL_ENG_DEBUG(ENG_DEBUG, "tel_register_app_name() failed"); - } +#endif gpcall_agent_for_callback = pcall_agent; @@ -524,9 +542,6 @@ static gboolean __call_vc_create_outgoing_callinfo(call_vc_callagent_state_t *pa _vc_core_cm_clear_call_object(pcall_object); - /*Initialize following Call Agents state to defaults.*/ - pagent->bonly_sos_call = FALSE; - /*Update CallObjects state to Prepare Outgoing*/ pcall_object->state = VC_CALL_STATE_PREPARE_OUTGOING; @@ -540,11 +555,8 @@ static gboolean __call_vc_create_outgoing_callinfo(call_vc_callagent_state_t *pa switch (pcall_object->call_type) { case VC_CALL_ORIG_TYPE_EMERGENCY: { - pagent->bonly_sos_call = TRUE; pcall_object->bemergency_number = TRUE; -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->source_tel_number, sizeof(pcall_object->source_tel_number), psetup_call_info->source_tel_number); -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->tel_number, sizeof(pcall_object->tel_number), psetup_call_info->tel_number); return TRUE; } @@ -552,36 +564,26 @@ static gboolean __call_vc_create_outgoing_callinfo(call_vc_callagent_state_t *pa case VC_CALL_ORIG_TYPE_PINLOCK: { CALL_ENG_DEBUG(ENG_DEBUG, "PIN LOCK!!!!"); - pagent->bonly_sos_call = TRUE; -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->source_tel_number, sizeof(pcall_object->source_tel_number), psetup_call_info->source_tel_number); -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->tel_number, sizeof(pcall_object->tel_number), psetup_call_info->tel_number); } break; case VC_CALL_ORIG_TYPE_NOSIM: /*no sim (pagent->bis_no_sim == TRUE)*/ { - pagent->bonly_sos_call = TRUE; -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->source_tel_number, sizeof(pcall_object->source_tel_number), psetup_call_info->source_tel_number); -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->tel_number, sizeof(pcall_object->tel_number), psetup_call_info->tel_number); } break; case VC_CALL_ORIG_TYPE_NORMAL: case VC_CALL_ORIG_TYPE_SAT: { -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->source_tel_number, sizeof(pcall_object->source_tel_number), psetup_call_info->source_tel_number); -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->tel_number, sizeof(pcall_object->tel_number), psetup_call_info->tel_number); } break; case VC_CALL_ORIG_TYPE_VOICEMAIL: { -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->source_tel_number, sizeof(pcall_object->source_tel_number), psetup_call_info->source_tel_number); -/*PDIAL_SEND_DTMF*/ _vc_core_util_strcpy(pcall_object->tel_number, sizeof(pcall_object->tel_number), psetup_call_info->tel_number); } break; @@ -596,7 +598,7 @@ static gboolean __call_vc_create_outgoing_callinfo(call_vc_callagent_state_t *pa /*Check for Emergency Number */ _vc_core_util_extract_call_number(pcall_object->tel_number, call_number, sizeof(call_number)); - pcall_object->bemergency_number = _vc_core_util_check_emergency_number(pagent->card_type, call_number, pagent->bis_no_sim, &pcall_object->ecc_category); + pcall_object->bemergency_number = _vc_core_ecc_check_emergency_number(pagent->tapi_handle, pagent->card_type, call_number, pagent->bis_no_sim, &pcall_object->ecc_category); CALL_ENG_DEBUG(ENG_DEBUG, "no_sim=%d, emergency_number=%d", pagent->bis_no_sim, pcall_object->bemergency_number); @@ -675,7 +677,7 @@ static gboolean __call_vc_request_sat_call(call_vc_callagent_state_t *pagent, in { pagent->call_manager.setupcall_info.satcall_setup_info.redial = TRUE; } - case TAPI_SAT_SETUP_CALL_PUT_ALL_OTHER_CALLS_ON_HOLD: /*Fall Through*/ + case TAPI_SAT_SETUP_CALL_PUT_ALL_OTHER_CALLS_ON_HOLD: /*Fall Through */ { if (_vc_core_cm_isexists_active_call(&pagent->call_manager) && _vc_core_cm_isexists_held_call(&pagent->call_manager)) { CALL_ENG_DEBUG(ENG_DEBUG, "Both Activee & Hld call exists, SAT Call cannot be continued"); @@ -710,7 +712,7 @@ static gboolean __call_vc_request_sat_call(call_vc_callagent_state_t *pagent, in { pagent->call_manager.setupcall_info.satcall_setup_info.redial = TRUE; } - case TAPI_SAT_SETUP_CALL_DISCONN_ALL_OTHER_CALLS: /*Fall Through*/ + case TAPI_SAT_SETUP_CALL_DISCONN_ALL_OTHER_CALLS: /*Fall Through */ { if (_vc_core_cm_isexists_active_call(&pagent->call_manager) || _vc_core_cm_isexists_held_call(&pagent->call_manager)) { /*Disconnect all calls and setup call */ @@ -804,7 +806,7 @@ voicecall_error_t _vc_core_engine_prepare_call(voicecall_engine_t *pvoicecall_ag TelSimCardStatus_t sim_status; TelSimCardType_t card_type = 0; int sim_changed = 0; - gboolean status = FALSE; + int status = 0; int nIndex = 0; int error_code = 0; @@ -817,10 +819,10 @@ voicecall_error_t _vc_core_engine_prepare_call(voicecall_engine_t *pvoicecall_ag return ERROR_VOICECALL_INVALID_TELEPHONE_NUMBER; } - CALL_ENG_KPI("tel_check_service_ready start"); - tapi_err = tel_check_service_ready(&status); - CALL_ENG_KPI("tel_check_service_ready done"); - if (TAPI_API_SUCCESS != tapi_err || FALSE == status) { + CALL_ENG_KPI("tel_check_modem_power_status start"); + tapi_err = tel_check_modem_power_status(pagent->tapi_handle, &status); + CALL_ENG_KPI("tel_check_modem_power_status done"); + if (TAPI_API_SUCCESS != tapi_err || 1 /* offline */ == status || 2 /* Error */== status) { CALL_ENG_DEBUG(ENG_DEBUG, "Tapi not initialized"); return ERROR_VOICECALL_PHONE_NOT_INITIALIZED; } @@ -834,7 +836,7 @@ voicecall_error_t _vc_core_engine_prepare_call(voicecall_engine_t *pvoicecall_ag /*memset(&sim_status, 0, sizeof(sim_status));*/ CALL_ENG_KPI("tel_get_sim_init_info start"); - tapi_err = tel_get_sim_init_info(&sim_status, &sim_changed); + tapi_err = tel_get_sim_init_info(pagent->tapi_handle, &sim_status, &sim_changed); CALL_ENG_KPI("tel_get_sim_init_info done"); if (TAPI_API_SUCCESS != tapi_err) { @@ -844,26 +846,29 @@ voicecall_error_t _vc_core_engine_prepare_call(voicecall_engine_t *pvoicecall_ag psetup_call_info->call_type = VC_CALL_ORIG_TYPE_NOSIM; } else { CALL_ENG_KPI("tel_get_sim_type start"); - tel_get_sim_type(&card_type); + tapi_err = tel_get_sim_type(pagent->tapi_handle, &card_type); + if (TAPI_API_SUCCESS != tapi_err) { + CALL_ENG_DEBUG(ENG_DEBUG, "tel_get_sim_type failed.. tapi_err = %d", tapi_err); + } CALL_ENG_KPI("tel_get_sim_type done"); pagent->card_type = card_type; CALL_ENG_DEBUG(ENG_DEBUG, "card_status = %d, card_type = %d", sim_status, pagent->card_type); switch (sim_status) { - case TAPI_SIM_STATUS_CARD_NOT_PRESENT: /* = 0x01, /**< Card not present **/ - case TAPI_SIM_STATUS_CARD_REMOVED: /* =0x0b, /**< Card removed **/ + case TAPI_SIM_STATUS_CARD_NOT_PRESENT: /* = 0x01, < Card not present **/ + case TAPI_SIM_STATUS_CARD_REMOVED: /* =0x0b, < Card removed **/ pagent->bis_no_sim = TRUE; break; - case TAPI_SIM_STATUS_CARD_ERROR: /* = 0x00, /**< Bad card / On the fly SIM gone bad **/ - case TAPI_SIM_STATUS_SIM_INITIALIZING: /* = 0x02, /**< Sim is Initializing state **/ - case TAPI_SIM_STATUS_SIM_INIT_COMPLETED: /* = 0x03, /**< Sim Initialization ok **/ - case TAPI_SIM_STATUS_SIM_PIN_REQUIRED: /* = 0x04, /**< PIN required state **/ - case TAPI_SIM_STATUS_SIM_PUK_REQUIRED: /* = 0x05, /**< PUK required state **/ - case TAPI_SIM_STATUS_CARD_BLOCKED: /* = 0x06, /**< PIN/PUK blocked(permanently blocked- All the attempts for PIN/PUK failed) **/ - case TAPI_SIM_STATUS_SIM_NCK_REQUIRED: /* = 0x07, /**< Network Control Key required state **/ - case TAPI_SIM_STATUS_SIM_NSCK_REQUIRED: /* = 0x08, /**< Network Subset Control Key required state **/ - case TAPI_SIM_STATUS_SIM_SPCK_REQUIRED: /* = 0x09, /**< Service Provider Control Key required state **/ - case TAPI_SIM_STATUS_SIM_CCK_REQUIRED: /* = 0x0a, /**< Corporate Control Key required state **/ + case TAPI_SIM_STATUS_CARD_ERROR: /* = 0x00, < Bad card / On the fly SIM gone bad **/ + case TAPI_SIM_STATUS_SIM_INITIALIZING: /* = 0x02, < Sim is Initializing state **/ + case TAPI_SIM_STATUS_SIM_INIT_COMPLETED: /* = 0x03, < Sim Initialization ok **/ + case TAPI_SIM_STATUS_SIM_PIN_REQUIRED: /* = 0x04, < PIN required state **/ + case TAPI_SIM_STATUS_SIM_PUK_REQUIRED: /* = 0x05, < PUK required state **/ + case TAPI_SIM_STATUS_CARD_BLOCKED: /* = 0x06, < PIN/PUK blocked(permanently blocked- All the attempts for PIN/PUK failed) **/ + case TAPI_SIM_STATUS_SIM_NCK_REQUIRED: /* = 0x07, < Network Control Key required state **/ + case TAPI_SIM_STATUS_SIM_NSCK_REQUIRED: /* = 0x08, < Network Subset Control Key required state **/ + case TAPI_SIM_STATUS_SIM_SPCK_REQUIRED: /* = 0x09, < Service Provider Control Key required state **/ + case TAPI_SIM_STATUS_SIM_CCK_REQUIRED: /* = 0x0a, < Corporate Control Key required state **/ case TAPI_SIM_STATUS_SIM_LOCK_REQUIRED: pagent->bis_no_sim = FALSE; break; @@ -1133,7 +1138,7 @@ static gboolean __call_vc_handle_sat_engine_events(call_vc_callagent_state_t *pc call_vc_sat_callinfo.sat_mo_call_ctrl_res = CALL_CHANGED_TO_SS; CALL_ENG_DEBUG(ENG_DEBUG, "VC Call Control Response Event: %d", call_vc_sat_callinfo.sat_mo_call_ctrl_res); } else { - objectInfo.bemergency_number = _vc_core_util_check_emergency_number(pagent->card_type, objectInfo.connected_telnumber, pagent->bis_no_sim, &objectInfo.ecc_category); + objectInfo.bemergency_number = _vc_core_ecc_check_emergency_number(pagent->tapi_handle, pagent->card_type, objectInfo.connected_telnumber, pagent->bis_no_sim, &objectInfo.ecc_category); _vc_core_cm_set_outgoing_call_info(&pagent->call_manager, &objectInfo); call_vc_sat_callinfo.duration = psatsetup_info->satengine_setupcall_data.duration; @@ -1205,7 +1210,6 @@ static gboolean __call_vc_reject_call_full_idle_cb(gpointer puser_data) { call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)puser_data; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int pReqId = VC_RQSTID_DEFAULT; call_vc_call_objectinfo_t call_object; CALL_ENG_DEBUG(ENG_DEBUG, "Rejecting the [Call:%d] in IDLE CB", gincoming_call_handle); @@ -1215,7 +1219,7 @@ static gboolean __call_vc_reject_call_full_idle_cb(gpointer puser_data) if (VC_CALL_STATE_REJECTED == call_object.state) { /*Answer the incoming call by accepting or rejecting the call */ - tapi_err = tel_answer_call(gincoming_call_handle, TAPI_CALL_ANSWER_REJECT, &pReqId); + tapi_err = tel_answer_call(pcall_agent->tapi_handle, gincoming_call_handle, TAPI_CALL_ANSWER_REJECT, _vc_core_engine_answer_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_ERR, "tel_answer_call failed, Error: %d", tapi_err); } @@ -1229,14 +1233,14 @@ static gboolean __call_vc_reject_call_full_idle_cb(gpointer puser_data) /*Always reject the call, if the reject call handle is valid*/ static gboolean __call_vc_reject_call_idle_cb(gpointer puser_data) { + call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)puser_data; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int pReqId = VC_RQSTID_DEFAULT; CALL_ENG_DEBUG(ENG_DEBUG, "Rejecting the [Call Handle :%d] in IDLE CB", gincoming_call_handle); if (gphone_rejected_call != -1) { /*Answer the incoming call by accepting or rejecting the call */ - tapi_err = tel_answer_call(gphone_rejected_call, TAPI_CALL_ANSWER_REJECT, &pReqId); + tapi_err = tel_answer_call(pcall_agent->tapi_handle, gphone_rejected_call, TAPI_CALL_ANSWER_REJECT, _vc_core_engine_answer_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_ERR, "tel_answer_call failed, Error: %d", tapi_err); } @@ -1379,752 +1383,303 @@ void _vc_core_engine_handle_incoming_tapi_events(void *mt_data, void *userdata) } -static void __call_vc_handle_tapi_events(TelTapiEvent_t *event, void *userdata) +static void __call_vc_handle_tapi_events(TapiHandle *handle, const char *noti_id, void *data, void *user_data) { - int event_type = event->EventType; - int status = event->Status; - char *data = event->pData; call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; VOICECALL_RETURN_IF_FAIL(pagent != NULL); - CALL_ENG_DEBUG(ENG_WARN, "event_type:[0x%x], status= %d", event_type, status); + CALL_ENG_DEBUG(ENG_WARN, "event_type:[%s]", noti_id); /* Process TAPI events */ - switch (event_type) { -#ifdef _INCOM_END_ - case TAPI_EVENT_CALL_INCOM_IND: - { - int current_mt_call_handle = -1; - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_INCOM_IND..."); - - /*Safety Check to avoid the mutiple incoming noti for the same call */ - current_mt_call_handle = _vc_core_cm_get_incoming_call_handle(&pagent->call_manager); - CALL_ENG_DEBUG(ENG_ERR, "current_mt_call_handle = %d", current_mt_call_handle); - - if (current_mt_call_handle != VC_TAPI_INVALID_CALLHANDLE) { - TelCallIncomingCallInfo_t mt_call_info; - CALL_ENG_DEBUG(ENG_ERR, "Already an Incoming Call exits ,Problem in accpeting the incoming call, Current Call Details"); - CALL_VC_DUMP_CALLDETAILS(&pagent->call_manager); - CALL_ENG_DEBUG(ENG_ERR, "****************Currently received call details *************************"); - - memset(&mt_call_info, 0, sizeof(TelCallIncomingCallInfo_t)); - memcpy(&mt_call_info, data, sizeof(TelCallIncomingCallInfo_t)); - CALL_ENG_DEBUG(ENG_ERR, "****************call handle = [%d] *************************", mt_call_info.CallHandle); - CALL_ENG_DEBUG(ENG_ERR, "****************call Number = [%s] *************************", mt_call_info.szCallingPartyNumber); - CALL_ENG_DEBUG(ENG_ERR, "**************** Ignoring this incoming notification *************************"); - return; - } - - memset(&gincoming_call_info, 0, sizeof(TelCallIncomingCallInfo_t)); - memcpy(&gincoming_call_info, data, sizeof(TelCallIncomingCallInfo_t)); - gincoming_call_handle = gincoming_call_info.CallHandle; - - CALL_ENG_DEBUG(ENG_DEBUG, "CallHandle = %d, Number = %s", gincoming_call_info.CallHandle, gincoming_call_info.szCallingPartyNumber); - - /* Reject the Incoming call */ - if (FALSE == gphone_init_finished) { - CALL_ENG_DEBUG(ENG_ERR, "Phone is not initialized, So reject the Call"); - - gphone_rejected_call = gincoming_call_handle; - - /*Reject the Call in the Idle Callback */ - g_idle_add_full(G_PRIORITY_HIGH_IDLE, __call_vc_reject_call_idle_cb, pagent, NULL); - - return; - } - - /* Check the IO State before accepting the call */ - switch (pagent->io_state) { - case VC_INOUT_STATE_OUTGOING_WAIT_HOLD: - case VC_INOUT_STATE_OUTGOING_WAIT_ALERT: - case VC_INOUT_STATE_OUTGOING_WAIT_ORIG: - case VC_INOUT_STATE_OUTGOING_WAIT_CONNECTED: - case VC_INOUT_STATE_INCOME_END: /*If the Previous End event is still not prcocessed then reject the call */ - { - call_vc_call_objectinfo_t objectInfo; - - /* setting the new member info */ - _vc_core_cm_clear_call_object(&objectInfo); - objectInfo.call_handle = gincoming_call_handle; - _vc_core_cm_change_call_state(&objectInfo, VC_CALL_STATE_REJECTED); + if (strcmp(noti_id, TAPI_NOTI_VOICE_CALL_STATUS_IDLE) == 0) { + /* End IND */ + call_vc_call_objectinfo_t objectInfo; + voicecall_call_state_t present_call_state = VC_CALL_STATE_NONE; + call_vc_handle incoming_call_handle = VC_TAPI_INVALID_CALLHANDLE; + TelTapiEndCause_t tapi_cause = TAPI_CALL_END_NO_CAUSE; + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + TelCallStatusIdleNoti_t callIdleInfo; - /* add new member info */ - _vc_core_cm_add_call_object(&pagent->call_manager, &objectInfo); + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_VOICE_CALL_STATUS_IDLE.."); - /*Reject the Call in the Idle Callback */ - g_idle_add_full(G_PRIORITY_HIGH_IDLE, __call_vc_reject_call_full_idle_cb, pagent, NULL); + /* tapicallback data = TelCallStatusIdleNoti_t */ + if (data != NULL) { + memset(&callIdleInfo, 0, sizeof(TelCallStatusIdleNoti_t)); + memcpy(&callIdleInfo, data, sizeof(TelCallStatusIdleNoti_t)); - return; - } - break; - /*If Outgoing call is in any of the following wait state during an Incoming Event Cancel the Outgoing Call */ - case VC_INOUT_STATE_OUTGOING_WAIT_RELEASE: /*If Outgoing call is in any of the following wait state during an Incoming Event Cancel the Outgoing Call */ - case VC_INOUT_STATE_OUTGOING_ABORTED: - case VC_INOUT_STATE_OUTGOING_SHOW_REDIALCAUSE: - case VC_INOUT_STATE_OUTGOING_WAIT_REDIAL: - case VC_INOUT_STATE_OUTGOING_SHOW_RETRY_CALLBOX: - { - int mo_call_handle = -1; - mo_call_handle = _vc_core_cm_get_outgoing_call_handle(&pagent->call_manager); - _vc_core_cm_remove_call_object(&pagent->call_manager, mo_call_handle); - - /* Inform the Client that waiting outgoing call are cleaned up to accept the incoming call , */ - _vc_core_ca_send_event_to_client(pagent, VC_ACTION_INCOM_FORCE, mo_call_handle, 0, NULL); - } - default: - break; - } + call_handle = callIdleInfo.id; + tapi_cause = callIdleInfo.cause; + } - /*If Incoming End event is still pending, First Process the incoming end indication before processing the new - Incoming Call */ - if (VC_INOUT_STATE_INCOME_END == pagent->io_state) { - int mt_call_handle = -1; + CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d,end cause:%d", call_handle, tapi_cause); - CALL_ENG_DEBUG(ENG_ERR, "Previous Incoming End Call Not processed, Processing Here"); - mt_call_handle = _vc_core_cm_get_incoming_call_handle(&pagent->call_manager); - if (mt_call_handle != -1) { - __call_vc_incomingcall_endhandle(pagent, mt_call_handle); - } - } + /*the end of incoming call rejected by callagent, because the call had come before the phone is initialized */ + if (call_handle == gphone_rejected_call) { + CALL_ENG_DEBUG(ENG_DEBUG, "Rejected call..phone not initialized"); - /* Handle Incoming Call */ - if (TRUE == _vc_core_tapi_event_handle_incoming_event(pagent, gincoming_call_handle, &gincoming_call_info)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Using Idle Add Full with G_PRIORITY_HIGH_IDLE for processing Incoming Call"); - g_idle_add_full(G_PRIORITY_HIGH_IDLE, __call_vc_incoming_idle_cb, pagent, NULL); - } + gphone_rejected_call = VC_TAPI_INVALID_CALLHANDLE; + /*If no more calls available, End the Application */ + __vc_core_check_engine_active_task(pagent); return; } - break; -#endif - case TAPI_EVENT_CALL_RELEASE_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_RELEASE_CNF.."); - - if (TAPI_CAUSE_SUCCESS == status) { - /*Ignore this event as endication will be received from TAPI for the call release request */ - CALL_ENG_DEBUG(ENG_DEBUG, "Success response for Call Release request"); - break; - } else { - /*Call Release request failed, handle the call end process in this event itself as the end indication may not be released */ - CALL_ENG_DEBUG(ENG_ERR, "Call Release request failed, proceeding with Call end process"); - } - } - case TAPI_EVENT_CALL_END_IND: /*Fall Through */ - { - call_vc_call_objectinfo_t objectInfo; - voicecall_call_state_t present_call_state = VC_CALL_STATE_NONE; - call_vc_handle incoming_call_handle = VC_TAPI_INVALID_CALLHANDLE; - TelTapiEndCause_t tapi_cause = TAPI_CALL_END_NO_CAUSE; - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - TelCallEndInfo_t callEndInfo; - - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_END_IND.."); - - if (TAPI_EVENT_CALL_RELEASE_CNF == event_type) { - /* tapicallback data = Call Handle */ - memset(&call_handle, 0, sizeof(call_vc_handle)); - memcpy(&call_handle, data, sizeof(call_vc_handle)); - - /*Tapi doesn't send cause for TAPI_EVENT_CALL_RELEASE_CNF */ - tapi_cause = TAPI_CALL_END_NO_CAUSE; - } else { - /* tapicallback data = CallEndInfo */ - memset(&callEndInfo, 0, sizeof(TelCallEndInfo_t)); - memcpy(&callEndInfo, data, sizeof(TelCallEndInfo_t)); - - call_handle = callEndInfo.pCallHandle; - tapi_cause = callEndInfo.CallEndCause; - } - CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d,end cause:%d", call_handle, tapi_cause); - - /*the end of incoming call rejected by callagent, because the call had come before the phone is initialized */ - if (call_handle == gphone_rejected_call) { - CALL_ENG_DEBUG(ENG_DEBUG, "Rejected call..phone not initialized"); - - gphone_rejected_call = VC_TAPI_INVALID_CALLHANDLE; + incoming_call_handle = _vc_core_cm_get_incoming_call_handle(&pagent->call_manager); + present_call_state = _vc_core_cm_get_call_state(&pagent->call_manager, call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "New Call Handle = %d, Already registered MT call handle : %d", call_handle, incoming_call_handle); + switch (present_call_state) { + case VC_CALL_STATE_NONE: + case VC_CALL_STATE_ENDED: + case VC_CALL_STATE_ENDED_FINISH: + { + CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d state is %d", call_handle, present_call_state); /*If no more calls available, End the Application */ __vc_core_check_engine_active_task(pagent); return; } + break; + case VC_CALL_STATE_REJECTED: + { + /*End of incoming call (not registered as incoming call in CallAgent) rejected by callagent */ + if (incoming_call_handle != call_handle) { + _vc_core_cm_remove_call_object(&pagent->call_manager, call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "end of call rejected by callagent"); - incoming_call_handle = _vc_core_cm_get_incoming_call_handle(&pagent->call_manager); - present_call_state = _vc_core_cm_get_call_state(&pagent->call_manager, call_handle); - - CALL_ENG_DEBUG(ENG_DEBUG, "New Call Handle = %d, Already registered MT call handle : %d", call_handle, incoming_call_handle); - switch (present_call_state) { - case VC_CALL_STATE_NONE: - case VC_CALL_STATE_ENDED: - case VC_CALL_STATE_ENDED_FINISH: - { - CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d state is %d", call_handle, present_call_state); /*If no more calls available, End the Application */ __vc_core_check_engine_active_task(pagent); return; } - break; - case VC_CALL_STATE_REJECTED: - { - /*End of incoming call (not registered as incoming call in CallAgent) rejected by callagent */ - if (incoming_call_handle != call_handle) { - _vc_core_cm_remove_call_object(&pagent->call_manager, call_handle); - CALL_ENG_DEBUG(ENG_DEBUG, "end of call rejected by callagent"); - - /*If no more calls available, End the Application */ - __vc_core_check_engine_active_task(pagent); - return; - } - } - break; - default: - break; - } - - /*End of the call rejected by user or by callagent (when hold is failed) */ - if ((VC_INOUT_STATE_INCOME_WAIT_RELEASE == pagent->io_state) && (incoming_call_handle == call_handle)) { - _vc_core_cm_remove_call_object(&pagent->call_manager, call_handle); - - /*Change the In Out state to None*/ - _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_NONE); - - /*Notify Client about rejected Event*/ - _vc_core_ca_send_event_to_client(pagent, VC_CALL_REJECTED_END, call_handle, 0, NULL); - - return; - } - - /*End of Incoming Call */ - if (incoming_call_handle == call_handle) { - CALL_ENG_DEBUG(ENG_DEBUG, "Adding Incoming End Event to Idle Callback"); - _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_INCOME_END); - /*Make sure that the End Indication is processed always after the Incoming Indication , as both are - processed in Idle Add Callbacks */ - g_idle_add(__call_vc_incoming_call_end_idle_cb, pagent); - return; - } - - /*End of Outgoing Call */ - if (_vc_core_cm_get_outgoing_call_handle(&pagent->call_manager) == call_handle) { - __call_vc_outgoingcall_endhandle(pagent, call_handle, TAPI_EVENT_CALL_END_IND, tapi_cause); - return; - } - - /*End of Normal Connected Call */ - _vc_core_tapi_event_handle_call_end_event(pagent, event_type, call_handle, tapi_cause); - - CALL_VC_DUMP_CALLDETAILS(&pagent->call_manager); - _vc_core_cm_clear_call_object(&objectInfo); - if (FALSE == _vc_core_cm_get_call_object(&pagent->call_manager, call_handle, &objectInfo)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Call Already Cleared for Call Handle = %d", call_handle); - - /* - * Because of _vc_core_tapi_rqst_answer_call( .., VC_ANSWER_HOLD_ACTIVE_AND_ACCEPT,.. ) inside _vc_core_tapi_event_handle_call_end_event(), - * pagent->call_manager is cleared. so, we didn't send VC_CALL_NORMAL_END to call-ui. - * so we should send this event to call-ui. - */ - { - voice_call_end_cause_type_t end_cause_type; - _vc_core_tapi_event_get_end_cause_type(event_type, tapi_cause, &end_cause_type); - _vc_core_ca_send_event_to_client(pagent, VC_CALL_NORMAL_END, call_handle, end_cause_type, NULL); - } - } else { - _vc_core_ca_send_event_to_client(pagent, VC_CALL_NORMAL_END, objectInfo.call_handle, objectInfo.end_cause_type, NULL); - } - } - break; - case TAPI_EVENT_CALL_RELEASE_ALL_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_RELEASE_ALL_CNF"); - } - break; - case TAPI_EVENT_CALL_RELEASE_ALL_ACTIVE_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_RELEASE_ALL_ACTIVE_CNF"); - } - break; - case TAPI_EVENT_CALL_RELEASE_ALL_HELD_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_RELEASE_ALL_HELD_CNF"); - } - break; - case TAPI_EVENT_CALL_ALERT_IND: - { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - call_vc_handle mo_call_handle = VC_TAPI_INVALID_CALLHANDLE; - - CALL_ENG_KPI("TAPI_EVENT_CALL_ALERT_IND START"); - /*There are possiblities, that TAPI issued the Alert Notification and it is pending in the gmain loop, but meanwhile, the call - is released by the user - so ignore the event if it doesn't match with the IN OUT Wait state */ - if (VC_INOUT_STATE_OUTGOING_WAIT_ALERT != pagent->io_state) { - CALL_ENG_DEBUG(ENG_DEBUG, "Io State not in WAIT_ORIG, current io state is : %d", pagent->io_state); - return; - } - /*tapi_data = (call_handle)*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - CALL_ENG_DEBUG(ENG_DEBUG, "Alert Call Handle = %d", call_handle); - - mo_call_handle = _vc_core_cm_get_outgoing_call_handle(&pagent->call_manager); - CALL_ENG_DEBUG(ENG_DEBUG, "MO Call Handle = %d", mo_call_handle); - - /*Get the outgoing call handle from CallManger and check*/ - if ((VC_TAPI_INVALID_CALLHANDLE == call_handle) || (mo_call_handle != call_handle)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing call does not exist or call_handle doesn't match"); - break; - } - - _vc_core_tapi_event_handle_alert_event(pagent, call_handle); - CALL_ENG_KPI("TAPI_EVENT_CALL_ALERT_IND done"); - } - break; - case TAPI_EVENT_CALL_SETUP_CNF: - { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - call_vc_call_objectinfo_t objectInfo; - - CALL_ENG_DEBUG(ENG_DEBUG, "Data Received for Setup CNF is %p", data); - CALL_ENG_KPI("Set Up CNF start"); - - if (TRUE == _vc_core_cm_get_outgoing_call_info(&pagent->call_manager, &objectInfo)) { - CALL_ENG_DEBUG(ENG_DEBUG, "MO call index (%d)",objectInfo.call_id); - } else { - CALL_ENG_DEBUG(ENG_ERR, "EXCEPTION:Outgoing call Info Missing.."); - } - - /*Copy Telephony Data */ - /* tapi_data = (call_handle) */ - if (data != NULL) { - memcpy(&call_handle, data, sizeof(call_vc_handle)); - CALL_ENG_DEBUG(ENG_DEBUG, "Received Call Handle = %d", call_handle); - } - - if (VC_INOUT_STATE_OUTGOING_WAIT_ORIG != pagent->io_state) { - CALL_ENG_DEBUG(ENG_DEBUG, "Io State not in WAIT_ORIG, current io state is : %d", pagent->io_state); - return; - } - - if (TAPI_CAUSE_SUCCESS == status) { - /* Get the outgoing call handle from CallManger and check */ - if ((VC_TAPI_INVALID_CALLHANDLE == call_handle)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing call does not exist or call_handle doesn't match"); - break; - } - - /* Set the Call Handle to the CallbObject for future reference */ - objectInfo.call_handle = call_handle; - _vc_core_cm_set_outgoing_call_info(&pagent->call_manager, &objectInfo); - - _vc_core_tapi_event_handle_originated_event(pagent, call_handle); - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "MO Call SetupCNF Failed with error cause: %d", status); - - _vc_core_cm_clear_call_object(&objectInfo); - - __call_vc_outgoingcall_endhandle(pagent, objectInfo.call_handle, TAPI_EVENT_CALL_END_IND, TAPI_CC_CAUSE_FACILITY_REJECTED); } - CALL_ENG_KPI("Set Up CNF done"); + break; + default: + break; } - break; - case TAPI_EVENT_CALL_ANSWER_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_ANSWER_CNF"); - - if (status != TAPI_CAUSE_SUCCESS) { - /*If IO State is waiting for Answer Response */ - if ((VC_INOUT_STATE_INCOME_WAIT_CONNECTED == pagent->io_state) || (VC_INOUT_STATE_INCOME_WAIT_HOLD_CONNECTED == pagent->io_state) || (VC_INOUT_STATE_INCOME_WAIT_RELEASE_ACTIVE_CONNECTED == pagent->io_state)) { - int mt_call_handle = -1; - mt_call_handle = _vc_core_cm_get_incoming_call_handle(&pagent->call_manager); + /*End of the call rejected by user or by callagent (when hold is failed) */ + if ((VC_INOUT_STATE_INCOME_WAIT_RELEASE == pagent->io_state) && (incoming_call_handle == call_handle)) { + _vc_core_cm_remove_call_object(&pagent->call_manager, call_handle); - if (mt_call_handle != -1) { - CALL_ENG_DEBUG(ENG_DEBUG, "mt_call_handle = %d", mt_call_handle); + /*Change the In Out state to None*/ + _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_NONE); - /*Send Hold Failed Notification to client UI */ - if (pagent->callagent_state == CALL_VC_CA_STATE_WAIT_HOLD) { - _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); - _vc_core_ca_send_event_to_client(pagent, VC_ERROR_OCCURED, ERROR_VOICECALL_HOLD_FAILED, 0, NULL); - } + /*Notify Client about rejected Event*/ + _vc_core_ca_send_event_to_client(pagent, VC_CALL_REJECTED_END, call_handle, 0, NULL); - /*Send Incoming call MT End Indication to Client UI */ - _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_INCOME_END); - g_idle_add(__call_vc_incoming_call_end_idle_cb, pagent); - } - } - }else { - _vc_core_ca_send_event_to_client(pagent, VC_CALL_ANSWER_CNF, 0, 0, NULL); - } + return; } - break; - case TAPI_EVENT_CALL_CONNECTED_IND: - { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_CONNECTED_IND..."); - CALL_ENG_KPI("TAPI_EVENT_CALL_CONNECTED_IND start"); - /*tapi callback data = (call_handle)*/ - memcpy(&call_handle, data, sizeof(int)); - CALL_ENG_DEBUG(ENG_DEBUG, "IO State: %d", pagent->io_state); - CALL_ENG_DEBUG(ENG_DEBUG, "Connected Call Handle = %d", call_handle); - - if (call_handle == _vc_core_cm_get_incoming_call_handle(&pagent->call_manager)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call is being connected..."); - } else if (call_handle == _vc_core_cm_get_outgoing_call_handle(&pagent->call_manager)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing call is being connected..."); - } else { - CALL_ENG_DEBUG(ENG_ERR, "invalid connected event Call Handle = %d", call_handle); - - if ((VC_INVALID_CALL_INDEX != pagent->call_manager.mtcall_index) || (VC_INVALID_CALL_INDEX != pagent->call_manager.setupcall_info.mocall_index)) { - CALL_ENG_DEBUG(ENG_DEBUG, "incoming/outgoin calls call exits, invalid call handle [PROBLEM]"); - CALL_VC_DUMP_CALLDETAILS(&pagent->call_manager); - - assert(0); - } else { - CALL_ENG_DEBUG(ENG_ERR, "No pending calls to connect, ignoreing connect event for call handle= %d", call_handle); - return; - } - break; - } - - /*Handle Connected Call Event */ - _vc_core_tapi_event_handle_call_connect_event(pagent, call_handle); - CALL_ENG_KPI("TAPI_EVENT_CALL_CONNECTED_IND done"); + /*End of Incoming Call */ + if (incoming_call_handle == call_handle) { + CALL_ENG_DEBUG(ENG_DEBUG, "Adding Incoming End Event to Idle Callback"); + _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_INCOME_END); + /*Make sure that the End Indication is processed always after the Incoming Indication , as both are + processed in Idle Add Callbacks */ + g_idle_add(__call_vc_incoming_call_end_idle_cb, pagent); + return; } - break; - case TAPI_EVENT_CALL_HOLD_CNF: - { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_HOLD_CNF..."); - if (TAPI_CAUSE_SUCCESS == status) { - /*tapicallback data = call_handle*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - } else { - _vc_core_cm_get_first_active_call_handle(&pagent->call_manager, &call_handle); - } - - if (_vc_core_tapi_event_handle_call_held_event(pagent, call_handle, status) == FALSE) { - _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); - } else { - /* - Be carefull in clearing the end call member, because _vc_core_engine_status_is_any_call_ending - function depends on the end call object status. If it is cleared often, the check by - _vc_core_engine_status_is_any_call_ending becomes invalid - */ - _vc_core_cm_clear_endcall_member(&pagent->call_manager); - } + /*End of Outgoing Call */ + if (_vc_core_cm_get_outgoing_call_handle(&pagent->call_manager) == call_handle) { + __call_vc_outgoingcall_endhandle(pagent, call_handle, TAPI_NOTI_VOICE_CALL_STATUS_IDLE, tapi_cause); + return; } - break; - case TAPI_EVENT_CALL_RETRIEVE_CNF: - { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_RETRIEVE_CNF..."); + /*End of Normal Connected Call */ + _vc_core_tapi_event_handle_call_end_event(pagent, noti_id, call_handle, tapi_cause); - if (TAPI_CAUSE_SUCCESS == status) { - /*tapicallback data = call_handle*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - } else { - _vc_core_cm_get_first_held_call_handle(&pagent->call_manager, &call_handle); - } - - if (_vc_core_tapi_event_handle_call_retrieve_event(pagent, call_handle, status) == FALSE) { - _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); - } else { - /* - Be carefull in clearing the end call member, because _vc_core_engine_status_is_any_call_ending - function depends on the end call object status. If it is cleared often, the check by - _vc_core_engine_status_is_any_call_ending becomes invalid - */ - _vc_core_cm_clear_endcall_member(&pagent->call_manager); + CALL_VC_DUMP_CALLDETAILS(&pagent->call_manager); + _vc_core_cm_clear_call_object(&objectInfo); + if (FALSE == _vc_core_cm_get_call_object(&pagent->call_manager, call_handle, &objectInfo)) { + CALL_ENG_DEBUG(ENG_DEBUG, "Call Already Cleared for Call Handle = %d", call_handle); + + /* + * Because of _vc_core_tapi_rqst_answer_call( .., VC_ANSWER_HOLD_ACTIVE_AND_ACCEPT,.. ) inside _vc_core_tapi_event_handle_call_end_event(), + * pagent->call_manager is cleared. so, we didn't send VC_CALL_NORMAL_END to call-ui. + * so we should send this event to call-ui. + */ + { + voice_call_end_cause_type_t end_cause_type; + _vc_core_tapi_event_get_end_cause_type(pagent, noti_id, tapi_cause, &end_cause_type); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_NORMAL_END, call_handle, end_cause_type, NULL); } - + } else { + _vc_core_ca_send_event_to_client(pagent, VC_CALL_NORMAL_END, objectInfo.call_handle, objectInfo.end_cause_type, NULL); } - break; - case TAPI_EVENT_CALL_SETUPCONFERENCE_CNF: - { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_SETUPCONFERENCE_CNF..."); - - if (TAPI_CAUSE_SUCCESS == status) { - /*tapicallback data = call_handle*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - } else { - call_handle = 0; - } + } else if (strcmp(noti_id, TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE..."); + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + TelCallStatusActiveNoti_t callActiveInfo; - _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); - _vc_core_tapi_event_handle_call_join_event(pagent, call_handle, status); + if (data != NULL) { + memset(&callActiveInfo, 0, sizeof(TelCallStatusActiveNoti_t)); + memcpy(&callActiveInfo, data, sizeof(TelCallStatusActiveNoti_t)); + call_handle = callActiveInfo.id; } - break; - case TAPI_EVENT_CALL_SPLITCONFERENCE_CNF: - { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_SPLITCONFERENCE_CNF..."); + CALL_ENG_DEBUG(ENG_DEBUG, "IO State: %d", pagent->io_state); + CALL_ENG_DEBUG(ENG_DEBUG, "Connected Call Handle = %d", call_handle); - if (TAPI_CAUSE_SUCCESS == status) { - /*tapicallback data = call_handle*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - } - - _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); - _vc_core_tapi_event_handle_call_split_event(pagent, call_handle, status); - } - break; - case TAPI_EVENT_CALL_TRANSFER_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_TRANSFER_CNF"); + if (call_handle == _vc_core_cm_get_incoming_call_handle(&pagent->call_manager)) { + CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call is being connected..."); + } else if (call_handle == _vc_core_cm_get_outgoing_call_handle(&pagent->call_manager)) { + CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing call is being connected..."); + } else { + CALL_ENG_DEBUG(ENG_ERR, "invalid connected event Call Handle = %d", call_handle); - _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); - _vc_core_tapi_event_handle_call_transfer_event(pagent, status); - } - break; - case TAPI_EVENT_CALL_RETRIEVE_IND: - case TAPI_EVENT_CALL_HOLD_IND: - case TAPI_EVENT_CALL_TRANSFER_IND: - case TAPI_EVENT_CALL_SETUPCONFERENCE_IND: - case TAPI_EVENT_CALL_BARRING_IND: - case TAPI_EVENT_CALL_WAITING_IND: - case TAPI_EVENT_CALL_COND_FORWARDING_IND: - case TAPI_EVENT_CALL_UNCOND_FORWARDING_IND: - { - CALL_ENG_DEBUG(ENG_DEBUG, "Received Indication %d", event_type); - if (TRUE == __call_vc_is_callagent_waitstate(pagent)) { - CALL_ENG_DEBUG(ENG_DEBUG, "[Now tapi requesting...callagent_state=%d, not display network ind]", pagent->callagent_state); - return; + if ((VC_INVALID_CALL_INDEX != pagent->call_manager.mtcall_index) || (VC_INVALID_CALL_INDEX != pagent->call_manager.setupcall_info.mocall_index)) { + CALL_ENG_DEBUG(ENG_DEBUG, "incoming/outgoin calls call exits, invalid call handle [PROBLEM]"); + CALL_VC_DUMP_CALLDETAILS(&pagent->call_manager); + assert(0); } else { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - - /*tapicallback data = call_handle + cause*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - - CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d", call_handle); - - _vc_core_tapi_event_handle_notification(pagent, event_type, 0); - } - } - break; - case TAPI_EVENT_CALL_CUGINFO_IND: - { - CALL_ENG_DEBUG(ENG_DEBUG, "Received TAPI_EVENT_CALL_CUGINFO_IND"); - - if (TRUE == __call_vc_is_callagent_waitstate(pagent)) { - CALL_ENG_DEBUG(ENG_DEBUG, "[Now tapi requesting...callagent_state=%d, not display network ind]", pagent->callagent_state); + CALL_ENG_DEBUG(ENG_ERR, "No pending calls to connect, ignoreing connect event for call handle= %d", call_handle); return; - - } else { - int cugIndex = 0; - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - - /*tapicallback data = call_handle + cause*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - memcpy(&cugIndex, data + sizeof(call_vc_handle), sizeof(int)); - - /*cugindex is not used inside this function*/ - /*It may be used in the future*/ - _vc_core_tapi_event_handle_notification(pagent, event_type, cugIndex); } + return; } - break; - case TAPI_EVENT_CALL_CALLINGNAMEINFO_IND: - { - CALL_ENG_DEBUG(ENG_DEBUG, "Received TAPI_EVENT_CALL_CALLINGNAMEINFO_IND"); - CALL_ENG_DEBUG(ENG_DEBUG, "Event Not Handled, Feature Not Implemented"); - -#ifdef _CALLING_NAME_INFO_ - if (TRUE == __call_vc_is_callagent_waitstate(pagent)) { - CALL_ENG_DEBUG(ENG_DEBUG, "[Now tapi requesting...callagent_state=%d, not display network ind]", pagent->callagent_state); - return; - } else { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - /*Structure for calling name information */ - TelCallingNameInfo_t calling_nameinfo; - memset(&calling_nameinfo, 0, sizeof(TelCallingNameInfo_t)); - - /*TapiCallingNameInfo is padded as second parameneter - tapicallback data = call_handle + cause*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - memcpy(&calling_nameinfo, data + sizeof(call_vc_handle), sizeof(TelCallingNameInfo_t)); - - /*calling_info is not used in this function, so not passed. - It may be used in the future*/ - _vc_core_tapi_event_handle_notification(pagent, event_type, 0); - } -#endif - } - break; -#ifdef _OLD_TAPI_ - case TAPI_EVENT_CALL_SSNOTIFY_IND: - { - CALL_ENG_DEBUG(ENG_DEBUG, "Received TAPI_EVENT_CALL_SSNOTIFY_IND"); - CALL_ENG_DEBUG(ENG_DEBUG, "Event Not Handled, Feature Not Implemented"); + /*Handle Connected Call Event */ + _vc_core_tapi_event_handle_call_connect_event(pagent, call_handle); + CALL_ENG_KPI("TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE done"); + } else if (strcmp(noti_id, TAPI_NOTI_VOICE_CALL_STATUS_DIALING) == 0) { + /*Dialing IND*/ + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + TelCallStatusDialingNoti_t callDialingInfo; + call_vc_call_objectinfo_t objectInfo; - if (TRUE == __call_vc_is_callagent_waitstate(pagent)) { - CALL_ENG_DEBUG(ENG_DEBUG, "[Now tapi requesting...callagent_state=%d, not display network ind]", pagent->callagent_state); - return TRUE; + CALL_ENG_DEBUG(ENG_DEBUG, "Data Received for DIALING_IND is %p", data); - } else { - tapi_call_ss_codes_t ss_code; + if (TRUE == _vc_core_cm_get_outgoing_call_info(&pagent->call_manager, &objectInfo)) { + CALL_ENG_DEBUG(ENG_DEBUG, "MO call index (%d)",objectInfo.call_id); + } else { + CALL_ENG_DEBUG(ENG_ERR, "EXCEPTION:Outgoing call Info Missing.."); + } - /*ss_code is padded as first parameter in the data - data = ss_code*/ - memcpy(&ss_code, data, sizeof(tapi_call_ss_codes_t)); - _vc_core_tapi_event_handle_notification(pagent, event_type, ss_code); - } + /* tapicallback data = TelCallStatusHeldNoti_t */ + if (data != NULL) { + memset(&callDialingInfo, 0, sizeof(TelCallStatusDialingNoti_t)); + memcpy(&callDialingInfo, data, sizeof(TelCallStatusDialingNoti_t)); + call_handle = callDialingInfo.id; + CALL_ENG_DEBUG(ENG_DEBUG, "Received Call Handle = %d", call_handle); } - break; - - case TAPI_EVENT_CALL_REDIRECT_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "Received TAPI_EVENT_CALL_REDIRECT_CNF"); - CALL_ENG_DEBUG(ENG_DEBUG, "Event Not Handled, Feature Not Implemented"); - /*TODO abthul, not used currently */ + if (VC_INOUT_STATE_OUTGOING_WAIT_ORIG != pagent->io_state) { + CALL_ENG_DEBUG(ENG_DEBUG, "Io State not in WAIT_ORIG, current io state is : %d", pagent->io_state); return; - - if (TRUE == __call_vc_is_callagent_waitstate(pagent)) { - CALL_ENG_DEBUG(ENG_DEBUG, "[Now tapi requesting...callagent_state=%d, not display network ind]", pagent->callagent_state); - return; - } else { - gboolean bValue; - - /*bValue is padded as first parameter in data from TAPI - data = bValue*/ - memcpy(&bValue, data, sizeof(gboolean)); - _vc_core_tapi_event_handle_notification(pagent, event_type, bValue); - } } -#endif - break; - case TAPI_EVENT_CALL_FORWARD_IND: - { - CALL_ENG_DEBUG(ENG_DEBUG, "Received TAPI_EVENT_CALL_FORWARD_IND"); - - if (TRUE == __call_vc_is_callagent_waitstate(pagent)) { - CALL_ENG_DEBUG(ENG_DEBUG, "[Now tapi requesting...callagent_state=%d, not display network ind]", pagent->callagent_state); - return; - - } else { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - TelCallForwardType_t forwardind_type = -1; - - /*tapicallback data = call_handle + forwardind_type*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - memcpy(&forwardind_type, data + sizeof(call_vc_handle), sizeof(TelCallForwardType_t)); - _vc_core_tapi_event_handle_notification(pagent, event_type, forwardind_type); - } + /* Get the outgoing call handle from CallManger and check */ + if ((VC_TAPI_INVALID_CALLHANDLE == call_handle)) { + CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing call does not exist or call_handle doesn't match"); + return; } - break; - case TAPI_EVENT_CALL_AOCINFO_IND: - { - TelCallAocInfo_t aoc_info; - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - memset(&aoc_info, 0, sizeof(TelCallAocInfo_t)); - CALL_ENG_DEBUG(ENG_DEBUG, "Recived TAPI_EVENT_CALL_AOCINFO_IND..."); + /* Set the Call Handle to the CallbObject for future reference */ + objectInfo.call_handle = call_handle; + _vc_core_cm_set_outgoing_call_info(&pagent->call_manager, &objectInfo); - /*data = call_handle + tapi_call_aoc_info_t */ - memcpy(&call_handle, data, sizeof(int)); - memcpy(&aoc_info, (data + sizeof(int)), sizeof(TelCallAocInfo_t)); - - CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d", call_handle); - _vc_core_tapi_event_handle_aoc(pagent, call_handle, &aoc_info); + _vc_core_tapi_event_handle_originated_event(pagent, call_handle); + CALL_ENG_KPI("TAPI_NOTI_VOICE_CALL_STATUS_DIALING done"); + } else if (strcmp(noti_id, TAPI_NOTI_VOICE_CALL_STATUS_ALERT) == 0) { + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + call_vc_handle mo_call_handle = VC_TAPI_INVALID_CALLHANDLE; + TelCallStatusAlertNoti_t callAlertInfo; + + CALL_ENG_KPI("TAPI_NOTI_VOICE_CALL_STATUS_ALERT START"); + /*There are possiblities, that TAPI issued the Alert Notification and it is pending in the gmain loop, but meanwhile, the call + is released by the user - so ignore the event if it doesn't match with the IN OUT Wait state */ + if (VC_INOUT_STATE_OUTGOING_WAIT_ALERT != pagent->io_state) { + CALL_ENG_DEBUG(ENG_DEBUG, "Io State not in WAIT_ORIG, current io state is : %d", pagent->io_state); + return; } - break; - case TAPI_EVENT_SS_AOC_RSP: - { - TelCallAocInfo_t aoc_info; - - CALL_ENG_DEBUG(ENG_DEBUG, "Recived TAPI_EVENT_SS_AOC_RSP"); - if (TAPI_CAUSE_SUCCESS == status) { - memset(&aoc_info, 0, sizeof(TelCallAocInfo_t)); - memcpy(&aoc_info, data, sizeof(TelCallAocInfo_t)); - - switch (aoc_info.AocType) { - case TAPI_SS_AOC_TYPE_PUC: - CALL_ENG_DEBUG(ENG_DEBUG, "Recived aoc_ppm = %f", aoc_info.PPM); - pagent->aoc_ppm = aoc_info.PPM; - break; - default: - CALL_ENG_DEBUG(ENG_DEBUG, "Action not defined for AOC Type : %d", aoc_info.AocType); - } - } + if (data != NULL) { + memset(&callAlertInfo, 0, sizeof(TelCallStatusAlertNoti_t)); + memcpy(&callAlertInfo, data, sizeof(TelCallStatusAlertNoti_t)); + call_handle = callAlertInfo.id; } - break; - case TAPI_EVENT_CALL_CONNECTEDNUMBERINFO_IND: - { - TelCallConnectedNumberInfo_t connected_number_info; - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - memset(&connected_number_info, 0, sizeof(TelCallConnectedNumberInfo_t)); - - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_CONNECTEDNUMBERINFO_IND"); - - /*data = callhandle + 0(dwParam)*/ - memcpy(&call_handle, data, sizeof(call_vc_handle)); - memcpy(&connected_number_info, (data + sizeof(call_vc_handle)), sizeof(TelCallConnectedNumberInfo_t)); - CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d", call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "Alert Call Handle = %d", call_handle); - /*Abthul:todo , Check the usage of connected number info*/ - _vc_core_tapi_event_connected_line_ind_handle(pagent, call_handle, &connected_number_info); - } - break; - case TAPI_EVENT_CALL_SEND_DTMF_CNF: - { - CALL_ENG_DEBUG(ENG_DEBUG, "event_type == TAPI_EVENT_CALL_SEND_DTMF_CNF"); + mo_call_handle = _vc_core_cm_get_outgoing_call_handle(&pagent->call_manager); + CALL_ENG_DEBUG(ENG_DEBUG, "MO Call Handle = %d", mo_call_handle); - if (TAPI_CAUSE_SUCCESS != status) { - CALL_ENG_DEBUG(ENG_DEBUG, "Tapi Error Code %d", status); - /*Forward the events to client */ - _vc_core_ca_send_event_to_client(pagent, VC_CALL_DTMF_ACK, FALSE, 0, NULL); - } else { - /*Forward the events to client */ - _vc_core_ca_send_event_to_client(pagent, VC_CALL_DTMF_ACK, TRUE, 0, NULL); - } + /*Get the outgoing call handle from CallManger and check*/ + if ((VC_TAPI_INVALID_CALLHANDLE == call_handle) || (mo_call_handle != call_handle)) { + CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing call does not exist or call_handle doesn't match"); + return; } - break; - case TAPI_EVENT_SOUND_VOLUMECTRL_RSP: - { - int tapi_sound_path = 0; - int volume_level = 0; - tapi_sound_volumn_ctrl_res snd_resp_data; - - memset(&snd_resp_data, 0, sizeof(tapi_sound_volumn_ctrl_res)); - memcpy(&snd_resp_data, data, sizeof(tapi_sound_volumn_ctrl_res)); - - int i = 0; - tapi_sound_path = pagent->curr_tapi_path; - for (i = 0; i < snd_resp_data.num_record; i++) { - if (tapi_sound_path == snd_resp_data.pinfo[i].type) { - volume_level = snd_resp_data.pinfo[i].level; - break; - } - } - CALL_ENG_DEBUG(ENG_DEBUG, "Changed Vol Type = %d, Vol Level = %d", tapi_sound_path, volume_level); - _vc_core_ca_send_event_to_client(pagent, VC_CALL_GET_VOLUME_RESP, tapi_sound_path, volume_level, NULL); - } - break; - default: - CALL_ENG_DEBUG(ENG_DEBUG, "Default: event_type = %d", event_type); - break; + _vc_core_tapi_event_handle_alert_event(pagent, call_handle); + CALL_ENG_KPI("TAPI_NOTI_VOICE_CALL_STATUS_ALERT done"); + } else if (strcmp(noti_id, TAPI_NOTI_VOICE_CALL_STATUS_INCOMING) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_VOICE_CALL_STATUS_INCOMING is not used."); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_ACTIVE) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_ACTIVE"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_ACTIVATE, 0, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_HELD) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_HELD"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_HOLD, 0, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_TRANSFERED) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_TRANSFERRED"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_TRANSFER, 0, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_JOINED) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_JOINED"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_SETUPCONFERENCE, 0, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_WAITING) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_WAITING"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_WAITING, 0, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_FORWARDED) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_FORWARDED"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_FORWARD, VC_FRWD_IND_INCOM_IS_FRWD, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_BARRED_OUTGOING) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_BARRED_OUTGOING"); + pagent->barring_ind_type = VC_BARR_IND_ALL; + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_CUG) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_CUG"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_CUGINFO, 0, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_CALL_NAME_INFORMATION) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_CALL_NAME_INFORMATION"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_CALLINGNAMEINFO, 0, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_DEFLECTED) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_DEFLECTED"); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_FORWARD_UNCONDITIONAL) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_FORWARD_UNCONDITIONAL"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_SSNOTIFY, VC_SSNOTIFY_IND_CFU, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_INFO_FORWARD_CONDITIONAL) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_INFO_FORWARD_CONDITIONAL"); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_IND_SSNOTIFY, VC_SSNOTIFY_IND_ALL_COND_FORWARDING, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_SOUND_WBAMR) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_SOUND_WBAMR"); + TelCallSoundWbamrNoti_t wbamrInfo; + int wbamr_status = FALSE; + + if (data != NULL) { + memset(&wbamrInfo, 0, sizeof(TelCallSoundWbamrNoti_t)); + memcpy(&wbamrInfo, data, sizeof(TelCallSoundWbamrNoti_t)); + } + + CALL_ENG_DEBUG(ENG_DEBUG, "WBAMR is %d", wbamrInfo); + if (wbamrInfo == TAPI_CALL_SOUND_WBAMR_STATUS_ON) { + wbamr_status = TRUE; + } + + _vc_core_ca_send_event_to_client(pagent, VC_CALL_NOTI_WBAMR, wbamr_status, 0, NULL); + } else if (strcmp(noti_id, TAPI_NOTI_CALL_SOUND_NOISE_REDUCTION) == 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_NOTI_CALL_SOUND_NOISE_REDUCTION"); + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "ERROR!! Noti is not defined"); } - CALL_ENG_DEBUG(ENG_DEBUG, "tapi event(%d) processed done.", event_type); + + CALL_ENG_DEBUG(ENG_DEBUG, "tapi noti(%s) processed done.", noti_id); return; } -static gboolean __call_vc_outgoingcall_endhandle(call_vc_callagent_state_t *pagent, call_vc_handle call_handle, int type, TelTapiEndCause_t tapi_cause) +static gboolean __call_vc_outgoingcall_endhandle(call_vc_callagent_state_t *pagent, call_vc_handle call_handle, const char *type, TelTapiEndCause_t tapi_cause) { call_vc_call_objectinfo_t objectInfo; voice_call_end_cause_type_t endcause_type = 0; @@ -2136,7 +1691,7 @@ static gboolean __call_vc_outgoingcall_endhandle(call_vc_callagent_state_t *page /*Inform Client App about MO Call Disconnect */ _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_OUTGOING_ABORTED); - _vc_core_tapi_event_get_end_cause_type(type, tapi_cause, &endcause_type); + _vc_core_tapi_event_get_end_cause_type(pagent, type, tapi_cause, &endcause_type); _vc_core_ca_send_event_to_client(pagent, VC_CALL_OUTGOING_END, call_handle, (int)endcause_type, NULL); /* Response call setup result to SAT if this is SAT call */ @@ -2260,7 +1815,7 @@ static gboolean __call_vc_is_callagent_waitstate(call_vc_callagent_state_t *page * @return This function returns TRUE if dtmf is possible or else FALSE * @param[in] pcall_agent Pointer to the call agent structure */ -gboolean __vc_core_is_dtmf_possible(call_vc_callagent_state_t *pcall_agent) +static gboolean __vc_core_is_dtmf_possible(call_vc_callagent_state_t *pcall_agent) { VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); CALL_ENG_DEBUG(ENG_DEBUG, ""); @@ -2763,22 +2318,12 @@ voicecall_error_t _vc_core_engine_send_sat_response(voicecall_engine_t *pvoiceca void _vc_core_engine_engine_finish(voicecall_engine_t *pvoicecall_agent) { call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent; - int error_code = 0; - int index = 0; - VOICECALL_RETURN_IF_FAIL(pvoicecall_agent != NULL); /*Unsubscribe Events */ CALL_ENG_DEBUG(ENG_DEBUG, "Unsubscribing Events"); - for (index = 0; index < CALL_VC_TAPI_SUBSCRIPTION_MAX; index++) { - error_code = tel_deregister_event(pcall_agent->subscription_id[index]); - if (error_code != TAPI_API_SUCCESS) { - CALL_ENG_DEBUG(ENG_DEBUG, "tel_deregister_event failed. sub id is %d error_code is %d", pcall_agent->subscription_id[index], error_code); - break; - } - } - tel_deinit(); + tel_deinit(pcall_agent->tapi_handle); VOICECALL_RETURN_IF_FAIL(pcall_agent != NULL); _vc_core_ca_finish_agent(pcall_agent); @@ -2795,13 +2340,13 @@ void _vc_core_engine_engine_finish(voicecall_engine_t *pvoicecall_agent) voicecall_error_t voicecall_request_sat_menu(voicecall_engine_t *pvoicecall_agent) { call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent; - TelSatSetupMenuInfo_t sim_menu; - + TelSatSetupMenuInfo_t sim_menu; /*LiMo SAT*/ + VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS); CALL_ENG_DEBUG(ENG_DEBUG, ""); memset(&sim_menu, 0, sizeof(TelSatSetupMenuInfo_t)); - + /*LiMo SAT*/ if (FALSE == TelTapiSatGetMainMenuList(&sim_menu)) { CALL_ENG_DEBUG(ENG_DEBUG, "TelTapiSatGetMainMenuList failed"); return ERROR_VOICECALL_REQUEST_FAILED; @@ -2820,7 +2365,7 @@ voicecall_error_t voicecall_request_sat_menu(voicecall_engine_t *pvoicecall_agen voicecall_error_t voicecall_request_sat_menu_title(voicecall_engine_t *pvoicecall_agent, char *title) { call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent; - TelSatMainMenuTitleInfo_t sat_menu_title; + TelSatMainMenuTitleInfo_t sat_menu_title; /*LiMo SAT*/ VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS); VOICECALL_RETURN_VALUE_IF_FAIL(title != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS); @@ -2828,7 +2373,6 @@ voicecall_error_t voicecall_request_sat_menu_title(voicecall_engine_t *pvoicecal CALL_ENG_DEBUG(ENG_DEBUG, ""); memset(&sat_menu_title, 0, sizeof(TelSatMainMenuTitleInfo_t)); - if (TRUE == TelTapiSatGetMainMenuTitle(&sat_menu_title)) { if (TRUE == sat_menu_title.bIsMainMenuPresent) { strcpy(title, (char *)sat_menu_title.mainMenuTitle.string); @@ -2878,7 +2422,7 @@ voicecall_error_t _vc_core_engine_prepare_redial(voicecall_engine_t *pvoicecall_ /*Set Engine IO State */ _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_OUTGOING_SHOW_REDIALCAUSE); - /*Abthul:todo Set SAT Redial Data */ + /*todo Set SAT Redial Data */ return ERROR_VOICECALL_NONE; } @@ -2892,7 +2436,7 @@ voicecall_error_t _vc_core_engine_prepare_redial(voicecall_engine_t *pvoicecall_ * @param[out] bredial_duration Contains TRUE if SAT redial duration is enabled, FALSE otherwise * @remarks pvoicecall_agent and bredial_duration cannot be NULL */ -voicecall_error_t voicecall_get_sat_redial_duration_status(voicecall_engine_t *pvoicecall_agent, gboolean * bredial_duration) +voicecall_error_t voicecall_get_sat_redial_duration_status(voicecall_engine_t *pvoicecall_agent, gboolean *bredial_duration) { call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent; call_vc_satsetup_info_t *pcall_vc_satcall_info = NULL; @@ -2956,13 +2500,12 @@ voicecall_error_t _vc_core_engine_get_sat_dtmf_hidden_mode(voicecall_engine_t *p * @param[in] audio_path audio path to be changed * @remarks pvoicecall_agent cannot be NULL */ -voicecall_error_t _vc_core_engine_change_audio_path(voicecall_engine_t *pvoicecall_agent, voicecall_audio_path_t audio_path) +voicecall_error_t _vc_core_engine_change_audio_path(voicecall_engine_t *pvoicecall_agent, voicecall_audio_path_t audio_path, gboolean bextra_volume) { call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent; - tapi_sound_audio_path_t tapi_audio_path = TAPI_SOUND_HANDSET; + TelCallSoundPathInfo_t tapi_sound_path; /*Enum for encapsulating errors from TAPI Lib */ TapiResult_t tapi_error = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS); @@ -2974,37 +2517,37 @@ voicecall_error_t _vc_core_engine_change_audio_path(voicecall_engine_t *pvoiceca switch (audio_path) { case VC_AUDIO_PATH_HANDSET: { - tapi_audio_path = TAPI_SOUND_HANDSET; + tapi_sound_path.path = TAPI_SOUND_PATH_HANDSET; } break; case VC_AUDIO_PATH_HEADSET: { - tapi_audio_path = TAPI_SOUND_HEADSET; + tapi_sound_path.path = TAPI_SOUND_PATH_HEADSET; } break; case VC_AUDIO_PATH_HANDSFREE: { - tapi_audio_path = TAPI_SOUND_HANDSFREE; + tapi_sound_path.path = TAPI_SOUND_PATH_HANDSFREE; } break; case VC_AUDIO_PATH_BLUETOOTH: { - tapi_audio_path = TAPI_SOUND_BLUETOOTH; + tapi_sound_path.path = TAPI_SOUND_PATH_BLUETOOTH; } break; case VC_AUDIO_PATH_STEREO_BLUETOOTH: { - tapi_audio_path = TAPI_SOUND_STEREO_BLUETOOTH; + tapi_sound_path.path = TAPI_SOUND_PATH_STEREO_BLUETOOTH; } break; case VC_AUDIO_PATH_SPK_PHONE: { - tapi_audio_path = TAPI_SOUND_SPK_PHONE; + tapi_sound_path.path = TAPI_SOUND_PATH_SPK_PHONE; } break; case VC_AUDIO_PATH_HEADSET_3_5PI: { - tapi_audio_path = TAPI_SOUND_HEADSET_3_5PI; + tapi_sound_path.path = TAPI_SOUND_PATH_HEADSET_3_5PI; } break; default: @@ -3015,9 +2558,16 @@ voicecall_error_t _vc_core_engine_change_audio_path(voicecall_engine_t *pvoiceca break; } - CALL_ENG_DEBUG(ENG_DEBUG, "tapi_audio_path: %d", tapi_audio_path); - tapi_error = tel_set_sound_path(tapi_audio_path, &ReqId); + CALL_ENG_DEBUG(ENG_DEBUG, "tapi_audio_path: %d(extra voluem: %d)", tapi_sound_path, bextra_volume); + if ((bextra_volume) + && ((tapi_sound_path.path == TAPI_SOUND_PATH_HANDSET) + || (tapi_sound_path.path = TAPI_SOUND_PATH_SPK_PHONE))) { + tapi_sound_path.ex_volume = TAPI_SOUND_EX_VOLUME_ON; + } else { + tapi_sound_path.ex_volume = TAPI_SOUND_EX_VOLUME_OFF; + } + tapi_error = tel_set_call_sound_path(pcall_agent->tapi_handle, &tapi_sound_path, _vc_core_engine_set_sound_path_resp_cb, NULL); if (tapi_error != TAPI_API_SUCCESS) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_set_sound_path error: %d", tapi_error); return ERROR_VOICECALL_TAPI_ERROR; @@ -3028,13 +2578,13 @@ voicecall_error_t _vc_core_engine_change_audio_path(voicecall_engine_t *pvoiceca voicecall_error_t _vc_core_engine_set_audio_mute(voicecall_engine_t *pvoicecall_agent, gboolean bmute_audio) { + call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent; TapiResult_t error = TAPI_API_SUCCESS; - tapi_sound_mic_mute_t micmute_set = TAPI_SOUND_MIC_UNMUTE; - int req_id = VC_RQSTID_DEFAULT; + TelSoundMuteStatus_t micmute_set = TAPI_SOUND_MUTE_STATUS_OFF; - micmute_set = (TRUE == bmute_audio) ? TAPI_SOUND_MIC_MUTE : TAPI_SOUND_MIC_UNMUTE; + micmute_set = (TRUE == bmute_audio) ? TAPI_SOUND_MUTE_STATUS_ON : TAPI_SOUND_MUTE_STATUS_OFF; - error = tel_set_sound_mute_status(micmute_set, &req_id); + error = tel_set_call_mute_status(pcall_agent->tapi_handle, micmute_set, _vc_core_engine_set_mute_status_resp_cb, NULL); if (error != TAPI_API_SUCCESS) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_set_sound_mute_status Error: %d", error); @@ -3059,8 +2609,7 @@ voicecall_error_t _vc_core_engine_set_audio_volume(voicecall_engine_t *pvoicecal call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent; /*Enum for encapsulating errors from TAPI Lib */ TapiResult_t error = TAPI_API_SUCCESS; - tapi_sound_volume_control_t vol_control; - int ReqId = VC_RQSTID_DEFAULT; + TelCallVolumeInfo_t vol_info; CALL_ENG_DEBUG(ENG_DEBUG, "Start! path(%d), volume(%d)", audio_path_type, vol_level); @@ -3074,24 +2623,25 @@ voicecall_error_t _vc_core_engine_set_audio_volume(voicecall_engine_t *pvoicecal return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE; } - vol_control.volume = vol_level; + vol_info.volume = vol_level; + vol_info.type = TAPI_SOUND_TYPE_VOICE; switch (audio_path_type) { case VC_AUDIO_PATH_HEADSET: - vol_control.vol_type = TAPI_SOUND_VOL_HEADSET_VOICE; + vol_info.device = TAPI_SOUND_DEVICE_HEADSET; break; case VC_AUDIO_PATH_BLUETOOTH: case VC_AUDIO_PATH_STEREO_BLUETOOTH: - vol_control.vol_type = TAPI_SOUND_VOL_BT_VOICE; + vol_info.device = TAPI_SOUND_DEVICE_BLUETOOTH; break; case VC_AUDIO_PATH_SPK_PHONE: - vol_control.vol_type = TAPI_SOUND_VOL_SPK_PHONE; + vol_info.device = TAPI_SOUND_DEVICE_SPEAKER_PHONE; break; default: - vol_control.vol_type = TAPI_SOUND_VOL_VOICE; + vol_info.device = TAPI_SOUND_DEVICE_RECEIVER; break; } - error = tel_set_sound_volume_info(vol_control, &ReqId); + error = tel_set_call_volume_info(pcall_agent->tapi_handle, &vol_info, _vc_core_engine_set_volume_resp_cb, NULL); if (error != TAPI_API_SUCCESS) { CALL_ENG_DEBUG(ENG_DEBUG, "Tapi API Error: %d", error); @@ -3119,8 +2669,7 @@ voicecall_error_t _vc_core_engine_get_audio_volume(voicecall_engine_t *pvoicecal { call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent; TapiResult_t error = TAPI_API_SUCCESS; - tapi_sound_volume_type_t volume_type = TAPI_SOUND_VOL_VOICE; - int ReqId = VC_RQSTID_DEFAULT; + TelSoundDevice_t volume_type = TAPI_SOUND_DEVICE_RECEIVER; VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS); VOICECALL_RETURN_VALUE_IF_NOT_IN_RANGE(audio_path_type, VC_AUDIO_PATH_HANDSET, VC_AUDIO_PATH_HEADSET_3_5PI, ERROR_VOICECALL_INVALID_ARGUMENTS); @@ -3132,24 +2681,24 @@ voicecall_error_t _vc_core_engine_get_audio_volume(voicecall_engine_t *pvoicecal switch (audio_path_type) { case VC_AUDIO_PATH_HEADSET: - volume_type = TAPI_SOUND_VOL_HEADSET_VOICE; + volume_type = TAPI_SOUND_DEVICE_HEADSET; break; case VC_AUDIO_PATH_BLUETOOTH: case VC_AUDIO_PATH_STEREO_BLUETOOTH: - volume_type = TAPI_SOUND_VOL_BT_VOICE; + volume_type = TAPI_SOUND_DEVICE_BLUETOOTH; break; case VC_AUDIO_PATH_SPK_PHONE: - volume_type = TAPI_SOUND_VOL_SPK_PHONE; + volume_type = TAPI_SOUND_DEVICE_SPEAKER_PHONE; break; default: - volume_type = TAPI_SOUND_VOL_VOICE; + volume_type = TAPI_SOUND_DEVICE_RECEIVER; break; } CALL_ENG_DEBUG(ENG_DEBUG, "volume_type = %d", volume_type); pcall_agent->curr_tapi_path = volume_type; - error = tel_get_sound_volume_info(volume_type, &ReqId); + error = tel_get_call_volume_info(pcall_agent->tapi_handle, volume_type, TAPI_SOUND_TYPE_VOICE, _vc_core_engine_get_volume_resp_cb, NULL); if (error != TAPI_API_SUCCESS) { CALL_ENG_DEBUG(ENG_DEBUG, "Tapi API Error: %d", error); @@ -3219,3 +2768,338 @@ voicecall_error_t _vc_core_engine_set_to_default_values(voicecall_engine_t *pvoi return ERROR_VOICECALL_NONE; } + +void _vc_core_engine_dial_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_dial_call_resp_cb"); + + call_vc_call_objectinfo_t objectInfo; + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + + if (TAPI_CAUSE_SUCCESS != result) { + CALL_ENG_DEBUG(ENG_DEBUG, "MO Call Dial call Failed with error cause: %d", result); + + _vc_core_cm_clear_call_object(&objectInfo); + + __call_vc_outgoingcall_endhandle(pagent, objectInfo.call_handle, TAPI_NOTI_VOICE_CALL_STATUS_IDLE, TAPI_CC_CAUSE_FACILITY_REJECTED); + /* Need to make warning popup for abnormal status... */ + } +} + +void _vc_core_engine_answer_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_answer_call_resp_cb"); + + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + if (result != TAPI_CAUSE_SUCCESS) { + /*If IO State is waiting for Answer Response */ + if ((VC_INOUT_STATE_INCOME_WAIT_CONNECTED == pagent->io_state) || (VC_INOUT_STATE_INCOME_WAIT_HOLD_CONNECTED == pagent->io_state) || (VC_INOUT_STATE_INCOME_WAIT_RELEASE_ACTIVE_CONNECTED == pagent->io_state)) { + int mt_call_handle = -1; + + mt_call_handle = _vc_core_cm_get_incoming_call_handle(&pagent->call_manager); + + if (mt_call_handle != -1) { + CALL_ENG_DEBUG(ENG_DEBUG, "mt_call_handle = %d", mt_call_handle); + + /*Send Hold Failed Notification to client UI */ + if (pagent->callagent_state == CALL_VC_CA_STATE_WAIT_HOLD) { + _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); + _vc_core_ca_send_event_to_client(pagent, VC_ERROR_OCCURED, ERROR_VOICECALL_HOLD_FAILED, 0, NULL); + } + + /*Send Incoming call MT End Indication to Client UI */ + _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_INCOME_END); + g_idle_add(__call_vc_incoming_call_end_idle_cb, pagent); + } + } + } else { + _vc_core_ca_send_event_to_client(pagent, VC_CALL_ANSWER_CNF, 0, 0, NULL); + } +} + +void _vc_core_engine_end_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_end_call_resp_cb.."); + + TelCallEndCnf_t callEndInfo ; + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + TelCallEndType_t call_end_type = TAPI_CALL_END; + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + + memset(&callEndInfo, 0, sizeof(TelCallEndCnf_t)); + memcpy(&callEndInfo, tapi_data, sizeof(TelCallEndCnf_t)); + + call_handle = callEndInfo.id; + call_end_type = callEndInfo.type; + + if (TAPI_CAUSE_SUCCESS == result) { + /*Ignore this event as endication will be received from TAPI for the call release request */ + CALL_ENG_DEBUG(ENG_DEBUG, "Success response for tel_end_call request"); + } else { + CALL_ENG_DEBUG(ENG_ERR, "Call Release request failed, proceeding with Call end process"); + call_vc_call_objectinfo_t objectInfo; + voicecall_call_state_t present_call_state = VC_CALL_STATE_NONE; + call_vc_handle incoming_call_handle = VC_TAPI_INVALID_CALLHANDLE; + TelTapiEndCause_t tapi_cause = TAPI_CALL_END_NO_CAUSE; + + CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d,end cause:%d", call_handle, tapi_cause); + + /*the end of incoming call rejected by callagent, because the call had come before the phone is initialized */ + if (call_handle == gphone_rejected_call) { + CALL_ENG_DEBUG(ENG_DEBUG, "Rejected call..phone not initialized"); + + gphone_rejected_call = VC_TAPI_INVALID_CALLHANDLE; + + /*If no more calls available, End the Application */ + __vc_core_check_engine_active_task(pagent); + return; + } + + incoming_call_handle = _vc_core_cm_get_incoming_call_handle(&pagent->call_manager); + present_call_state = _vc_core_cm_get_call_state(&pagent->call_manager, call_handle); + + CALL_ENG_DEBUG(ENG_DEBUG, "New Call Handle = %d, Already registered MT call handle : %d", call_handle, incoming_call_handle); + switch (present_call_state) { + case VC_CALL_STATE_NONE: + case VC_CALL_STATE_ENDED: + case VC_CALL_STATE_ENDED_FINISH: + { + CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d state is %d", call_handle, present_call_state); + /*If no more calls available, End the Application */ + __vc_core_check_engine_active_task(pagent); + return; + } + break; + case VC_CALL_STATE_REJECTED: + { + /*End of incoming call (not registered as incoming call in CallAgent) rejected by callagent */ + if (incoming_call_handle != call_handle) { + _vc_core_cm_remove_call_object(&pagent->call_manager, call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "end of call rejected by callagent"); + + /*If no more calls available, End the Application */ + __vc_core_check_engine_active_task(pagent); + return; + } + } + break; + default: + break; + } + + /*End of the call rejected by user or by callagent (when hold is failed) */ + if ((VC_INOUT_STATE_INCOME_WAIT_RELEASE == pagent->io_state) && (incoming_call_handle == call_handle)) { + _vc_core_cm_remove_call_object(&pagent->call_manager, call_handle); + + /*Change the In Out state to None*/ + _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_NONE); + + /*Notify Client about rejected Event*/ + _vc_core_ca_send_event_to_client(pagent, VC_CALL_REJECTED_END, call_handle, 0, NULL); + + return; + } + + /*End of Incoming Call */ + if (incoming_call_handle == call_handle) { + CALL_ENG_DEBUG(ENG_DEBUG, "Adding Incoming End Event to Idle Callback"); + _vc_core_ca_change_inout_state(pagent, VC_INOUT_STATE_INCOME_END); + /*Make sure that the End Indication is processed always after the Incoming Indication , as both are + processed in Idle Add Callbacks */ + g_idle_add(__call_vc_incoming_call_end_idle_cb, pagent); + return; + } + + /*End of Outgoing Call */ + if (_vc_core_cm_get_outgoing_call_handle(&pagent->call_manager) == call_handle) { + __call_vc_outgoingcall_endhandle(pagent, call_handle, TAPI_NOTI_VOICE_CALL_STATUS_IDLE, tapi_cause); + return; + } + + /*End of Normal Connected Call */ + _vc_core_tapi_event_handle_call_end_event(pagent, "", call_handle, tapi_cause); + + CALL_VC_DUMP_CALLDETAILS(&pagent->call_manager); + _vc_core_cm_clear_call_object(&objectInfo); + if (FALSE == _vc_core_cm_get_call_object(&pagent->call_manager, call_handle, &objectInfo)) { + CALL_ENG_DEBUG(ENG_DEBUG, "Call Already Cleared for Call Handle = %d", call_handle); + + /* jspark + * Because of _vc_core_tapi_rqst_answer_call( .., VC_ANSWER_HOLD_ACTIVE_AND_ACCEPT,.. ) inside _vc_core_tapi_event_handle_call_end_event(), + * pagent->call_manager is cleared. so, we didn't send VC_CALL_NORMAL_END to call-ui. + * so we should send this event to call-ui. + */ + { + voice_call_end_cause_type_t end_cause_type; + _vc_core_tapi_event_get_end_cause_type(pagent, "", tapi_cause, &end_cause_type); + _vc_core_ca_send_event_to_client(pagent, VC_CALL_NORMAL_END, call_handle, end_cause_type, NULL); + } + } else { + _vc_core_ca_send_event_to_client(pagent, VC_CALL_NORMAL_END, objectInfo.call_handle, objectInfo.end_cause_type, NULL); + } + } + return; +} + +void _vc_core_engine_hold_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_hold_call_resp_cb"); + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + + if (TAPI_CAUSE_SUCCESS == result) { + memcpy(&call_handle, tapi_data, sizeof(call_vc_handle)); + } else { + _vc_core_cm_get_first_active_call_handle(&pagent->call_manager, &call_handle); + } + + if (_vc_core_tapi_event_handle_call_held_event(pagent, call_handle, result) == FALSE) { + _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); + } else { + /* + Be carefull in clearing the end call member, because _vc_core_engine_status_is_any_call_ending + function depends on the end call object status. If it is cleared often, the check by + _vc_core_engine_status_is_any_call_ending becomes invalid + */ + _vc_core_cm_clear_endcall_member(&pagent->call_manager); + } +} + +void _vc_core_engine_active_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_active_call_resp_cb"); + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + TelCallActiveCnf_t callActiveInfo; + + if (TAPI_CAUSE_SUCCESS == result) { + memset(&callActiveInfo, 0, sizeof(TelCallActiveCnf_t)); + memcpy(&callActiveInfo, tapi_data, sizeof(TelCallActiveCnf_t)); + call_handle = callActiveInfo.id; + } else { + _vc_core_cm_get_first_held_call_handle(&pagent->call_manager, &call_handle); + } + + if (_vc_core_tapi_event_handle_call_retrieve_event(pagent, call_handle, result) == FALSE) { + _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); + } else { + /* + Be carefull in clearing the end call member, because _vc_core_engine_status_is_any_call_ending + function depends on the end call object status. If it is cleared often, the check by + _vc_core_engine_status_is_any_call_ending becomes invalid + */ + _vc_core_cm_clear_endcall_member(&pagent->call_manager); + } +} + +void _vc_core_engine_swap_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_swap_call_resp_cb : %d", result); +} + +void _vc_core_engine_join_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + TelCallJoinCnf_t callJoinInfo; + + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_join_call_resp_cb..."); + + if (TAPI_CAUSE_SUCCESS == result) { + memset(&callJoinInfo, 0, sizeof(TelCallJoinCnf_t)); + memcpy(&callJoinInfo, tapi_data, sizeof(TelCallJoinCnf_t)); + call_handle = callJoinInfo.id; + } else { + call_handle = 0; + } + + _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); + _vc_core_tapi_event_handle_call_join_event(pagent, call_handle, result); +} + +void _vc_core_engine_split_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + TelCallSplitCnf_t callSplitInfo; + + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_split_call_resp_cb"); + + if (TAPI_CAUSE_SUCCESS == result) { + memset(&callSplitInfo, 0, sizeof(TelCallSplitCnf_t)); + memcpy(&callSplitInfo, tapi_data, sizeof(TelCallSplitCnf_t)); + call_handle = callSplitInfo.id; + } + + _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); + _vc_core_tapi_event_handle_call_split_event(pagent, call_handle, result); +} + +void _vc_core_engine_transfer_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_transfer_call_resp_cb"); + + _vc_core_ca_change_agent_state(pagent, CALL_VC_CA_STATE_NORMAL); + _vc_core_tapi_event_handle_call_transfer_event(pagent, result); +} + +void _vc_core_engine_dtmf_call_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_dtmf_call_resp_cb"); + + if (TAPI_CAUSE_SUCCESS != result) { + CALL_ENG_DEBUG(ENG_DEBUG, "Tapi Error Code %d", result); + /*Forward the events to client */ + _vc_core_ca_send_event_to_client(pagent, VC_CALL_DTMF_ACK, FALSE, 0, NULL); + } else { + /*Forward the events to client */ + _vc_core_ca_send_event_to_client(pagent, VC_CALL_DTMF_ACK, TRUE, 0, NULL); + } +} + +void _vc_core_engine_set_volume_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_set_volume_resp_cb : %d", result); +} + +void _vc_core_engine_get_volume_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + int tapi_sound_path = 0; + int volume_level = 0; + TelCallGetVolumeInfoResp_t snd_resp_data; + call_vc_callagent_state_t *pagent = gpcall_agent_for_callback; + + memset(&snd_resp_data, 0, sizeof(TelCallGetVolumeInfoResp_t)); + memcpy(&snd_resp_data, tapi_data, sizeof(TelCallGetVolumeInfoResp_t)); + + int i = 0; + tapi_sound_path = pagent->curr_tapi_path; + for (i = 0; i < snd_resp_data.record_num; i++) { + if (tapi_sound_path == snd_resp_data.record[i].device) { + volume_level = snd_resp_data.record[i].volume; + break; + } + } + CALL_ENG_DEBUG(ENG_DEBUG, "Changed Vol Type = %d, Vol Level = %d", tapi_sound_path, volume_level); + + _vc_core_ca_send_event_to_client(pagent, VC_CALL_GET_VOLUME_RESP, tapi_sound_path, volume_level, NULL); +} + +void _vc_core_engine_set_sound_path_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_set_sound_path_resp_cb : %d", result); +} + +void _vc_core_engine_set_mute_status_resp_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_set_mute_status_resp_cb : %d", result); +} + +void _vc_core_engine_get_aoc_info_cb(TapiHandle *handle, int result, void *tapi_data, void *user_data) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_engine_get_aoc_info_cb : %d", result); +} \ No newline at end of file diff --git a/call-engine/core/vc-core-svcall.c b/call-engine/core/vc-core-svcall.c index 93f0137..e2f1fa1 100755 --- a/call-engine/core/vc-core-svcall.c +++ b/call-engine/core/vc-core-svcall.c @@ -14,7 +14,6 @@ * limitations under the License. */ - #ifdef _CPHS_DEFINED_ #include diff --git a/call-engine/core/vc-core-tapi-evnt.c b/call-engine/core/vc-core-tapi-evnt.c index e0a3b88..799d4c0 100755 --- a/call-engine/core/vc-core-tapi-evnt.c +++ b/call-engine/core/vc-core-tapi-evnt.c @@ -22,8 +22,6 @@ #include "vc-core-util.h" #include "vc-core-tapi-rqst.h" -static int barring_ind_type = VC_BARR_IND_NONE; - /** * This function processes the current io wait states if available * @@ -52,15 +50,13 @@ static gboolean __call_vc_download_call_timer_cb(gpointer pdata); * @param[in] cause TAPI call end cause * @param[out] end_cause_type voicecall engine end cause */ -void _vc_core_tapi_event_get_end_cause_type(int type, TelTapiEndCause_t cause, voice_call_end_cause_type_t *end_cause_type) +void _vc_core_tapi_event_get_end_cause_type(call_vc_callagent_state_t *pcall_agent, const char *noti_id, TelTapiEndCause_t cause, voice_call_end_cause_type_t *end_cause_type) { VOICECALL_RETURN_IF_FAIL(end_cause_type != NULL); - CALL_ENG_DEBUG(ENG_DEBUG, "EventType:[0x%x],EndCause:%d", type, cause); + CALL_ENG_DEBUG(ENG_DEBUG, "EventType:[%s],EndCause:%d", noti_id, cause); - switch (type) { - case TAPI_EVENT_CALL_END_IND: - /*case TAPI_EVENT_ERR:*/ + if (strcmp(noti_id, TAPI_NOTI_VOICE_CALL_STATUS_IDLE) == 0) { switch (cause) { case TAPI_CC_CAUSE_NORMAL_UNSPECIFIED: *end_cause_type = VC_ENDCAUSE_CALL_DISCONNECTED; @@ -92,7 +88,7 @@ void _vc_core_tapi_event_get_end_cause_type(int type, TelTapiEndCause_t cause, v case TAPI_REJECT_CAUSE_CONGESTTION: case TAPI_REJECT_CAUSE_CNM_REJ_NO_RESOURCES: - case TAPI_CC_CAUSE_SWITCHING_EQUIPMENT_CONGESTION: /*Match as NW_BUSY*/ + case TAPI_CC_CAUSE_SWITCHING_EQUIPMENT_CONGESTION: /* Match as NW_BUSY*/ *end_cause_type = VC_ENDCAUSE_NW_BUSY; break; @@ -123,7 +119,6 @@ void _vc_core_tapi_event_get_end_cause_type(int type, TelTapiEndCause_t cause, v case TAPI_CC_CAUSE_DESTINATION_OUT_OF_ORDER: *end_cause_type = VC_ENDCAUSE_SERVICE_TEMP_UNAVAILABLE; break; - case TAPI_CC_CAUSE_NO_USER_RESPONDING: case TAPI_CC_CAUSE_USER_ALERTING_NO_ANSWER: *end_cause_type = VC_ENDCAUSE_USER_DOESNOT_RESPOND; @@ -134,12 +129,12 @@ void _vc_core_tapi_event_get_end_cause_type(int type, TelTapiEndCause_t cause, v break; case TAPI_CC_CAUSE_CALL_REJECTED: - if (barring_ind_type == VC_BARR_IND_ALL) + if (pcall_agent->barring_ind_type == VC_BARR_IND_ALL) *end_cause_type = VC_ENDCAUSE_CALL_BARRED; else *end_cause_type = VC_ENDCAUSE_USER_UNAVAILABLE; - barring_ind_type = VC_BARR_IND_NONE; + pcall_agent->barring_ind_type = VC_BARR_IND_NONE; break; case TAPI_CC_CAUSE_USER_BUSY: @@ -170,11 +165,9 @@ void _vc_core_tapi_event_get_end_cause_type(int type, TelTapiEndCause_t cause, v CALL_ENG_DEBUG(ENG_ERR, "Call Ended or Default Cause Value: %d", cause); break; } - break; - default: + } else { *end_cause_type = VC_ENDCAUSE_CALL_FAILED; CALL_ENG_DEBUG(ENG_DEBUG, "Invalid call end cause or error !!"); - break; } CALL_ENG_DEBUG(ENG_DEBUG, "Engine End Cause: %d", (int)*end_cause_type); @@ -210,11 +203,12 @@ void _vc_core_tapi_event_copy_incoming_call_data(call_vc_callagent_state_t *pcal _vc_core_util_strcpy(pcallobject_info->tel_number, sizeof(pcallobject_info->tel_number), callInfo->szCallingPartyNumber); } - /*mkjung_2007.12.19: check callInfo->name_mode if override category isn't supported.*/ + /* check callInfo->name_mode if override category isn't supported.*/ } else { /* If BCD number doesn't exist, cause_of_no_cli value should be checked to decide its presentation */ pcallobject_info->brestricted_namemode = TRUE; +/*code clean: #ifndef _ARM_SP*/ pcallobject_info->name_mode = callInfo->CliCause; CALL_ENG_DEBUG(ENG_DEBUG, "no_cli_cause = %d, name_mode = %d...", callInfo->CliCause, pcallobject_info->name_mode); @@ -326,8 +320,7 @@ gboolean _vc_core_tapi_event_handle_originated_event(call_vc_callagent_state_t * /* Change Inout state to "wait Alert" */ _vc_core_ca_change_inout_state(pcall_agent, VC_INOUT_STATE_OUTGOING_WAIT_ALERT); - /* SAT's request... send response here.. not connected ind. - Disable checking gcf status. 20090806*/ + /* send response here.. not connected ind. Disable checking gcf status. */ #ifndef _vc_core_ca_send_sat_response_ORIG if (TRUE == _vc_core_util_check_gcf_status()) #endif @@ -357,7 +350,7 @@ gboolean _vc_core_tapi_event_handle_originated_event(call_vc_callagent_state_t * * @param[in] handle Call Handle of the call being ended * @param[in] cause TAPI End Cause */ -gboolean _vc_core_tapi_event_handle_call_end_event(call_vc_callagent_state_t *pcall_agent, int type, call_vc_handle handle, TelTapiEndCause_t cause) +gboolean _vc_core_tapi_event_handle_call_end_event(call_vc_callagent_state_t *pcall_agent, const char * noti_id, call_vc_handle handle, TelTapiEndCause_t cause) { gboolean active_call = FALSE; gboolean held_call = FALSE; @@ -374,7 +367,7 @@ gboolean _vc_core_tapi_event_handle_call_end_event(call_vc_callagent_state_t *pc _vc_core_cm_change_call_state(&callobject_info, VC_CALL_STATE_ENDED); /* set end cause text*/ - _vc_core_tapi_event_get_end_cause_type(type, cause, &callobject_info.end_cause_type); + _vc_core_tapi_event_get_end_cause_type(pcall_agent, noti_id, cause, &callobject_info.end_cause_type); /*Set the modified CallObject to the Call Manager*/ _vc_core_cm_set_call_object(&pcall_agent->call_manager, &callobject_info); @@ -601,7 +594,7 @@ static gboolean __call_vc_process_wait_state_success_events(call_vc_callagent_st } } break; - + #ifdef _INCOME_WAIT_CONNECTED_ /*currently not applied, Fix to change the group state to hold, if the second call is connected before getting the holdcnf resp from tapi */ case VC_INOUT_STATE_INCOME_WAIT_CONNECTED: @@ -631,8 +624,7 @@ static gboolean __call_vc_process_wait_state_success_events(call_vc_callagent_st _vc_core_ca_change_agent_state(pcall_agent, CALL_VC_CA_STATE_NORMAL); /*_vc_core_cm_get_first_active_call_handle(&pcall_agent->call_manager,&active_handle);*/ _vc_core_cm_set_group_state(&pcall_agent->call_manager, grp_index, CALL_VC_GROUP_STATE_HOLD); - } - else if (CALL_VC_CA_STATE_WAIT_UNHOLD == pcall_agent->callagent_state) { + } else if (CALL_VC_CA_STATE_WAIT_UNHOLD == pcall_agent->callagent_state) { int grp_index; call_vc_handle held_handle = VC_TAPI_INVALID_CALLHANDLE; grp_index = _vc_core_cm_get_held_group_index(&pcall_agent->call_manager); @@ -789,9 +781,9 @@ gboolean _vc_core_tapi_event_handle_call_held_event(call_vc_callagent_state_t *p (pcall_agent->call_manager.setupcall_info.satcall_setup_info.satengine_setupcall_data.calltype == \ TAPI_SAT_SETUP_CALL_PUT_ALL_OTHER_CALLS_ON_HOLD_WITH_REDIAL))) { - /*SAT Test Case(27.22.4.13.1/7), Terminal Response for Option B */ + /* Terminal Response for Option B */ /* _vc_core_ca_send_sat_response(pcall_agent, SAT_RQST_SETUP_CALL, CALL_VC_NETWORK_UNABLE_TO_PROCESS_COMMAND); */ - /*SAT Test Case(27.22.4.13.1/7), Terminal Response for Option A */ + /* Terminal Response for Option A */ _vc_core_ca_send_sat_response(pcall_agent, SAT_RQST_SETUP_CALL, CALL_VC_NETWORK_UNABLE_TO_PROCESS_COMMAND_WITHOUT_CAUSE); } @@ -872,12 +864,12 @@ gboolean _vc_core_tapi_event_handle_call_held_event(call_vc_callagent_state_t *p _vc_core_cm_clear_outgoing_call(&pcall_agent->call_manager); _vc_core_ca_change_inout_state(pcall_agent, VC_INOUT_STATE_OUTGOING_ABORTED); } else { - call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; + call_vc_handle outgoing_call_handle = VC_TAPI_INVALID_CALLHANDLE; _vc_core_ca_change_inout_state(pcall_agent, VC_INOUT_STATE_OUTGOING_WAIT_ORIG); - call_handle = _vc_core_cm_get_outgoing_call_handle(&pcall_agent->call_manager); - CALL_ENG_DEBUG(ENG_DEBUG, "Deffered Outgoing Call Handle = %d", call_handle); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_OUTGOING, call_handle, 0, NULL); + outgoing_call_handle = _vc_core_cm_get_outgoing_call_handle(&pcall_agent->call_manager); + CALL_ENG_DEBUG(ENG_DEBUG, "Deffered Outgoing Call Handle = %d", outgoing_call_handle); + _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_OUTGOING, outgoing_call_handle, 0, NULL); } if (pcall_agent->callagent_state == CALL_VC_CA_STATE_WAIT_HOLD) @@ -1177,7 +1169,7 @@ gboolean _vc_core_tapi_event_handle_call_split_event(call_vc_callagent_state_t * _vc_core_cm_split_group(&pcall_agent->call_manager, call_handle); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_SS_SPLIT_CONF, call_handle, 0, NULL); /* Added Call handle for Aqilla */ + _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_SS_SPLIT_CONF, call_handle, 0, NULL); /* Added Call handle */ return TRUE; } @@ -1217,7 +1209,7 @@ gboolean _vc_core_tapi_event_handle_call_transfer_event(call_vc_callagent_state_ CALL_ENG_DEBUG(ENG_DEBUG, "Transfer success!"); _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_SS_TRANSFERRED, 0, 0, NULL); } - /*todo ss : Check Updating flag gbpsh_voicecall_command_transfer*/ + /*todo ss: Check Updating flag gbpsh_voicecall_command_transfer*/ return TRUE; } @@ -1301,134 +1293,6 @@ gboolean _vc_core_tapi_event_connected_line_ind_handle(call_vc_callagent_state_t } /** - * This function handles different type of TAPI indications given in tapi_event_type - * - * @return Returns TRUE on success and FALSE on failure - * @param[in] pcall_agent Pointer to the call agent state - * @param[in] tapi_event_type TAPI Event Type - * @param[in] param2 sub param associated with tapi_event_type - */ -gboolean _vc_core_tapi_event_handle_notification(call_vc_callagent_state_t *pcall_agent, int tapi_event_type, int param2) -{ - VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); - - CALL_ENG_DEBUG(ENG_DEBUG, "eventType = %d", tapi_event_type); - - /* set the notify message string as the event type */ - switch (tapi_event_type) { - case TAPI_EVENT_CALL_FORWARD_IND: - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_FORWARD, VC_FRWD_IND_INCOM_IS_FRWD, 0, NULL); - break; - - case TAPI_EVENT_CALL_COND_FORWARDING_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_COND_FORWARDING_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_SSNOTIFY, VC_SSNOTIFY_IND_ALL_COND_FORWARDING, 0, NULL); - break; - - case TAPI_EVENT_CALL_UNCOND_FORWARDING_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_UNCOND_FORWARDING_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_SSNOTIFY, VC_SSNOTIFY_IND_CFU, 0, NULL); - break; - - case TAPI_EVENT_CALL_RETRIEVE_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_ACTIVATE_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_ACTIVATE, 0, 0, NULL); - break; - - case TAPI_EVENT_CALL_HOLD_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_HOLD_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_HOLD, 0, 0, NULL); - break; - - case TAPI_EVENT_CALL_TRANSFER_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_TRANSFER_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_TRANSFER, 0, 0, NULL); - break; - - case TAPI_EVENT_CALL_SETUPCONFERENCE_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_SETUPCONFERENCE_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_SETUPCONFERENCE, 0, 0, NULL); - break; - - case TAPI_EVENT_CALL_BARRING_IND: - { - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_BARRING_IND, cause = %d", param2); - - barring_ind_type = VC_BARR_IND_ALL; - } - break; - - case TAPI_EVENT_CALL_WAITING_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_WAITING_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_WAITING, 0, 0, NULL); - break; - - case TAPI_EVENT_CALL_CUGINFO_IND: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_CUGINFO_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_CUGINFO, 0, 0, NULL); - break; -#ifdef _OLD_TAPI_ - case TAPI_EVENT_CALL_SSNOTIFY_IND: - { - voicecall_ssnotify_ind_type_t ssnotify_ind_type; - CALL_ENG_DEBUG(ENG_DEBUG, " TAPI_EVENT_CALL_SSNOTIFY_IND"); - switch (param2) { - case TAPI_SSCODE_CFU: - ssnotify_ind_type = VC_SSNOTIFY_IND_CFU; - break; - - case TAPI_SSCODE_CFB: - ssnotify_ind_type = VC_SSNOTIFY_IND_CFB; - break; - - case TAPI_SSCODE_CFNRY: - ssnotify_ind_type = VC_SSNOTIFY_IND_CFNRY; - break; - - case TAPI_SSCODE_CFNRC: - ssnotify_ind_type = VC_SSNOTIFY_IND_CFNRC; - break; - - case TAPI_SSCODE_CLIR: - ssnotify_ind_type = VC_SSNOTIFY_IND_CLIR; - break; - - case TAPI_SSCODE_ALL_COND_FORWARDING: - ssnotify_ind_type = VC_SSNOTIFY_IND_ALL_COND_FORWARDING; - break; - - case TAPI_SSCODE_BARRING_OF_OUTGOING: - ssnotify_ind_type = VC_SSNOTIFY_IND_BARRING_OF_OUTGOING; - break; - - default: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_SSNOTIFY_IND ], No Action defined for sub type:%d", param2); - return TRUE; - - break; - } - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_SSNOTIFY, ssnotify_ind_type, 0, NULL); - } - break; - - case TAPI_EVENT_CALL_REDIRECT_CNF: - CALL_ENG_DEBUG(ENG_DEBUG, "TAPI_EVENT_CALL_REDIRECT_CNF"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_REDIRECT_CNF, 0, 0, NULL); - break; -#endif - case TAPI_EVENT_CALL_CALLINGNAMEINFO_IND: - CALL_ENG_DEBUG(ENG_DEBUG, " TAPI_EVENT_CALL_CALLINGNAMEINFO_IND"); - _vc_core_ca_send_event_to_client(pcall_agent, VC_CALL_IND_CALLINGNAMEINFO, 0, 0, NULL); - break; - - default: - CALL_ENG_DEBUG(ENG_DEBUG, "default eventType = %d", tapi_event_type); - return TRUE; - } - return TRUE; -} - -/** * This function handles the AOC Event * * @return Returns TRUE on success and FALSE on failure @@ -1484,12 +1348,11 @@ static gboolean __call_vc_download_call_timer_cb(gpointer pdata) static void __call_vc_get_aoc_ppm_value(call_vc_callagent_state_t *pcall_agent) { TapiResult_t tapi_error = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; CALL_ENG_DEBUG(ENG_DEBUG, ".."); if (pcall_agent->aoc_ppm == VC_INVALID_PPM) { - tapi_error = tel_get_ss_aoc_info(TAPI_SS_AOC_TYPE_PUC, &ReqId); + tapi_error = tel_get_ss_aoc_info(pcall_agent->tapi_handle, TAPI_SS_AOC_TYPE_PUC, _vc_core_engine_get_aoc_info_cb, NULL); if (tapi_error != TAPI_API_SUCCESS) { CALL_ENG_DEBUG(ENG_ERR, "TAPI Error: %x", tapi_error); diff --git a/call-engine/core/vc-core-tapi-rqst.c b/call-engine/core/vc-core-tapi-rqst.c index a5262fb..78686c1 100755 --- a/call-engine/core/vc-core-tapi-rqst.c +++ b/call-engine/core/vc-core-tapi-rqst.c @@ -19,6 +19,12 @@ #include "vc-core-tapi-rqst.h" #include "vc-core-util.h" #include "vc-core-engine-types.h" +#include "vc-core-engine.h" + +/* DTMF Duration */ +#define PSH_SOUND_DTMFTONE_LONG 300 +#define PSH_SOUND_DTMFTONE_SHORT 200 +#define PSH_DTMF_DEFAULT_DURATION 0x01 /*PSH_SOUND_DTMFTONE_LONG*/ static int gcall_vc_callmember_count = 0; static gboolean gcall_vc_callend_wait = FALSE; @@ -37,9 +43,10 @@ static gboolean glong_dtmf_mode = FALSE; * * @internal * @return Returns TRUE on success or FALSE on failure +* @param[in] pcall_agent Pointer to the call agent state * @param[in] call_handle handle of the call to be splitted */ -static gboolean __call_vc_split_member(call_vc_handle call_handle); +static gboolean __call_vc_split_member(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle); /** * This function prepares for a call setup @@ -105,18 +112,16 @@ gboolean _vc_core_tapi_rqst_prepare_setup_call(call_vc_callagent_state_t *pcall_ gboolean _vc_core_tapi_rqst_setup_call(call_vc_callagent_state_t *pcall_agent) { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - TelCallSetupParams_t setupCallInfo; + TelCallDial_t dialCallInfo; /* TelCallCugInfo_t pCugInfo = {0,};*/ call_vc_call_objectinfo_t callobject_info = { 0 }; /* TelCallIdentityMode_t identityMode = TAPI_CALL_IDENTITY_DEFAULT;*/ TapiResult_t tapi_err = TAPI_API_SUCCESS; int ReqId = VC_RQSTID_DEFAULT; - clock_t start; - clock_t end; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); - memset(&setupCallInfo, 0, sizeof(TelCallSetupParams_t)); + memset(&dialCallInfo, 0, sizeof(TelCallDial_t)); /* Get the Outgoing Call Info */ _vc_core_cm_clear_call_object(&callobject_info); @@ -127,47 +132,47 @@ gboolean _vc_core_tapi_rqst_setup_call(call_vc_callagent_state_t *pcall_agent) /* set setupCallInfo structure for call setup */ if (callobject_info.bemergency_number == TRUE) { CALL_ENG_DEBUG(ENG_DEBUG, "Emergency call!"); - setupCallInfo.CallType = TAPI_CALL_TYPE_E911; + dialCallInfo.CallType = TAPI_CALL_TYPE_E911; /*setupCallInfo.Ecc = callobject_info.ecc_category; CALL_ENG_DEBUG(ENG_DEBUG,"Emergency call, ecc_category:[%d]!", callobject_info.ecc_category);*/ } else { CALL_ENG_DEBUG(ENG_DEBUG, "Normal call!"); - setupCallInfo.CallType = TAPI_CALL_TYPE_VOICE; + dialCallInfo.CallType = TAPI_CALL_TYPE_VOICE; } /*Set the Call Object MO Flag as TRUE */ callobject_info.mo = TRUE; /* cli setting */ - if (_vc_core_util_extract_call_number_without_cli(callobject_info.source_tel_number, setupCallInfo.szNumber, sizeof(setupCallInfo.szNumber)) == FALSE) { + if (_vc_core_util_extract_call_number_without_cli(callobject_info.source_tel_number, dialCallInfo.szNumber, sizeof(dialCallInfo.szNumber)) == FALSE) { CALL_ENG_DEBUG(ENG_DEBUG, "No proper number = %s", callobject_info.source_tel_number); return FALSE; } - CALL_ENG_DEBUG(ENG_DEBUG, "tapi callnum=[%s]", setupCallInfo.szNumber); + CALL_ENG_DEBUG(ENG_DEBUG, "tapi callnum=[%s]", dialCallInfo.szNumber); /* CUG settings */ #ifdef _TAPI_CUG_ - setupCallInfo.pCugInfo = &pCugInfo; + dialCallInfo.pCugInfo = &pCugInfo; if (FALSE == callobject_info.cug_info.bcug_used) { - setupCallInfo.pCugInfo->bCugFlag = FALSE; + dialCallInfo.pCugInfo->bCugFlag = FALSE; } else { - setupCallInfo.pCugInfo->bCugFlag = TRUE; + dialCallInfo.pCugInfo->bCugFlag = TRUE; /*if the index is 0, use pref cug, so no cug index */ if (0 == callobject_info.cug_info.cug_index) { - setupCallInfo.pCugInfo->Option = TAPI_CALL_CUG_NO_INFO; - setupCallInfo.pCugInfo->Index = 0; + dialCallInfo.pCugInfo->Option = TAPI_CALL_CUG_NO_INFO; + dialCallInfo.pCugInfo->Index = 0; } else { if ((FALSE == callobject_info.cug_info.bpref_cug) && (FALSE == callobject_info.cug_info.boa_cug)) { - setupCallInfo.pCugInfo->Option = TAPI_CALL_CUG_SUPRESS_OA_AND_CUG; + dialCallInfo.pCugInfo->Option = TAPI_CALL_CUG_SUPRESS_OA_AND_CUG; } else if (FALSE == callobject_info.cug_info.bpref_cug) { - setupCallInfo.pCugInfo->Option = TAPI_CALL_CUG_SUPRESS_PRF_CUG; + dialCallInfo.pCugInfo->Option = TAPI_CALL_CUG_SUPRESS_PRF_CUG; } else if (FALSE == callobject_info.cug_info.boa_cug) { - setupCallInfo.pCugInfo->Option = TAPI_CALL_CUG_SUPRESS_OA; + dialCallInfo.pCugInfo->Option = TAPI_CALL_CUG_SUPRESS_OA; } else { - setupCallInfo.pCugInfo->Option = TAPI_CALL_CUG_NO_INFO; + dialCallInfo.pCugInfo->Option = TAPI_CALL_CUG_NO_INFO; } - setupCallInfo.pCugInfo->Index = callobject_info.cug_info.cug_index; + dialCallInfo.pCugInfo->Index = callobject_info.cug_info.cug_index; } } #endif @@ -196,7 +201,7 @@ gboolean _vc_core_tapi_rqst_setup_call(call_vc_callagent_state_t *pcall_agent) } #endif - CALL_ENG_DEBUG(ENG_DEBUG, "call_type = %d", setupCallInfo.CallType); + CALL_ENG_DEBUG(ENG_DEBUG, "call_type = %d", dialCallInfo.CallType); CALL_ENG_DEBUG(ENG_DEBUG, "Call Type by Source: %d", callobject_info.call_type); if (VC_CALL_ORIG_TYPE_SAT == callobject_info.call_type) { @@ -206,10 +211,11 @@ gboolean _vc_core_tapi_rqst_setup_call(call_vc_callagent_state_t *pcall_agent) } /*CALL_ENG_DEBUG(ENG_DEBUG,"Call Initiated by SAT: %d",setupCallInfo.bRequestedBySAT);*/ - CALL_ENG_KPI("tel_exe_call_mo start"); + CALL_ENG_KPI("tel_dial_call start"); /*This Function originates MO Call set-up, This is asynchronous function */ - tapi_err = tel_exe_call_mo(&setupCallInfo, (TS_UINT *) &call_handle, &ReqId); - CALL_ENG_KPI("tel_exe_call_mo done"); + + tapi_err = tel_dial_call(pcall_agent->tapi_handle, &dialCallInfo, _vc_core_engine_dial_call_resp_cb, NULL); + CALL_ENG_KPI("tel_dial_call done"); CALL_ENG_DEBUG(ENG_DEBUG, "ReqId is = %d", ReqId); @@ -245,7 +251,7 @@ gboolean _vc_core_tapi_rqst_answer_call(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; /*Encapsulates Errors and Warnings from TAPI Library */ TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; + VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); VOICECALL_RETURN_FALSE_IF_FAIL(error_code != NULL); @@ -261,11 +267,9 @@ gboolean _vc_core_tapi_rqst_answer_call(call_vc_callagent_state_t *pcall_agent, return FALSE; } - /* - Process the answer call request only when the state is in income and it is not ended. + /* Process the answer call request only when the state is in income and it is not ended. This must be checked as both incoming event and incoming end event from tapi are added to g_idle_add - so any change in state should be noted before accepting the call - */ + so any change in state should be noted before accepting the call */ if ((VC_INOUT_STATE_INCOME_BOX != pcall_agent->io_state) || (VC_INOUT_STATE_INCOME_END == pcall_agent->io_state)) { CALL_ENG_DEBUG(ENG_DEBUG, "IO State not in VC_INOUT_STATE_INCOME_BOX, Current state: %d", pcall_agent->io_state); *error_code = ERROR_VOICECALL_PREVIOUS_REQUEST_IN_PROGRESS; @@ -285,7 +289,7 @@ gboolean _vc_core_tapi_rqst_answer_call(call_vc_callagent_state_t *pcall_agent, case VC_ANSWER_NORMAL: { /*Answer a call by accepting or rejecting a call */ - tapi_err = tel_answer_call(call_handle, TAPI_CALL_ANSWER_ACCEPT, &ReqId); + tapi_err = tel_answer_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_ANSWER_ACCEPT, _vc_core_engine_answer_call_resp_cb, NULL); if (TAPI_API_SUCCESS == tapi_err) { _vc_core_ca_change_inout_state(pcall_agent, VC_INOUT_STATE_INCOME_WAIT_CONNECTED); } @@ -294,7 +298,7 @@ gboolean _vc_core_tapi_rqst_answer_call(call_vc_callagent_state_t *pcall_agent, case VC_ANSWER_HOLD_ACTIVE_AND_ACCEPT: { /*Answer a call by accepting or rejecting a call */ - tapi_err = tel_answer_call(call_handle, TAPI_CALL_ANSWER_HOLD_AND_ACCEPT, &ReqId); + tapi_err = tel_answer_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_ANSWER_HOLD_AND_ACCEPT, _vc_core_engine_answer_call_resp_cb, NULL); if (TAPI_API_SUCCESS == tapi_err) { _vc_core_ca_change_inout_state(pcall_agent, VC_INOUT_STATE_INCOME_WAIT_HOLD_CONNECTED); _vc_core_ca_change_agent_state(pcall_agent, CALL_VC_CA_STATE_WAIT_HOLD); @@ -304,7 +308,7 @@ gboolean _vc_core_tapi_rqst_answer_call(call_vc_callagent_state_t *pcall_agent, case VC_ANSWER_RELEASE_ACTIVE_AND_ACCEPT: { /*Answer a call by accepting or rejecting a call */ - tapi_err = tel_answer_call(call_handle, TAPI_CALL_ANSWER_REPLACE, &ReqId); + tapi_err = tel_answer_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_ANSWER_REPLACE, _vc_core_engine_answer_call_resp_cb, NULL); if (TAPI_API_SUCCESS == tapi_err) { _vc_core_ca_change_inout_state(pcall_agent, VC_INOUT_STATE_INCOME_WAIT_RELEASE_ACTIVE_CONNECTED); } @@ -401,7 +405,7 @@ gboolean _vc_core_tapi_rqst_response_call(call_vc_callagent_state_t *pcall_agent gboolean _vc_core_tapi_rqst_release_active_calls(call_vc_callagent_state_t *pcall_agent) { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - int pReqId = VC_RQSTID_DEFAULT; + TapiResult_t tapi_err = TAPI_API_SUCCESS; int nPos; int nCount = 0; @@ -419,11 +423,11 @@ gboolean _vc_core_tapi_rqst_release_active_calls(call_vc_callagent_state_t *pcal CALL_ENG_DEBUG(ENG_DEBUG, "End Single call.."); /* Use ReleaseAll api in case single call is ended - this is caused by modem limitation */ - tapi_err = tel_release_call_all(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ALL, _vc_core_engine_end_call_resp_cb, NULL) } else #endif { - tapi_err = tel_release_call_all_active(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ACTIVE_ALL, _vc_core_engine_end_call_resp_cb, NULL) } if (TAPI_API_SUCCESS != tapi_err) { @@ -460,12 +464,12 @@ gboolean _vc_core_tapi_rqst_release_active_calls(call_vc_callagent_state_t *pcal CALL_ENG_DEBUG(ENG_DEBUG, "End Single call.."); /* Use ReleaseAll api in case single call is ended - this is caused by modem limitation */ - tapi_err = tel_release_call_all(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ALL, _vc_core_engine_end_call_resp_cb, NULL); } else #endif { /*Releases the call identified by Call Handle irrespective of call is hold or active state */ - tapi_err = tel_release_call(call_handle, &pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END, _vc_core_engine_end_call_resp_cb, NULL); } if (TAPI_API_SUCCESS != tapi_err) { @@ -503,7 +507,7 @@ gboolean _vc_core_tapi_rqst_release_held_calls(call_vc_callagent_state_t *pcall_ call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; call_vc_call_objectinfo_t callobject_info = { 0 }; int nCount = 0; - int pReqId = VC_RQSTID_DEFAULT; + TapiResult_t tapi_err = TAPI_API_SUCCESS; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -518,11 +522,11 @@ gboolean _vc_core_tapi_rqst_release_held_calls(call_vc_callagent_state_t *pcall_ CALL_ENG_DEBUG(ENG_DEBUG, "End Single call.."); /* Use ReleaseAll api in case single call is ended - this is caused by modem limitation */ - tapi_err = tel_release_call_all(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ALL, _vc_core_engine_end_call_resp_cb, NULL); } else #endif { - tapi_err = tel_release_call_all_held(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_HOLD_ALL, _vc_core_engine_end_call_resp_cb, NULL); } if (TAPI_API_SUCCESS != tapi_err) { @@ -559,12 +563,12 @@ gboolean _vc_core_tapi_rqst_release_held_calls(call_vc_callagent_state_t *pcall_ CALL_ENG_DEBUG(ENG_DEBUG, "End Single call.."); /* Use ReleaseAll api in case single call is ended - this is caused by modem limitation */ - tapi_err = tel_release_call_all(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ALL, _vc_core_engine_end_call_resp_cb, NULL); } else #endif { /*Releases the call identified by Call Handle irrespective of call is hold or active state */ - tapi_err = tel_release_call(call_handle, &pReqId); + tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END, _vc_core_engine_end_call_resp_cb, NULL); } if (TAPI_API_SUCCESS != tapi_err) { @@ -599,7 +603,7 @@ gboolean _vc_core_tapi_rqst_release_held_calls(call_vc_callagent_state_t *pcall_ gboolean _vc_core_tapi_rqst_release_all_calls(call_vc_callagent_state_t *pcall_agent) { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - int pReqId = VC_RQSTID_DEFAULT; + TapiResult_t tapi_err = TAPI_API_SUCCESS; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -619,7 +623,7 @@ gboolean _vc_core_tapi_rqst_release_all_calls(call_vc_callagent_state_t *pcall_a } /*Releases All calls irrespective of call is in hold or active state */ - tapi_err = tel_release_call_all(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ALL, _vc_core_engine_end_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_release_call_all failed: Error _Code: %d", tapi_err); return FALSE; @@ -637,7 +641,7 @@ gboolean _vc_core_tapi_rqst_release_all_calls(call_vc_callagent_state_t *pcall_a gboolean _vc_core_tapi_rqst_release_incoming_call(call_vc_callagent_state_t *pcall_agent) { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - int pReqId = VC_RQSTID_DEFAULT; + TapiResult_t tapi_err = TAPI_API_SUCCESS; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -656,7 +660,7 @@ gboolean _vc_core_tapi_rqst_release_incoming_call(call_vc_callagent_state_t *pca #endif { /*Releases the call identified by Call Handle irrespective of call is hold or active state */ - tapi_err = tel_release_call(call_handle, &pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END, _vc_core_engine_end_call_resp_cb, NULL); } if (TAPI_API_SUCCESS != tapi_err) { @@ -680,7 +684,7 @@ gboolean _vc_core_tapi_rqst_release_outgoing_call(call_vc_callagent_state_t *pca { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; - int pReqId = VC_RQSTID_DEFAULT; + TapiResult_t tapi_err = TAPI_API_SUCCESS; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -695,12 +699,12 @@ gboolean _vc_core_tapi_rqst_release_outgoing_call(call_vc_callagent_state_t *pca CALL_ENG_DEBUG(ENG_DEBUG, "End Single call.."); /* Use ReleaseAll api in case single call is ended - this is caused by modem limitation */ - tapi_err = tel_release_call_all(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ALL, _vc_core_engine_end_call_resp_cb, NULL); } else #endif { /*Releases the call identified by Call Handle irrespective of call is hold or active state */ - tapi_err = tel_release_call(call_handle, &pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END, _vc_core_engine_end_call_resp_cb, NULL); } if (TAPI_API_SUCCESS != tapi_err) { @@ -723,7 +727,6 @@ gboolean _vc_core_tapi_rqst_hold_call(call_vc_callagent_state_t *pcall_agent) { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -738,7 +741,7 @@ gboolean _vc_core_tapi_rqst_hold_call(call_vc_callagent_state_t *pcall_agent) /* Hold the call */ /*Puts the given call on hold */ - tapi_err = tel_hold_call(call_handle, &ReqId); + tapi_err = tel_hold_call(pcall_agent->tapi_handle, call_handle, _vc_core_engine_hold_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_hold_call() Failed Error Code: %d", tapi_err); return FALSE; @@ -757,7 +760,6 @@ gboolean _vc_core_tapi_rqst_retrieve_call(call_vc_callagent_state_t *pcall_agent { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; CALL_ENG_DEBUG(ENG_DEBUG, "..."); VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -771,7 +773,7 @@ gboolean _vc_core_tapi_rqst_retrieve_call(call_vc_callagent_state_t *pcall_agent CALL_ENG_DEBUG(ENG_DEBUG, "Cur held call_handle = %d.", call_handle); /* activate the call */ /*This function retrieves the held call */ - tapi_err = tel_retrieve_call(call_handle, &ReqId); + tapi_err = tel_active_call(pcall_agent->tapi_handle, call_handle, _vc_core_engine_active_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_retrieve_call() Failed, Error Code: %d", tapi_err); return FALSE; @@ -790,7 +792,6 @@ gboolean _vc_core_tapi_rqst_swap_calls(call_vc_callagent_state_t *pcall_agent) { call_vc_handle active_call = VC_TAPI_INVALID_CALLHANDLE, held_call = VC_TAPI_INVALID_CALLHANDLE; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; CALL_ENG_DEBUG(ENG_DEBUG, ".."); VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -809,7 +810,7 @@ gboolean _vc_core_tapi_rqst_swap_calls(call_vc_callagent_state_t *pcall_agent) CALL_ENG_DEBUG(ENG_DEBUG, "Current Active call = %d, Hold call :%d", active_call, held_call); - tapi_err = tel_swap_call(active_call, held_call, &ReqId); + tapi_err = tel_swap_call(pcall_agent->tapi_handle, active_call, held_call, _vc_core_engine_swap_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_swap_call() Failed, Error Code: %d", tapi_err); return FALSE; @@ -828,7 +829,6 @@ gboolean _vc_core_tapi_rqst_join_calls(call_vc_callagent_state_t *pcall_agent) { call_vc_handle active_call = VC_TAPI_INVALID_CALLHANDLE, held_call = VC_TAPI_INVALID_CALLHANDLE; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -846,7 +846,7 @@ gboolean _vc_core_tapi_rqst_join_calls(call_vc_callagent_state_t *pcall_agent) CALL_ENG_DEBUG(ENG_DEBUG, "Current Active call = %d, Hold call :%d", active_call, held_call); /*This functions joins given two calls */ - tapi_err = tel_join_call(active_call, held_call, &ReqId); + tapi_err = tel_join_call(pcall_agent->tapi_handle, active_call, held_call, _vc_core_engine_join_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_join_call() Failed, Error Code: %d", tapi_err); return FALSE; @@ -865,7 +865,7 @@ gboolean _vc_core_tapi_rqst_join_calls(call_vc_callagent_state_t *pcall_agent) gboolean _vc_core_tapi_rqst_private_call(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle) { - if (TRUE == __call_vc_split_member(call_handle)) { + if (TRUE == __call_vc_split_member(pcall_agent, call_handle)) { _vc_core_ca_change_agent_state(pcall_agent, CALL_VC_CA_STATE_WAIT_SPLIT); return TRUE; } else { @@ -874,10 +874,9 @@ gboolean _vc_core_tapi_rqst_private_call(call_vc_callagent_state_t *pcall_agent, } } -static gboolean __call_vc_split_member(call_vc_handle call_handle) +static gboolean __call_vc_split_member(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle) { TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; CALL_ENG_DEBUG(ENG_DEBUG, "..."); VOICECALL_RETURN_FALSE_IF_FAIL(call_handle != VC_TAPI_INVALID_CALLHANDLE); @@ -885,7 +884,7 @@ static gboolean __call_vc_split_member(call_vc_handle call_handle) CALL_ENG_DEBUG(ENG_DEBUG, "call_handle to be splited : %d", call_handle); /*Splits a private call from multiparty call. */ - tapi_err = tel_split_call(call_handle, &ReqId); + tapi_err = tel_split_call(pcall_agent->tapi_handle, call_handle, _vc_core_engine_split_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_split_call() Failed, Error Code: %d", tapi_err); return FALSE; @@ -904,7 +903,6 @@ gboolean _vc_core_tapi_rqst_transfer_call(call_vc_callagent_state_t *pcall_agent { call_vc_handle active_call = VC_TAPI_INVALID_CALLHANDLE; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -923,7 +921,7 @@ gboolean _vc_core_tapi_rqst_transfer_call(call_vc_callagent_state_t *pcall_agent /*An explicit call transfer by connecting the two parties where in one party being active (active state) and another party being held (held state) */ - tapi_err = tel_exe_call_explicit_transfer(active_call, &ReqId); + tapi_err = tel_transfer_call(pcall_agent->tapi_handle, active_call, _vc_core_engine_transfer_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tel_exe_call_explicit_transfer() Failed, Error Code: %d", tapi_err); return FALSE; @@ -943,7 +941,6 @@ gboolean _vc_core_tapi_rqst_start_dtmf(call_vc_callagent_state_t *pcall_agent, c { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int ReqId = VC_RQSTID_DEFAULT; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -960,7 +957,7 @@ gboolean _vc_core_tapi_rqst_start_dtmf(call_vc_callagent_state_t *pcall_agent, c /* start DTMF */ /*This function sends one or more DTMF digits during call */ - tapi_err = tel_send_call_dtmf(dtmf_string, &ReqId); + tapi_err = tel_call_dtmf(pcall_agent->tapi_handle, dtmf_string, _vc_core_engine_dtmf_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, "tapi_call_dtmf Failed, Error Code: %d", tapi_err); @@ -1026,7 +1023,6 @@ gboolean call_vc_send_uusinfo(call_vc_callagent_state_t *pcall_agent, call_vc_ha gboolean _vc_core_tapi_rqst_end_call_by_callhandle(call_vc_callagent_state_t *pcall_agent, call_vc_handle call_handle) { call_vc_call_objectinfo_t callobject_info; - int pReqId = VC_RQSTID_DEFAULT; TapiResult_t tapi_err = TAPI_API_SUCCESS; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -1043,12 +1039,12 @@ gboolean _vc_core_tapi_rqst_end_call_by_callhandle(call_vc_callagent_state_t *pc CALL_ENG_DEBUG(ENG_DEBUG, "End Single call.."); /* Use ReleaseAll api in case single call is ended - this is caused by modem limitation */ - tapi_err = tel_release_call_all(&pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END_ALL, _vc_core_engine_end_call_resp_cb, NULL); } else #endif { /*Releases the call identified by Call Handle irrespective of call is hold or active state */ - tapi_err = tel_release_call(call_handle, &pReqId); + tapi_err = tel_end_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_END, _vc_core_engine_end_call_resp_cb, NULL); } if (TAPI_API_SUCCESS != tapi_err) { @@ -1119,7 +1115,6 @@ gboolean _vc_core_tapi_rqst_reject_mt_call(call_vc_callagent_state_t *pcall_agen { call_vc_handle call_handle = VC_TAPI_INVALID_CALLHANDLE; TapiResult_t tapi_err = TAPI_API_SUCCESS; - int pReqId = VC_RQSTID_DEFAULT; VOICECALL_RETURN_FALSE_IF_FAIL(pcall_agent != NULL); @@ -1146,7 +1141,7 @@ gboolean _vc_core_tapi_rqst_reject_mt_call(call_vc_callagent_state_t *pcall_agen if (TRUE == budub) { /*Reject the Call for User Busy Scenario */ - tapi_err = tel_answer_call(call_handle, TAPI_CALL_ANSWER_REJECT, &pReqId); + tapi_err = tel_answer_call(pcall_agent->tapi_handle, call_handle, TAPI_CALL_ANSWER_REJECT, _vc_core_engine_answer_call_resp_cb, NULL); if (TAPI_API_SUCCESS != tapi_err) { CALL_ENG_DEBUG(ENG_DEBUG, " tel_answer_call failed: %d", tapi_err); @@ -1167,3 +1162,4 @@ gboolean _vc_core_tapi_rqst_reject_mt_call(call_vc_callagent_state_t *pcall_agen _vc_core_ca_change_inout_state(pcall_agent, VC_INOUT_STATE_INCOME_WAIT_RELEASE); return TRUE; } + diff --git a/call-engine/core/vc-core-util.c b/call-engine/core/vc-core-util.c index 77dc8c2..0855080 100755 --- a/call-engine/core/vc-core-util.c +++ b/call-engine/core/vc-core-util.c @@ -14,7 +14,6 @@ * limitations under the License. */ - #include #include #include "vc-core-engine.h" @@ -44,9 +43,12 @@ #define ASCII_D 68 #define ASCII_STAR 42 #define ASCII_HASH 35 -#define ASCII_P 80 /*PDIAL_SEND_DTMF*/ -#define ASCII_p 112 /*PDIAL_SEND_DTMF*/ -#define ASCII_COMMA 44 /*PDIAL_SEND_DTMF*/ +#define ASCII_P 80 +#define ASCII_p 112 +#define ASCII_COMMA 44 +#define ASCII_W 87 +#define ASCII_w 119 +#define ASCII_SEMI_COLON 59 #define EIGTH_BIT 0x80 #define SEVENTH_BIT 0x40 @@ -57,88 +59,15 @@ #define SECOND_BIT 0x02 #define FIRST_BIT 0x01 -#define CALLVC_MIN(x, y) ((x) <= (y) ? (x) : (y)) /*PDIAL_SEND_DTMF*/ +#define CALLVC_MIN(x, y) ((x) <= (y) ? (x) : (y)) #define ISUSSDDIGIT(X) ((X >= '2') && (X <= '9')) #define ISDIGIT(X) ((X >= '0') && (X <= '9')) #define ISSSDIGITINCALL(X) ((X >= '7') && (X <= '9')) #define IS1CHARUSSDDIGIT(X) ((X >= '1') && (X <= '9')) -#define DATE_FORMAT_1 "EEMMMddyyyy" /* Thu Aug 23 2001 */ -#define TIME_12_TYPE "hma" /* 7:58 AM */ -#define TIME_24_TYPE "HHmm" /* 19:58 */ - -typedef enum _call_vc_emergency_number_type_t { - CALL_VC_NO_SIM_EMERGENCY, - CALL_VC_UK_EMERGENCY, - CALL_VC_UKRAINE_EMERGENCY, - CALL_VC_DEFAULT_EMERGENCY, - CALL_VC_EMERGENCY_TYPE_MAX -} call_vc_emergency_number_type_t; - - -#define CALL_VC_EMERGENCY_NUMBER_LEN_MAX 3 - -/************************************************************************************************************************** -#define CALL_VC_KOREA_EMERGENCY_NUMBERS_CNT 3 -static char gcall_vc_korea_emergency_numbers[CALL_VC_KOREA_EMERGENCY_NUMBERS_CNT][CALL_VC_EMERGENCY_NUMBER_LEN_MAX + 1] = { - "112", - "911", - "119" -}; -**************************************************************************************************************************/ - -#define CALL_VC_DEFAULT_EMERGENCY_NUMBERS_CNT 2 -static char gcall_vc_emergency_numbers[CALL_VC_DEFAULT_EMERGENCY_NUMBERS_CNT][CALL_VC_EMERGENCY_NUMBER_LEN_MAX + 1] = { - "112", - "911", -}; - -#define CALL_VC_UK_EMERGENCY_NUMBERS_CNT 3 -static char gcall_vc_uk_emergency_numbers[CALL_VC_UK_EMERGENCY_NUMBERS_CNT][CALL_VC_EMERGENCY_NUMBER_LEN_MAX + 1] = { - "112", - "911", - "999", -}; - -#define CALL_VC_UKAINE_EMERGENCY_NUMBERS_CNT 5 -static char gcall_vc_ukaine_emergency_numbers[CALL_VC_UKAINE_EMERGENCY_NUMBERS_CNT][CALL_VC_EMERGENCY_NUMBER_LEN_MAX + 1] = { - "112", - "911", - "01", - "02", - "03" -}; - -#define CALL_VC_ITALY_EMERGENCY_NUMBERS_CNT 6 -static char gcall_vc_italy_emergency_numbers[CALL_VC_ITALY_EMERGENCY_NUMBERS_CNT][CALL_VC_EMERGENCY_NUMBER_LEN_MAX + 1] = { - "112", - "911", - "999", - "110", - "118", - "115" -}; - -#define CALL_VC_NO_SIM_DEFAULT_EMERGENCY_NUMBERS_CNT 8 -static char gcall_vc_nosim_emergency_numbers[CALL_VC_NO_SIM_DEFAULT_EMERGENCY_NUMBERS_CNT][CALL_VC_EMERGENCY_NUMBER_LEN_MAX + 1] = { - "000", - "08", - "112", - "110", - "118", - "119", - "911", - "999" -}; - -/** -* This function checks the given number against the default emergency numbers list -* -* @internal -* @return TRUE if given number is found in the emergency number list, FALSE otherwise -* @param[out] pNumber number to be verified -*/ -static gboolean __vc_core_util_check_default_emergency_number(char *pNumber); +#define DATE_FORMAT_1 "EEMMMddyyyy" /* Thu Aug 23 2001 */ +#define TIME_12_TYPE "hma" /* 7:58 AM */ +#define TIME_24_TYPE "HHmm" /* 19:58 */ /** * This function publishes the event of a given publish type @@ -152,47 +81,44 @@ gboolean _vc_core_util_remove_invalid_chars(const char *src, char *dst) VOICECALL_RETURN_FALSE_IF_FAIL((src != NULL)); VOICECALL_RETURN_FALSE_IF_FAIL((dst != NULL)); - CALL_ENG_DEBUG(ENG_DEBUG, "Source phone number - %s\n",src); + CALL_ENG_DEBUG(ENG_DEBUG, "Source phone number - %s", src); int i = 0; int j = 0; int nSrc = 0; nSrc = strlen(src); - CALL_ENG_DEBUG(ENG_DEBUG, , "source String len - %d\n", nSrc); + CALL_ENG_DEBUG(ENG_DEBUG, "source String len - %d", nSrc); - for(i = 0; i < nSrc; ++i) - { - switch(src[i]) - { - case '(': + for (i = 0; i < nSrc; ++i) { + switch (src[i]) { + case '(': { - if(src[i+1]== '0') + if (src[i + 1] == '0') ++i; break; } - case ')': - case '-': - case ' ': - case '/': + case ')': + case '-': + case ' ': + case '/': { break; } - default: + default: { dst[j++] = src[i]; break; } } - if(j>40) - { + if (j > 40) { break; } } dst[j] = '\0'; - CALL_ENG_DEBUG(ENG_DEBUG, , "Destination phone number - %s\n",dst); + CALL_ENG_DEBUG(ENG_DEBUG, "Destination phone number - %s", dst); return TRUE; } @@ -222,15 +148,15 @@ gboolean _vc_core_util_extract_call_number(const char *pszTelNumber, char *pBuff else pszNum = (char *)pszTelNumber; - pst = strchr(pszNum, 'P'); - - if (pst == NULL) - pst = strchr(pszNum, 'p'); - - if (pst == NULL) - pst = strchr(pszNum, ','); /*browser request*/ + pst = pszNum; + while (*pst != '\0') { + if (*pst == 'P' || *pst == 'p' || *pst == ',' || *pst == 'W' || *pst == 'w' || *pst == ';') { + break; + } + pst++; + } - if (pst == NULL) { + if (strlen(pst) == 0) { if (strlen(pszNum) == 0) return FALSE; _vc_core_util_strcpy(pBuffer, nBufSize, pszNum); @@ -238,7 +164,7 @@ gboolean _vc_core_util_extract_call_number(const char *pszTelNumber, char *pBuff if (pst == pszNum) return FALSE; - _vc_core_util_strcpy(pBuffer, min((((int)pst - (int)pszNum)+1), (nBufSize)), pszNum); + _vc_core_util_strcpy(pBuffer, min((((int)pst - (int)pszNum) + 1), (nBufSize)), pszNum); } return TRUE; } @@ -255,15 +181,14 @@ gboolean _vc_core_util_extract_call_number_without_cli(const char *pszTelNumber, memset(pBuffer, 0, nBufSize); pszNum = (char *)pszTelNumber; - pst = strchr(pszNum, 'P'); - - if (pst == NULL) - pst = strchr(pszNum, 'p'); - - if (pst == NULL) - pst = strchr(pszNum, ','); /*browser request*/ - - if (pst == NULL) { + pst = pszNum; + while (*pst != '\0') { + if (*pst == 'P' || *pst == 'p' || *pst == ',' || *pst == 'W' || *pst == 'w' || *pst == ';') { + break; + } + pst++; + } + if (strlen(pst) == 0) { if (strlen(pszNum) == 0) return FALSE; _vc_core_util_strcpy(pBuffer, nBufSize, pszNum); @@ -271,7 +196,7 @@ gboolean _vc_core_util_extract_call_number_without_cli(const char *pszTelNumber, if (pst == pszNum) return FALSE; - _vc_core_util_strcpy(pBuffer, min((((int)pst - (int)pszNum)+1), (nBufSize)), pszNum); + _vc_core_util_strcpy(pBuffer, min((((int)pst - (int)pszNum) + 1), (nBufSize)), pszNum); } return TRUE; } @@ -285,7 +210,7 @@ gboolean _vc_core_util_extract_call_number_without_cli(const char *pszTelNumber, call_vc_ss_si_format _vc_core_util_check_si_format(const char *pinput_string) { int index = 0, pos = 1, cnt = 0; - VOICECALL_RETURN_VALUE_IF_FAIL((pinput_string != NULL),SS_SI_FORMAT_INVALID); + VOICECALL_RETURN_VALUE_IF_FAIL((pinput_string != NULL), SS_SI_FORMAT_INVALID); if ((pinput_string[1] == '*') || (pinput_string[1] == '#')) pos = 2; @@ -336,173 +261,35 @@ gboolean _vc_core_util_get_mcc(unsigned long *mcc) return TRUE; } -static gboolean __vc_core_util_check_default_emergency_number(char *pNumber) -{ - int i = 0; - unsigned long mcc = 0; - - VOICECALL_RETURN_FALSE_IF_FAIL((pNumber != NULL)); - - _vc_core_util_get_mcc(&mcc); - - if (mcc == CALL_NETWORK_MCC_UK) { - /*112, 911,999*/ - for (i = 0; i < CALL_VC_UK_EMERGENCY_NUMBERS_CNT; i++) { - if (!strcmp(pNumber, gcall_vc_uk_emergency_numbers[i])) - return TRUE; - } - } else if (mcc == CALL_NETWORK_MCC_UKRAINE) { - /*112, 911, 01, 02, 03*/ - for (i = 0; i < CALL_VC_UKAINE_EMERGENCY_NUMBERS_CNT; i++) { - if (!strcmp(pNumber, gcall_vc_ukaine_emergency_numbers[i])) - return TRUE; - } - } else if (mcc == CALL_NETWORK_MCC_ITALY) { - /*112, 911, 999, 110, 118, 115*/ - for (i = 0; i < CALL_VC_ITALY_EMERGENCY_NUMBERS_CNT; i++) { - if (!strcmp(pNumber, gcall_vc_italy_emergency_numbers[i])) - return TRUE; - } - } else { - /*112, 911*/ - for (i = 0; i < CALL_VC_DEFAULT_EMERGENCY_NUMBERS_CNT; i++) { - if (!strcmp(pNumber, gcall_vc_emergency_numbers[i])) - return TRUE; - } - } - return FALSE; -} - -/** - * This function checks whether the given number is emergency number by verifying with sim emergency numbers - * - * @return TRUE if the number is emergency number, FALSE otherwise - * @param[in] card_type simcard type - * @param[in] pNumber number to be verified - */ -gboolean _vc_core_util_check_emergency_number(TelSimCardType_t card_type, char *pNumber, gboolean b_is_no_sim, int *ecc_category) +gboolean _vc_core_util_get_mnc(unsigned long *mnc) { - int i = 0; - TapiResult_t tapi_err = TAPI_API_SUCCESS; - - VOICECALL_RETURN_FALSE_IF_FAIL(pNumber != NULL); - VOICECALL_RETURN_FALSE_IF_FAIL(ecc_category != NULL); - - CALL_ENG_DEBUG(ENG_DEBUG, "pNumber = %s", pNumber); - *ecc_category = 0; - - /*if(call_vc_util_get_sim_mode() == CALL_VC_SIM_INSERTED)*/ - if (b_is_no_sim == FALSE) { - CALL_ENG_DEBUG(ENG_DEBUG, "We have a SIM"); - switch (card_type) { - case TAPI_SIM_CARD_TYPE_GSM: - { - TelSimEccData_t sim_ecc_info; /* used to get data for the Ecc information for 2G and 3G. */ - int necc_record_count = 0; /*Used to count number of Emergency records */ - - CALL_ENG_DEBUG(ENG_DEBUG, "[SimCardType=SIM_CARD_TYPE_GSM]"); - memset(&sim_ecc_info, 0x00, sizeof(TelSimEccData_t)); - - /*TAPI api Compliance */ - /*To get Emergency data of 2G */ - tapi_err = tel_get_sim_ecc(&sim_ecc_info, &necc_record_count); - - if (TAPI_API_SUCCESS != tapi_err) { - CALL_ENG_DEBUG(ENG_DEBUG, "tapi_sim_get_ecc_info failed, tapi_err=%d", tapi_err); - return FALSE; - } - - if (necc_record_count == 0) { - CALL_ENG_DEBUG(ENG_DEBUG, "eccinfo is NOT exist. Check default"); - - /*SIM card inserted but no ecc infomation. Then check the default ECC number.*/ - return __vc_core_util_check_default_emergency_number(pNumber); - } else { - /*Check the availablity of Emergency number in the ECCInfo*/ - CALL_ENG_DEBUG(ENG_DEBUG, "ecc1=%s", sim_ecc_info.EccInfo.szEcc1); - if (strcmp(pNumber, sim_ecc_info.EccInfo.szEcc1) == 0) /*ecc1*/ - return TRUE; - - CALL_ENG_DEBUG(ENG_DEBUG, "ecc2=%s", sim_ecc_info.EccInfo.szEcc2); - if (strcmp(pNumber, sim_ecc_info.EccInfo.szEcc2) == 0) /*ecc2*/ - return TRUE; - - CALL_ENG_DEBUG(ENG_DEBUG, "ecc3=%s", sim_ecc_info.EccInfo.szEcc3); - if (strcmp(pNumber, sim_ecc_info.EccInfo.szEcc3) == 0) /*ecc3*/ - return TRUE; - - CALL_ENG_DEBUG(ENG_DEBUG, "ecc4=%s", sim_ecc_info.EccInfo.szEcc4); - if (strcmp(pNumber, sim_ecc_info.EccInfo.szEcc4) == 0) /*ecc4*/ - return TRUE; - - CALL_ENG_DEBUG(ENG_DEBUG, "ecc5=%s", sim_ecc_info.EccInfo.szEcc5); - if (strcmp(pNumber, sim_ecc_info.EccInfo.szEcc5) == 0) /*ecc5*/ - return TRUE; + int ret = 0; + int plmn_value = 0; - CALL_ENG_DEBUG(ENG_DEBUG, "No match & check default emergency number..."); + VOICECALL_RETURN_FALSE_IF_FAIL((mnc != NULL)); - return __vc_core_util_check_default_emergency_number(pNumber); - } - } - break; - case TAPI_SIM_CARD_TYPE_USIM: - { - TelSimEccData_t sim_usim_ecc_info; /* used to get data for the Ecc information for both 2G and 3G */ - int nuecc_rec_count = 0; - - CALL_ENG_DEBUG(ENG_DEBUG, "SimCardType=SIM_CARD_TYPE_USIM"); + ret = vconf_get_int(VCONFKEY_TELEPHONY_PLMN, &plmn_value); + if (0 == ret) { + char mnc_value[4]; + char plmn_string[10]; - memset(&sim_usim_ecc_info, 0x00, sizeof(TelSimEccData_t)); + CALL_ENG_DEBUG(ENG_DEBUG, "plmn_value = [%d]", plmn_value); - /*Synchronous function used to get ECC data */ - tapi_err = tel_get_sim_ecc(&sim_usim_ecc_info, &nuecc_rec_count); + memset(plmn_string, 0, sizeof(plmn_string)); + memset(mnc_value, 0, sizeof(mnc_value)); - if (TAPI_API_SUCCESS != tapi_err) { - CALL_ENG_DEBUG(ENG_DEBUG, "tapi_sim_get_usim_ecc_info failed, tapi_err=%d", tapi_err); - return FALSE; - } - - if (nuecc_rec_count == 0) { - CALL_ENG_DEBUG(ENG_DEBUG, "ueccInfo is NOT exists..."); - - /*SIM card inserted but no ecc infomation. Then check the default ECC number.*/ - return __vc_core_util_check_default_emergency_number(pNumber); - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "ueccInfo exists..."); - - /*Check in USIM Emergency Numbers*/ - for (i = 0; i < nuecc_rec_count; i++) { - CALL_ENG_DEBUG(ENG_DEBUG, "[ecc=%s, category:[%d]]", sim_usim_ecc_info.UeccInfo[i].szEcc, sim_usim_ecc_info.UeccInfo[i].EccEmergencyServiceInfo); - if (!strcmp(pNumber, sim_usim_ecc_info.UeccInfo[i].szEcc)) { - *ecc_category = sim_usim_ecc_info.UeccInfo[i].EccEmergencyServiceInfo; - CALL_ENG_DEBUG(ENG_DEBUG, "uecc matched!!"); - return TRUE; - } - } - - CALL_ENG_DEBUG(ENG_DEBUG, "No match & check default emergency number..."); - return __vc_core_util_check_default_emergency_number(pNumber); - } - } - break; + snprintf(plmn_string, 10, "%d", plmn_value); - case TAPI_SIM_CARD_TYPE_UNKNOWN: - default: - { - return __vc_core_util_check_default_emergency_number(pNumber); - } - break; - } + /* 4~6th digits of plmn value constitutes the mnc value */ + _vc_core_util_strcpy(mnc_value, 4, &plmn_string[3]); + *mnc = (unsigned long)atoi(mnc_value); } else { - CALL_ENG_DEBUG(ENG_DEBUG, "No SIM!"); - for (i = 0; i < CALL_VC_NO_SIM_DEFAULT_EMERGENCY_NUMBERS_CNT; i++) { - if (!strcmp(pNumber, gcall_vc_nosim_emergency_numbers[i])) - return TRUE; - } + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..[%d]", ret); + *mnc = CALL_NETWORK_MNC_01; } + CALL_ENG_DEBUG(ENG_DEBUG, "mnc = %ld", *mnc); - CALL_ENG_DEBUG(ENG_DEBUG, "No emegency number..."); - return FALSE; + return TRUE; } /** @@ -513,43 +300,41 @@ gboolean _vc_core_util_check_emergency_number(TelSimCardType_t card_type, char * */ gboolean _vc_core_util_check_ss_string(const char *pNumber) { - int len; - VOICECALL_RETURN_FALSE_IF_FAIL(pNumber != NULL); - CALL_ENG_DEBUG(ENG_DEBUG, "pNumber(%s)",pNumber); + int len; + VOICECALL_RETURN_FALSE_IF_FAIL(pNumber != NULL); + CALL_ENG_DEBUG(ENG_DEBUG, "pNumber(%s)", pNumber); - len = strlen(pNumber); + len = strlen(pNumber); - if(len > 3) { - if(pNumber[len-1] == '#') { - if(pNumber[0] == '*' || pNumber[0] == '#') { - return TRUE; - } - } - else { - /* - * '*31#', '#31#' -> launch CISS - * '*31#nn..', '#31#nn...' -> launch Voice-call - */ - if(strncmp (pNumber, CALL_COMMON_CLI_SHOW_ID, 4) == 0 - || strncmp (pNumber, CALL_COMMON_CLI_HIDE_ID, 4) == 0) { - if(len > 4) - return FALSE; - return TRUE; - } - } - } + if (len > 3) { + if (pNumber[len - 1] == '#') { + if (pNumber[0] == '*' || pNumber[0] == '#') { + return TRUE; + } + } else { + /* + * '*31#', '#31#' -> launch CISS + * '*31#nn..', '#31#nn...' -> launch Voice-call + */ + if (strncmp(pNumber, CALL_COMMON_CLI_SHOW_ID, 4) == 0 || strncmp(pNumber, CALL_COMMON_CLI_HIDE_ID, 4) == 0) { + if (len > 4) + return FALSE; + return TRUE; + } + } + } - if((len == 2) && (ISUSSDDIGIT( pNumber[0] ) && ISDIGIT( pNumber[1] ))) { - CALL_ENG_DEBUG(ENG_DEBUG, "USSD string"); - return TRUE; - } + if ((len == 2) && (ISUSSDDIGIT(pNumber[0]) && ISDIGIT(pNumber[1]))) { + CALL_ENG_DEBUG(ENG_DEBUG, "USSD string"); + return TRUE; + } - if((len == 1) && (IS1CHARUSSDDIGIT(pNumber[0]))) { + if ((len == 1) && (IS1CHARUSSDDIGIT(pNumber[0]))) { CALL_ENG_DEBUG(ENG_DEBUG, "1 character USSD string"); - return TRUE; + return TRUE; } - return FALSE; + return FALSE; } /** @@ -560,39 +345,35 @@ gboolean _vc_core_util_check_ss_string(const char *pNumber) */ gboolean _vc_core_util_check_incall_ss_string(const char *number) { - int len; - int num_int; - VOICECALL_RETURN_FALSE_IF_FAIL(number != NULL); - CALL_ENG_DEBUG(ENG_DEBUG, "number(%s)",number); - - len = strlen(number); - if(len > 2 || len < 1) - return FALSE; - - if(number[0] > '6') - return FALSE; - - if(len == 1) { - /* 0 ~ 4 */ - if(number[0] >= '0' && number[0] <= '4') - return TRUE; - } - else { - /* 11 ~ 17, 21 ~ 27 */ - num_int = atoi(number); - - if(num_int >= 11 && num_int <= 17) - return TRUE; - if(num_int >= 21 && num_int <= 27) - return TRUE; - } - - return FALSE; -} + int len; + int num_int; + VOICECALL_RETURN_FALSE_IF_FAIL(number != NULL); + CALL_ENG_DEBUG(ENG_DEBUG, "number(%s)", number); + + len = strlen(number); + if (len > 2 || len < 1) + return FALSE; + + if (number[0] > '6') + return FALSE; + if (len == 1) { + /* 0 ~ 4 */ + if (number[0] >= '0' && number[0] <= '4') + return TRUE; + } else { + /* 11 ~ 17, 21 ~ 27 */ + num_int = atoi(number); + if (num_int >= 11 && num_int <= 17) + return TRUE; + if (num_int >= 21 && num_int <= 27) + return TRUE; + } + + return FALSE; +} -/*PDIAL_SEND_DTMF*/ /** * This function extracts the dtmf number from the given telephone number * @@ -603,30 +384,33 @@ gboolean _vc_core_util_check_incall_ss_string(const char *number) gboolean _vc_core_util_extract_dtmf_number(const char *tel_number, char *dtmf_number, const int dtmf_buf_len) { char *pst; - VOICECALL_RETURN_FALSE_IF_FAIL(tel_number!= NULL); + VOICECALL_RETURN_FALSE_IF_FAIL(tel_number != NULL); VOICECALL_RETURN_FALSE_IF_FAIL(dtmf_number != NULL); memset(dtmf_number, 0, dtmf_buf_len); - pst = strchr(tel_number, 'P'); - if (pst == NULL) { - pst = strchr(tel_number, 'p'); - } - - if (pst == NULL) { - pst = strchr(tel_number, ','); /*Considering "," as Pause charcter - Browser Request */ + pst = (char *)tel_number; + while (*pst != '\0') { +#ifdef WDIAL_SEND_DTMF + if (*pst == 'P' || *pst == 'p' || *pst == ',' || *pst == 'W' || *pst == 'w' || *pst == ';') { +#else + if (*pst == 'P' || *pst == 'p' || *pst == ',') { +#endif + break; + } + pst++; } - if (pst == NULL) { + if (strlen(pst) == 0) { return FALSE; } else { - _vc_core_util_strcpy(dtmf_number, CALLVC_MIN((int)strlen(pst), (dtmf_buf_len - 1)), pst + 1); + if (pst == tel_number) + return FALSE; + strncpy(dtmf_number, pst, CALLVC_MIN((int)strlen(pst), (dtmf_buf_len-1))); } return TRUE; } -/*PDIAL_SEND_DTMF*/ - /** * This function checks whether the given number ia a valid dtmf number or not * @@ -646,7 +430,6 @@ gboolean _vc_core_util_isvalid_dtmf_number(char *pnumber) CALL_ENG_DEBUG(ENG_DEBUG, "Length = %d", len); while (len > 0) { - /*PDIAL_SEND_DTMF*/ if (IS_DIGIT(pnumber[len - 1]) || (pnumber[len - 1] >= ASCII_A && pnumber[len - 1] <= ASCII_D) || (pnumber[len - 1] == ASCII_STAR || pnumber[len - 1] == ASCII_HASH)) { return TRUE; } @@ -674,8 +457,10 @@ gboolean _vc_core_util_isvalid_full_dtmf_number(char *pnumber) CALL_ENG_DEBUG(ENG_DEBUG, "Length = %d", len); while (len > 0) { - /*PDIAL_SEND_DTMF*/ - if (!(IS_DIGIT(pnumber[len - 1]) || (pnumber[len - 1] >= ASCII_A && pnumber[len - 1] <= ASCII_D) || (pnumber[len - 1] == ASCII_STAR || pnumber[len - 1] == ASCII_HASH) || (pnumber[len - 1] == ASCII_P || pnumber[len - 1] == ASCII_p || pnumber[len - 1] == ASCII_COMMA))) { + if (!(IS_DIGIT(pnumber[len - 1]) || (pnumber[len - 1] >= ASCII_A && pnumber[len - 1] <= ASCII_D) || \ + (pnumber[len - 1] == ASCII_STAR || pnumber[len - 1] == ASCII_HASH) || \ + (pnumber[len - 1] == ASCII_P || pnumber[len - 1] == ASCII_p || pnumber[len - 1] == ASCII_COMMA) || \ + (pnumber[len - 1] == ASCII_W || pnumber[len - 1] == ASCII_w || pnumber[len - 1] == ASCII_SEMI_COLON))) { CALL_ENG_DEBUG(ENG_DEBUG, "invalid character encountered..."); return FALSE; } @@ -700,17 +485,17 @@ gboolean _vc_core_util_isvalid_telephone_number(char *ptel_number) if (ptel_number != NULL) { char call_number[VC_PHONE_NUMBER_LENGTH_MAX] = { 0, }; - /* + /* Function Test SLP-Call-0250 fixed. * If user Input "*" or "#" and then make a call, * the device should alert you that the phone number is incorrect. */ - /* if ((strlen(ptel_number) == 1) && ((strcmp(ptel_number, "*") == 0) ||(strcmp(ptel_number, "#") == 0))) */ + /*if ((strlen(ptel_number) == 1) && ((strcmp(ptel_number, "*") == 0) ||(strcmp(ptel_number, "#") == 0))) */ /* 1 digit number -> wrong number popup */ if (strlen(ptel_number) == 1) { CALL_ENG_DEBUG(ENG_DEBUG, "It is wrong number.(1 digit number)"); return FALSE; } - /*end*/ + /*end */ /*To avoid checking *31# and #31# */ if (_vc_core_util_extract_call_number(ptel_number, call_number, sizeof(call_number)) == FALSE) { @@ -762,10 +547,10 @@ gboolean _vc_core_util_check_zuhause_status(void) } if (isZuhauseArea == 0) { - /*Not in a zuhause area..*/ + /*Not in a zuhause area.. */ return FALSE; } else { - /*in a zuhause area..*/ + /*in a zuhause area.. */ return TRUE; } } @@ -801,7 +586,7 @@ int _vc_core_util_get_call_volume(void) CALL_ENG_DEBUG(ENG_WARN, "vconf_set_int failed."); } - CALL_ENG_DEBUG(ENG_DEBUG, "vol_level(%d)",vol_level); + CALL_ENG_DEBUG(ENG_DEBUG, "vol_level(%d)", vol_level); return vol_level; } @@ -845,7 +630,7 @@ void _vc_core_util_get_cug_info(voicecall_setup_info_t *psetupcall_info) { VOICECALL_RETURN_IF_FAIL(psetupcall_info != NULL); voicecall_cug_info_t *pcug_info = NULL; - /*int error_code = -1;*/ + /*int error_code = -1; */ pcug_info = (voicecall_cug_info_t *) &psetupcall_info->cug_info; @@ -856,7 +641,7 @@ void _vc_core_util_get_cug_info(voicecall_setup_info_t *psetupcall_info) void _vc_core_util_get_identity_mode(voicecall_setup_info_t *psetupcall_info) { - int id_mode = 0; /*0 - default, 1-show, 2-hide*/ + int id_mode = 0; /*0 - default, 1-show, 2-hide */ int ret = -1; VOICECALL_RETURN_IF_FAIL(psetupcall_info != NULL); @@ -934,7 +719,6 @@ gboolean _vc_core_util_strcpy(char *pbuffer, int buf_count, const char *pstring) CALL_ENG_DEBUG(ENG_DEBUG, "buf_count is zero!!"); return FALSE; } - #ifdef _NO_USE_STRCPY_ if ((buf_count - 1) >= (int)strlen(pstring)) { strcpy(pbuffer, pstring); @@ -944,7 +728,6 @@ gboolean _vc_core_util_strcpy(char *pbuffer, int buf_count, const char *pstring) pbuffer[buf_count - 1] = '\0'; } #else - CALL_ENG_DEBUG(ENG_DEBUG, "pbuffer size(%d), pstring size(%d)", buf_count, strlen(pstring)); strncpy(pbuffer, pstring, (buf_count - 1)); pbuffer[buf_count - 1] = '\0'; #endif @@ -960,7 +743,6 @@ gboolean _vc_core_util_strcpy(char *pbuffer, int buf_count, const char *pstring) */ char *_vc_core_util_get_date_time(time_t time) { - int ret = 0; UDate date; const char *locale = uloc_getDefault(); UErrorCode status = U_ZERO_ERROR; @@ -972,13 +754,13 @@ char *_vc_core_util_get_date_time(time_t time) char formattedString[128] = { '\0', }; int32_t bestPatternCapacity, formattedCapacity; int32_t bestPatternLength, formattedLength; - char skeleton[128]={ '\0', }; + char skeleton[128] = { '\0', }; UChar customSkeleton[64] = { '\0', }; enum appcore_time_format time_format; appcore_get_timeformat(&time_format); - switch(time_format) { + switch (time_format) { case APPCORE_TIME_FORMAT_12: snprintf(skeleton, sizeof(skeleton), "%s%s", DATE_FORMAT_1, TIME_12_TYPE); break; @@ -989,14 +771,14 @@ char *_vc_core_util_get_date_time(time_t time) default: snprintf(skeleton, sizeof(skeleton), "%s%s", DATE_FORMAT_1, TIME_24_TYPE); break; - } + } - u_uastrncpy(customSkeleton, skeleton,strlen(skeleton)); + u_uastrncpy(customSkeleton, skeleton, strlen(skeleton)); generator = udatpg_open(locale, &status); - bestPatternCapacity = (int32_t)(sizeof(bestPattern)/sizeof((bestPattern)[0])); + bestPatternCapacity = (int32_t) (sizeof(bestPattern) / sizeof((bestPattern)[0])); - bestPatternLength = udatpg_getBestPattern(generator, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status); + bestPatternLength = udatpg_getBestPattern(generator, customSkeleton, u_strlen(customSkeleton), bestPattern, bestPatternCapacity, &status); u_austrncpy(bestPatternString, bestPattern, 128); CALL_ENG_DEBUG(ENG_DEBUG, "BestPattern(%s)", bestPatternString); @@ -1006,7 +788,7 @@ char *_vc_core_util_get_date_time(time_t time) formatter = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern, -1, &status); /* UDAT_IGNORE Passed so that our best pattern is used in generating pattern */ - formattedCapacity = (int32_t)(sizeof(formatted)/sizeof((formatted)[0])); + formattedCapacity = (int32_t) (sizeof(formatted) / sizeof((formatted)[0])); formattedLength = udat_format(formatter, date, formatted, formattedCapacity, NULL, &status); u_austrncpy(formattedString, formatted, 128); udatpg_close(generator); @@ -1016,33 +798,6 @@ char *_vc_core_util_get_date_time(time_t time) return g_strdup(formattedString); } - -gboolean _vc_core_util_set_sleep_status(call_vc_power_mode_t type) -{ - return FALSE; /*it will be processed with sensor in ui*/ -} - -gboolean _vc_core_util_get_call_alert_type(int *alert_type) /*VCONFKEY_SETAPPL_PROFILE_CURRENT_CALL_ALERT_TYPE_INT*/ -{ - int tmp_alert_type = -1; - gboolean ret = FALSE; - char *vconf_key = NULL; - VOICECALL_RETURN_FALSE_IF_FAIL(alert_type != NULL); - - vconf_key = vconf_get_str("db/setting/cur_profile"); - strncat(vconf_key, "/call_alert_type", strlen("/call_alert_type")); - ret = vconf_get_int(vconf_key, &tmp_alert_type); - CALL_ENG_DEBUG(ENG_DEBUG, "vconf_key = [%s]", vconf_key); - if (0 == ret) { - CALL_ENG_DEBUG(ENG_DEBUG, "alert_type = [%d]", tmp_alert_type); /*SETTING_CALL_ALERT_TYPE_MELODY,...*/ - *alert_type = tmp_alert_type; - return TRUE; - } else { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..[%d]", ret); - return FALSE; - } -} - gboolean _vc_core_util_phonelock_status(void) { gboolean b_phonelock = FALSE; @@ -1055,33 +810,6 @@ gboolean _vc_core_util_phonelock_status(void) } } -#ifdef TIMER_ENABLED -clock_t _vc_core_util_get_curr_time() -{ - struct timeval tv; - long cur_time; - gettimeofday(&tv, NULL); - - cur_time = (tv.tv_sec * 1000) + tv.tv_usec / 1000; - return cur_time; -} - -void _vc_core_util_print_diff_time(clock_t start, clock_t end, char *message) -{ - long elapsed_time = 0; - elapsed_time = (end - start); - VOICECALL_RETURN_IF_FAIL(message != NULL); - fprintf(stderr, "\n[VoiceCall TIMER][%s]:\n[%s]\n\tstart time: %ld; end time: %ld; total time: %ld milli seconds\n", __func__, message, start, end, elapsed_time); -} - -void _vc_core_util_print_curr_time(char *message) -{ - clock_t curr_time = _vc_core_util_get_curr_time(); - VOICECALL_RETURN_IF_FAIL(message != NULL); - fprintf(stderr, "\n[VoiceCall TIMER][%s]:\n[%s]\n\t time: [%ld] milli seconds\n", __func__, message, curr_time); -} -#endif - void _vc_core_util_download_test_call(char *result) { int ret; @@ -1090,7 +818,7 @@ void _vc_core_util_download_test_call(char *result) VOICECALL_RETURN_IF_FAIL(result != NULL); - /*create string*/ + /*create string */ snprintf(string, sizeof(string), "/tmp/%s", result); d_call_test = fopen(string, "w"); @@ -1098,13 +826,13 @@ void _vc_core_util_download_test_call(char *result) CALL_ENG_DEBUG(ENG_DEBUG, "FAIL:fopen(%s)", string); return; } - /*ret = fwrite("\0", sizeof(char), 1, d_call_test);*/ - /*CALL_ENG_DEBUG(ENG_DEBUG,"Result:fwrite(%d)", ret);*/ + /*ret = fwrite("\0", sizeof(char), 1, d_call_test); */ + /*CALL_ENG_DEBUG(ENG_DEBUG,"Result:fwrite(%d)", ret); */ ret = fclose(d_call_test); CALL_ENG_DEBUG(ENG_DEBUG, "Result:fwrite(%d)", ret); if (ret != 0) { - CALL_ENG_DEBUG(ENG_DEBUG, "FAIL:fclose\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "FAIL:fclose"); return; } diff --git a/call-engine/include/voice-call-core.h b/call-engine/include/voice-call-core.h index 42028fd..ca8dc07 100755 --- a/call-engine/include/voice-call-core.h +++ b/call-engine/include/voice-call-core.h @@ -29,41 +29,41 @@ extern "C" { #include "voice-call-engine.h" typedef enum _call_vc_core_flags_t { - CALL_VC_CORE_FLAG_NONE = 0x00000000, /**< NONE state */ - CALL_VC_CORE_FLAG_SOS_CALL_ONLY = 0x00000001, /**< SET - Emergency Calls Only, UNSET - All Calls Allowed */ - CALL_VC_CORE_FLAG_MSG_SVC_INIT = 0x00000002, /**< SET - Messenger service intialization done, UNSET - otherwise */ - CALL_VC_CORE_FLAG_FDN_SVC_ENABLED = 0x00000004, /**< SET - FDN enabled, UNSET - otherwise */ - CALL_VC_CORE_FLAG_VOL_CHNGD_BYBT = 0x00000008, /**< SET - volume change request from BT, UNSET - otherwise */ - CALL_VC_CORE_FLAG_BT_EVENT_WAITING = 0x00000010, /**< SET - Waiting for Switch Headset/Phone Event fom Bluetooth, UNSET - otherwise */ - CALL_VC_CORE_FLAG_IT_WAS_LOCKED = 0x00000020, /**< SET - It was locked when voice call app luanched, UNSET - otherwise */ - CALL_VC_CORE_FLAG_UNLOC_BY_SLIDER = 0x00000040, /**< SET - Voice call unlock by slider, UNSET - otherwise */ - CALL_VC_CORE_FLAG_EXPT_APPLET_QUIT = 0x00000080, /**< SET - Thread safe applet quit required, UNSET - otherwise */ - CALL_VC_CORE_FLAG_LANG_CHGD_UPDATE = 0x00000100, /**< SET - UI needs to be updated for language change, UNSET - otherwise */ - CALL_VC_CORE_FLAG_WAIT_SWITCH_FROM_BT = 0x00000200, /**< SET - Don't change path in path_change API, UNSET - change path according to current status */ - CALL_VC_CORE_FLAG_SETUPCALL_FAIL = 0x00000400, /**< SET - Setup call fail.(ex. Emergency call only). UNSET - Normal mo call.*/ - CALL_VC_CORE_FLAG_ACCEPT_BY_BT = 0x00000800, /**< SET - MT call accpeted by BT Headset, UNSET - MT call accept by Phone/ Call ended.*/ - CALL_VC_CORE_FLAG_QC_SIM_INSERTED = 0x00001000, /**< SET - Inserted SIM is QC Test SIM, UNSET - Inserted SIM is Normal SIM.*/ - CALL_VC_CORE_FLAG_MOCALL_END_BY_USER = 0x00002000, /**< SET - MO Call Ended by user, UNSET - MO Call not ended by user.*/ + CALL_VC_CORE_FLAG_NONE = 0x00000000, /**< NONE state */ + CALL_VC_CORE_FLAG_SOS_CALL_ONLY = 0x00000001, /**< SET - Emergency Calls Only, UNSET - All Calls Allowed */ + CALL_VC_CORE_FLAG_MSG_SVC_INIT = 0x00000002, /**< SET - Messenger service intialization done, UNSET - otherwise */ + CALL_VC_CORE_FLAG_FDN_SVC_ENABLED = 0x00000004, /**< SET - FDN enabled, UNSET - otherwise */ + CALL_VC_CORE_FLAG_VOL_CHNGD_BYBT = 0x00000008, /**< SET - volume change request from BT, UNSET - otherwise */ + CALL_VC_CORE_FLAG_BT_EVENT_WAITING = 0x00000010, /**< SET - Waiting for Switch Headset/Phone Event fom Bluetooth, UNSET - otherwise */ + CALL_VC_CORE_FLAG_IT_WAS_LOCKED = 0x00000020, /**< SET - It was locked when voice call app luanched, UNSET - otherwise */ + CALL_VC_CORE_FLAG_UNLOC_BY_SLIDER = 0x00000040, /**< SET - Voice call unlock by slider, UNSET - otherwise */ + CALL_VC_CORE_FLAG_EXPT_APPLET_QUIT = 0x00000080, /**< SET - Thread safe applet quit required, UNSET - otherwise */ + CALL_VC_CORE_FLAG_LANG_CHGD_UPDATE = 0x00000100, /**< SET - UI needs to be updated for language change, UNSET - otherwise */ + CALL_VC_CORE_FLAG_WAIT_SWITCH_FROM_BT = 0x00000200, /**< SET - Don't change path in path_change API, UNSET - change path according to current status */ + CALL_VC_CORE_FLAG_SETUPCALL_FAIL = 0x00000400, /**< SET - Setup call fail.(ex. Emergency call only). UNSET - Normal mo call.*/ + CALL_VC_CORE_FLAG_ACCEPT_BY_BT = 0x00000800, /**< SET - MT call accpeted by BT Headset, UNSET - MT call accept by Phone/ Call ended.*/ + CALL_VC_CORE_FLAG_QC_SIM_INSERTED = 0x00001000, /**< SET - Inserted SIM is QC Test SIM, UNSET - Inserted SIM is Normal SIM.*/ + CALL_VC_CORE_FLAG_MOCALL_END_BY_USER = 0x00002000, /**< SET - MO Call Ended by user, UNSET - MO Call not ended by user.*/ } call_vc_core_flags_t; /** * This enum defines the In Call Supplementary Services State - */ + */ typedef enum _call_vc_core_incall_ss_state_t { - CALL_VC_CORE_SS_NONE, /**< Idle State*/ - CALL_VC_CORE_SS_0, /**< Releases all held calls or Set UDUB for a waiting call*/ - CALL_VC_CORE_SS_1, /**< Releases all active calls and accepts the other(held or waiting) calls*/ - CALL_VC_CORE_SS_1X, /**< Releases a specific active call X*/ - CALL_VC_CORE_SS_2, /**< Places all active calls (if any exist) on hold and accepts the other(held or waiting)call*/ - CALL_VC_CORE_SS_2X, /**< Places all active calls on hold except call X with which communication shall be supported*/ - CALL_VC_CORE_SS_3, /**< Adds a held call to the conversation*/ - CALL_VC_CORE_SS_4, /**< ECT */ - CALL_VC_CORE_SS_USSD /**< USSD */ + CALL_VC_CORE_SS_NONE, /**< Idle State*/ + CALL_VC_CORE_SS_0, /**< Releases all held calls or Set UDUB for a waiting call*/ + CALL_VC_CORE_SS_1, /**< Releases all active calls and accepts the other(held or waiting) calls*/ + CALL_VC_CORE_SS_1X, /**< Releases a specific active call X*/ + CALL_VC_CORE_SS_2, /**< Places all active calls (if any exist) on hold and accepts the other(held or waiting)call*/ + CALL_VC_CORE_SS_2X, /**< Places all active calls on hold except call X with which communication shall be supported*/ + CALL_VC_CORE_SS_3, /**< Adds a held call to the conversation*/ + CALL_VC_CORE_SS_4, /**< ECT */ + CALL_VC_CORE_SS_USSD /**< USSD */ } call_vc_core_incall_ss_state_t; - + /** * This structure defines the details of the DTMF related data handled in document -*/ +*/ typedef struct _voicecall_dtmf_info_t { gboolean bdtmf_queue; /**< TRUE -dtmf queue enabled, FALSE - dtmf quue disabled */ int dtmf_index; /**< index of the current dtmf digit sent */ @@ -71,18 +71,19 @@ typedef struct _voicecall_dtmf_info_t { int dtmf_pause_timer; /**< Timer handle of the DTMF Pause Timer */ gboolean bsat_dtmf; /**< SAT DTMF Type Engine Flag*/ gboolean bsat_hidden; /**< SAT DTMF Hidden Engine Flag*/ + gboolean bdtmf_wait; /**< Wait enabled while sending dtmf string*/ char dtmf_number[VC_PHONE_NUMBER_LENGTH_MAX]; } voicecall_dtmf_info_t; /** * This structure defines voicecall core info - */ + */ typedef struct _call_vc_core_state_t { voicecall_setup_info_t call_setup_info; /**< Info of MO Call */ voicecall_engine_t *pcall_engine; /**< Handle to Voicecall Engine */ voicecall_snd_mgr_t *papp_snd; /**< Handle to Sound Manager */ voicecall_dtmf_info_t dtmf_info; /**< DTMF Info*/ - + unsigned int core_status; /**< call core status */ gboolean bt_connected; /**< TRUE - Bluetooth connected, FALSE - otherwise */ gboolean bdtmf_queue; /**< TRUE -dtmf queue enabled, FALSE - dtmf quue disabled */ @@ -96,9 +97,9 @@ typedef struct _call_vc_core_state_t { guint mo_redial_timer; guint minute_minder_timer; } call_vc_core_state_t; - /** + /** * This struct provides a structure for call incoming info data. - */ + */ typedef struct _call_vc_core_incoming_info_t { int call_handle; int call_type; @@ -112,13 +113,13 @@ typedef struct _call_vc_core_incoming_info_t { int bfwded; int active_line; } call_vc_core_incoming_info_t; - + /** * This function puts the currently active call on hold * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_hold_call(voicecall_engine_t *pcall_engine); /** @@ -126,7 +127,7 @@ inline gboolean voicecall_core_hold_call(voicecall_engine_t *pcall_engine); * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_retrieve_call(voicecall_engine_t *pcall_engine); /** @@ -134,7 +135,7 @@ inline gboolean voicecall_core_retrieve_call(voicecall_engine_t *pcall_engine); * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_swap_calls(voicecall_engine_t *pcall_engine); /** @@ -142,7 +143,7 @@ inline gboolean voicecall_core_swap_calls(voicecall_engine_t *pcall_engine); * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_clear_mo_call(voicecall_engine_t *pcall_engine); /** @@ -151,7 +152,7 @@ inline gboolean voicecall_core_clear_mo_call(voicecall_engine_t *pcall_engine); * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine * @param[in] call_handle Handle of the Connected Call to be cleared - */ + */ inline gboolean voicecall_core_clear_connected_call(voicecall_engine_t *pcall_engine, int call_handle); /** @@ -160,7 +161,7 @@ inline gboolean voicecall_core_clear_connected_call(voicecall_engine_t *pcall_en * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine * @param[in] eng_state Engine State to be changed - */ + */ inline gboolean voicecall_core_change_engine_state(voicecall_engine_t *pcall_engine, int eng_state); /** @@ -168,7 +169,7 @@ inline gboolean voicecall_core_change_engine_state(voicecall_engine_t *pcall_eng * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_end_mo_call(voicecall_engine_t *pcall_engine); /** @@ -177,7 +178,7 @@ inline gboolean voicecall_core_end_mo_call(voicecall_engine_t *pcall_engine); * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine * @param[out] io_state Voicecall Engine InOut State - */ + */ inline gboolean voicecall_core_get_engine_state(voicecall_engine_t *pcall_engine, int *eng_state); /** @@ -187,15 +188,15 @@ inline gboolean voicecall_core_get_engine_state(voicecall_engine_t *pcall_engine * @param[in] pcall_engine Handle to voicecall engine * @param[out] active_calls TRUE - If active call exists or FALSE If active call doesn't exists * @param[out] held_calls TRUE - If held call exists or FALSE If held call doesn't exists - */ -inline gboolean voicecall_core_is_call_exists(voicecall_engine_t *pcall_engine, gboolean * active_calls, gboolean * held_calls); + */ +inline gboolean voicecall_core_is_call_exists(voicecall_engine_t *pcall_engine, gboolean *active_calls, gboolean *held_calls); /** * This function checks whether incoming call exists or not * * @return Returns TRUE if incoming call exists or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_is_incoming_call_exists(voicecall_engine_t *pcall_engine); /** @@ -203,7 +204,7 @@ inline gboolean voicecall_core_is_incoming_call_exists(voicecall_engine_t *pcall * * @return Returns TRUE if outgoing call exists or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_is_outgoing_call_exists(voicecall_engine_t *pcall_engine); /** @@ -211,7 +212,7 @@ inline gboolean voicecall_core_is_outgoing_call_exists(voicecall_engine_t *pcall * * @return Returns TRUE if connected call exists or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_is_connected_call_exist(voicecall_engine_t *pcall_engine); /** @@ -220,7 +221,7 @@ inline gboolean voicecall_core_is_connected_call_exist(voicecall_engine_t *pcall * @return Returns TRUE if connected call exists or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine * @param[in] group_index Group Index to be searhced - */ + */ inline gboolean voicecall_core_is_connected_call_exist_in_group(voicecall_engine_t *pcall_engine, int group_index); /** @@ -228,7 +229,7 @@ inline gboolean voicecall_core_is_connected_call_exist_in_group(voicecall_engine * * @return Returns TRUE if connected call exists or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_is_any_call_exists(voicecall_engine_t *pcall_engine); /** @@ -237,7 +238,7 @@ inline gboolean voicecall_core_is_any_call_exists(voicecall_engine_t *pcall_engi * @return Returns TRUE if success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine * @param[out] ptotal_call_member number of avialble calls - */ + */ inline gboolean voicecall_core_get_total_call_member(voicecall_engine_t *pcall_engine, int *ptotal_call_member); /** @@ -245,7 +246,7 @@ inline gboolean voicecall_core_get_total_call_member(voicecall_engine_t *pcall_e * * @return Returns TRUE if call agent is idle or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine - */ + */ inline gboolean voicecall_core_is_callagent_idle(voicecall_engine_t *pcall_engine); /** @@ -253,7 +254,7 @@ inline gboolean voicecall_core_is_callagent_idle(voicecall_engine_t *pcall_engin * * @return TRUE, if connected calls available and engine is in idle, FALSE otherwise * @param[in] pcall_engine Handle to voicecall engine -*/ +*/ inline gboolean voicecall_core_is_incall_request_possible(voicecall_engine_t *pcall_engine); /** @@ -262,8 +263,9 @@ inline gboolean voicecall_core_is_incall_request_possible(voicecall_engine_t *pc * @return TRUE sucess, FALSE otherwise * @param[in] pcall_engine Handle to voicecall engine * @param[in] audio_path audio path to be changed - */ -inline gboolean voicecall_core_change_audio_path(voicecall_engine_t *pcall_engine, voicecall_audio_path_t audio_path); + * @param[in] bextra_volume extra volume status + */ +inline gboolean voicecall_core_change_audio_path(voicecall_engine_t *pcall_engine, voicecall_audio_path_t audio_path, gboolean bextra_volume); /** * This function sets the voice call audio volume for the given audio path type @@ -272,7 +274,7 @@ inline gboolean voicecall_core_change_audio_path(voicecall_engine_t *pcall_engin * @param[in] pcall_engine Handle to voicecall engine * @param[in] tapi_snd_path audio path for the volume to be set * @param[in] vol_level volume level - */ + */ inline gboolean voicecall_core_set_audio_volume(voicecall_engine_t *pcall_engine, voicecall_audio_path_t tapi_snd_path, int vol_level); /** @@ -281,7 +283,7 @@ inline gboolean voicecall_core_set_audio_volume(voicecall_engine_t *pcall_engine * @return returns TRUE in success , FALSE otherwise * @param[in] pcall_engine Handle to voicecall engine * @param[in] audio_path_type audio path for the volume to be retreived - */ + */ inline gboolean voicecall_core_get_audio_volume(voicecall_engine_t *pcall_engine, voicecall_audio_path_t audio_path_type); /** @@ -290,7 +292,7 @@ inline gboolean voicecall_core_get_audio_volume(voicecall_engine_t *pcall_engine * @return returns TRUE in success , FALSE otherwise * @param[in] pcall_engine Handle to voicecall engine * @param[in] bvoice_mute mute status - */ + */ inline gboolean voicecall_core_set_audio_mute_status(voicecall_engine_t *pcall_engine, gboolean bvoice_mute); /** @@ -299,7 +301,7 @@ inline gboolean voicecall_core_set_audio_mute_status(voicecall_engine_t *pcall_e * @return Returns TRUE if success or FALSE on failure * @param[in] pcall_engine Handle to voicecall engine * @param[out] pcall_handle call handle of the active call - */ + */ inline gboolean voicecall_core_get_zuhause(voicecall_engine_t *pcall_engine, gboolean * bzuhause); /** @@ -309,7 +311,7 @@ inline gboolean voicecall_core_get_zuhause(voicecall_engine_t *pcall_engine, gbo * @param[in] pcall_engine Handle to voicecall engine * @param[in] call_handle Call handle of the call for which the call object is retrieved * @param[out] pcall_object Pointer to the retrived call object info - */ + */ inline gboolean voicecall_core_get_call_object(voicecall_engine_t *pcall_engine, int call_handle, call_vc_call_objectinfo_t * pcall_object); /** @@ -319,7 +321,7 @@ inline gboolean voicecall_core_get_call_object(voicecall_engine_t *pcall_engine, * @param[in] pcall_engine Handle to voicecall engine * @param[in] sat_rqst_resp_type sat rqst/resp type to be set by the client * @param[in] sat_response_type sat response type to be sent to sat - */ + */ inline gboolean voicecall_core_send_sat_response(voicecall_engine_t *pcall_engine, voicecall_engine_sat_rqst_resp_type sat_rqst_resp_type, call_vc_sat_reponse_type_t sat_response_type); /** @@ -328,7 +330,7 @@ inline gboolean voicecall_core_send_sat_response(voicecall_engine_t *pcall_engin * @return Returns TRUE if success or FALSE on failure * @param[in] pcall_core Handle to voicecall core * @param[out] pactive_member_num number of active call members available - */ + */ inline gboolean voicecall_core_get_active_call_member(call_vc_core_state_t *pcall_core, int *pactive_member_num); /** @@ -336,7 +338,7 @@ inline gboolean voicecall_core_get_active_call_member(call_vc_core_state_t *pcal * * @return Returns TRUE If Conference call can be made or FALSE if not * @param[in] papp_document Handle to Application Document - */ + */ inline gboolean voicecall_core_is_conf_call_possible(call_vc_core_state_t *pcall_core); /** @@ -344,7 +346,7 @@ inline gboolean voicecall_core_is_conf_call_possible(call_vc_core_state_t *pcall * * @return Returns TRUE If transfer call can be made or FALSE if not * @param[in] pcall_core Handle to voicecall core - */ + */ inline gboolean voicecall_core_is_transfer_call_possible(call_vc_core_state_t *pcall_core); /** @@ -353,7 +355,7 @@ inline gboolean voicecall_core_is_transfer_call_possible(call_vc_core_state_t *p * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core * @param[in] pszInput Number to be verified - */ + */ inline gboolean voicecall_core_is_valid_sscode(call_vc_core_state_t *pcall_core, const char *pszInput); #ifdef _CPHS_DEFINED_ @@ -363,7 +365,7 @@ inline gboolean voicecall_core_is_valid_sscode(call_vc_core_state_t *pcall_core, * @return TRUE if queried status is enabled, FALSE otherwise * @param[in] pcall_core Handle to voicecall core * @param[in] csp_service csp service to be queried - */ + */ inline gboolean voicecall_core_get_cphs_csp_status(call_vc_core_state_t *pcall_core, voicecall_cphs_csp_service csp_service); #endif @@ -372,7 +374,7 @@ inline gboolean voicecall_core_get_cphs_csp_status(call_vc_core_state_t *pcall_c * * @return Returns TRUE if all the calls are ended or FALSE on failure * @param[in] pcall_core Handle to voicecall cor - */ + */ inline gboolean voicecall_core_set_check_ss_on_end(call_vc_core_state_t *pcall_core); /** @@ -380,12 +382,12 @@ inline gboolean voicecall_core_set_check_ss_on_end(call_vc_core_state_t *pcall_c * * @return Returns TRUE if all the calls are ended or FALSE on failure * @param[in] pcall_core Handle to voicecall core - */ + */ inline void voicecall_core_extract_phone_number(const char *source_tel_number, char *phone_number, const int buf_size); /************************ * inline function END -**************************/ +**************************/ void voicecall_core_set_status(call_vc_core_state_t *pcall_core, call_vc_core_flags_t core_flags, gboolean bstatus); gboolean voicecall_core_get_status(call_vc_core_state_t *pcall_core, call_vc_core_flags_t core_flags); @@ -395,12 +397,9 @@ gboolean voicecall_core_get_status(call_vc_core_state_t *pcall_core, call_vc_cor * @return Returns TRUE If transfer call can be made or FALSE if not * @param[in] pcall_core Handle to voicecall core * @param[in] incall_ss_state state of the In Call Supplementary Service - */ + */ gboolean voicecall_core_start_incall_ss(call_vc_core_state_t *pcall_core, call_vc_core_incall_ss_state_t incall_ss_state); -#ifdef VC_ENG_FDN_SUPPORT -gboolean voicecall_core_check_fdn_status(call_vc_core_state_t *pcall_core); -#endif gboolean voicecall_core_set_to_default(call_vc_core_state_t *pcall_core); /** @@ -417,8 +416,8 @@ int voicecall_core_init(call_vc_core_state_t *pcall_core); * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core * @param[in] bemergency emergency call or not from dialer - * @param[in] - */ + * @param[in] + */ gboolean voicecall_core_setup_call(call_vc_core_state_t *pcall_core, gboolean bemergency); /** @@ -426,7 +425,7 @@ gboolean voicecall_core_setup_call(call_vc_core_state_t *pcall_core, gboolean be * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - */ + */ gboolean voicecall_core_make_call(call_vc_core_state_t *pcall_core); gboolean voicecall_core_process_sat_setup_call(vcall_engine_sat_setup_call_info_t *sat_setup_call_info); @@ -435,8 +434,8 @@ gboolean voicecall_core_process_sat_setup_call(vcall_engine_sat_setup_call_info_ * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - * @param[in] -*/ + * @param[in] +*/ gboolean voicecall_core_process_incoming_call(call_vc_core_incoming_info_t *incoming_call_info); /** @@ -444,8 +443,8 @@ gboolean voicecall_core_process_incoming_call(call_vc_core_incoming_info_t *inco * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - * @param[in] -*/ + * @param[in] +*/ gboolean voicecall_core_answer_call(call_vc_core_state_t *pcall_core, gboolean auto_accept); /** @@ -453,7 +452,7 @@ gboolean voicecall_core_answer_call(call_vc_core_state_t *pcall_core, gboolean a * * @return Returns TRUE -if answer is sucess, FALSE - otherwise * @param[in] pcall_core Handle to voicecall core - */ + */ gboolean voicecall_core_answer_call_bytype(call_vc_core_state_t *pcall_core, voicecall_answer_type_t answer_type); /** @@ -462,7 +461,7 @@ gboolean voicecall_core_answer_call_bytype(call_vc_core_state_t *pcall_core, voi * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core * @param[in] bUDUB TRUE - set UDUB, FALSE - reject call -*/ +*/ gboolean voicecall_core_reject_mt(call_vc_core_state_t *pcall_core, gboolean bUDUB); /** @@ -470,7 +469,7 @@ gboolean voicecall_core_reject_mt(call_vc_core_state_t *pcall_core, gboolean bUD * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - */ + */ gboolean voicecall_core_end_call(call_vc_core_state_t *pcall_core); /** @@ -479,7 +478,7 @@ gboolean voicecall_core_end_call(call_vc_core_state_t *pcall_core); * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core * @param[in] call_handle handle of the call to be ended - */ + */ gboolean voicecall_core_end_call_by_handle(call_vc_core_state_t *pcall_core, int call_handle); /** @@ -487,7 +486,7 @@ gboolean voicecall_core_end_call_by_handle(call_vc_core_state_t *pcall_core, int * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - */ + */ gboolean voicecall_core_end_all_calls(call_vc_core_state_t *pcall_core); /** @@ -495,7 +494,7 @@ gboolean voicecall_core_end_all_calls(call_vc_core_state_t *pcall_core); * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - */ + */ gboolean voicecall_core_end_all_active_calls(call_vc_core_state_t *pcall_core); /** @@ -503,65 +502,65 @@ gboolean voicecall_core_end_all_active_calls(call_vc_core_state_t *pcall_core); * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - */ + */ gboolean voicecall_core_end_all_held_calls(call_vc_core_state_t *pcall_core); /** * This function cancel outgoing call * * @return Returns TRUE -if answer is sucess, FALSE - otherwise - * @param[in] pcall_core Handle to voicecall core - */ + * @param[in] pcall_core Handle to voicecall core + */ gboolean voicecall_core_cancel_call(call_vc_core_state_t *pcall_core); /** * This function process hold/retrive/swap conntected call * * @return Returns TRUE -if answer is sucess, FALSE - otherwise - * @param[in] pcall_core Handle to voicecall core - */ + * @param[in] pcall_core Handle to voicecall core + */ gboolean voicecall_core_process_hold_call(call_vc_core_state_t *pcall_core); /** * This function sets up a conference call * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core - */ + * @param[in] pcall_core Handle to voicecall core + */ gboolean voicecall_core_setup_conference(call_vc_core_state_t *pcall_core); /** * This function splits the call corressponding to the given call handle and makes a private call * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core * @param[in] call_handle Call to be splitted from the conference call - */ + */ gboolean voicecall_core_make_private_call(call_vc_core_state_t *pcall_core, int call_handle); /** * This function transfers the call from active call to the held call * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core - */ + * @param[in] pcall_core Handle to voicecall core + */ gboolean voicecall_core_transfer_calls(call_vc_core_state_t *pcall_core); /** * This function sends a dtmf string * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core * @param[in] dtmf_string dtmf string to be sent - */ + */ gboolean voicecall_core_send_dtmf(call_vc_core_state_t *pcall_core, char *dtmf_string); /** -* This function stops sound alert +* This function stops sound alert in case of reject with msg * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core -*/ +*/ gboolean voicecall_core_stop_alert(call_vc_core_state_t *pcall_core); /** @@ -570,7 +569,7 @@ gboolean voicecall_core_stop_alert(call_vc_core_state_t *pcall_core); * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core * @param[in] bheadset TRUE or FALSE -*/ +*/ inline gboolean voicecall_core_prepare_redial(call_vc_core_state_t *pcall_core, int call_handle); gboolean voicecall_core_start_redial(call_vc_core_state_t *pcall_core, int manual_redial); gboolean voicecall_core_stop_redial(call_vc_core_state_t *pcall_core); @@ -581,7 +580,7 @@ gboolean voicecall_core_stop_redial(call_vc_core_state_t *pcall_core); * @return Returns in call ss state #vcui_app_incall_ss_state_t * @param[in] pcall_core Handle to voicecall core * @param[in] number number to be parsed - */ + */ call_vc_core_incall_ss_state_t voicecall_core_parse_incall_ss_string(call_vc_core_state_t *pcall_core, char *number); /** @@ -590,7 +589,7 @@ call_vc_core_incall_ss_state_t voicecall_core_parse_incall_ss_string(call_vc_cor * @return Returns TRUE If transfer call can be made or FALSE if not * @param[in] pcall_core Handle to voicecall core * @param[in] incall_ss_state state of the In Call Supplementary Service - */ + */ gboolean voicecall_core_start_incall_ss(call_vc_core_state_t *pcall_core, call_vc_core_incall_ss_state_t incall_ss_state); /** @@ -599,30 +598,36 @@ gboolean voicecall_core_start_incall_ss(call_vc_core_state_t *pcall_core, call_v * @return Returns TRUE If transfer call can be made or FALSE if not * @param[in] pcall_core Handle to voicecall core * @param[in] pdialled_number dial number -*/ +*/ void voicecall_core_process_incall_ss(call_vc_core_state_t *pcall_core, char *pdialled_number); -#ifdef PDIAL_SEND_DTMF /** *** This function sends the dtmf number *** *** @return Returns TRUE on success *** @param[in] puser_data pointer to user data - **/ + **/ gboolean voicecall_core_send_phone_number_dtmf(gpointer puser_data); -#endif /** *** This function change sound path *** *** @return Returns TRUE on success *** @param[in] sound_path - **/ + **/ gboolean voicecall_core_change_sound_path(call_vc_core_state_t *pcall_core, voicecall_snd_audio_type_t sound_path); gboolean voicecall_core_get_sound_path(call_vc_core_state_t *pcall_core, int *sound_path); +/** + * This function processed the supplementary services while on call + * + * @return Returns TRUE If transfer call can be made or FALSE if not + * @param[in] pcall_core Handle to voicecall core + */ +void voicecall_core_process_dtmf_send_status(call_vc_core_state_t *pcall_core, gboolean bsuccess); + #ifdef __cplusplus -} +} #endif /* __cplusplus */ #endif /* _VOICE_CALL_CORE_H_ */ diff --git a/call-engine/include/voice-call-dbus.h b/call-engine/include/voice-call-dbus.h old mode 100755 new mode 100644 index 01be575..362a7c0 --- a/call-engine/include/voice-call-dbus.h +++ b/call-engine/include/voice-call-dbus.h @@ -15,8 +15,8 @@ */ -#ifndef _VOICE_CALLD_H_ -#define _VOICE_CALLD_H_ +#ifndef _VOICE_CALL_DBUS_H_ +#define _VOICE_CALL_DBUS_H_ #ifdef __cplusplus extern "C" { diff --git a/call-engine/include/voice-call-device.h b/call-engine/include/voice-call-device.h index 453dde1..7d55a43 100755 --- a/call-engine/include/voice-call-device.h +++ b/call-engine/include/voice-call-device.h @@ -51,27 +51,4 @@ gboolean _voicecall_dvc_get_earjack_connected(void); */ void _voicecall_dvc_control_lcd_state(voicecall_lcd_control_t state); -/** - * This function return the proximity sensor status. - * - * @return int proximity sensor status. 1:new 2:far - * @param[in] void - */ -int _voicecall_dvc_get_proximity_sensor_state(void); - - /** - * This function init proximity sensor. - * - * @return gboolean init success or not/ - * @param[in] void * - */ -gboolean _voicecall_dvc_proximity_sensor_init(void *data); - -/** - * This function init proximity sensor. - * - * @return gboolean init success or not/ - * @param[in] void * - */ -gboolean _voicecall_dvc_proximity_sensor_deinit(void); #endif diff --git a/call-engine/include/voice-call-engine-msg.h b/call-engine/include/voice-call-engine-msg.h index 6a2c14b..a498953 100755 --- a/call-engine/include/voice-call-engine-msg.h +++ b/call-engine/include/voice-call-engine-msg.h @@ -81,8 +81,7 @@ typedef enum _vc_engine_msgid_t { VC_ENGINE_MSG_ACCEPT_CHOICE_BOX_TO_UI, /**< Accept choice box to UI */ VC_ENGINE_MSG_MESSAGE_BOX_TO_UI, /**< Create Message box */ VC_ENGINE_MSG_REDIAL_TO_UI, /* To send the redial message to the UI */ - VC_ENGINE_MSG_STOPPED_RECORDING_TO_UI, /* Save file event sent to the UI */ - VC_ENGINE_MSG_CREATE_NEWVOICEFILE_TO_UI, /* User input for voice_recording */ + VC_ENGINE_MSG_NOTI_WBAMR_TO_UI, /* WBAMR notification */ VC_ENGINE_MSG_MAX_TO_UI } vc_engine_msgid_t; @@ -117,10 +116,8 @@ typedef enum _vc_engine_msgbox_string_id_t { IDS_CALL_POP_VOICE_CALL_IS_NOT_ALLOWED_DURING_VIDEO_CALL, IDS_CALL_POP_WAITING_ACTIVE, IDS_CALL_BODY_CALLENDED, -#ifdef PDIAL_SEND_DTMF IDS_CALL_POP_INVALID_DTMF, IDS_CALL_POP_DTMF_SENT, -#endif IDS_CALL_MAX } vc_engine_msgbox_string_id_t; @@ -165,6 +162,7 @@ typedef struct { int brejected; int brestricted; int bpayphone; + int bday_remaining_days; char call_num[VC_PHONE_NUMBER_LENGTH_MAX]; char call_name[VC_DISPLAY_NAME_LENGTH_MAX]; char call_file_path[VC_IMAGE_PATH_LENGTH_MAX]; @@ -175,6 +173,7 @@ typedef struct { vc_engine_msg_hdr_type hdr; int contact_index; int phone_type; + int bday_remaining_days; char call_num[VC_PHONE_NUMBER_LENGTH_MAX]; char call_name[VC_DISPLAY_NAME_LENGTH_MAX]; char call_file_path[VC_IMAGE_PATH_LENGTH_MAX]; @@ -276,18 +275,15 @@ typedef struct { typedef struct { vc_engine_msg_hdr_type hdr; - int type; - char saved_filename[VC_RECORD_FULL_FILE_PATH_LENGTH]; -} vc_engine_stopped_recording_type; - -#ifdef PDIAL_SEND_DTMF -typedef struct { - vc_engine_msg_hdr_type hdr; gboolean bstatus; int string_id; char display_string[VC_DISPLAY_NAME_LENGTH_MAX]; } vc_engine_dtmf_ack_type; -#endif + +typedef struct { + vc_engine_msg_hdr_type hdr; + int bstatus; +} vc_engine_wbamr_status_type; typedef union { vc_engine_msg_hdr_type hdr; @@ -334,12 +330,8 @@ typedef union { vc_engine_accept_choice_box_type accept_choice_box; vc_engine_msg_box_type msg_box; vc_engine_redial_type redial; - vc_engine_stopped_recording_type stopped_recording; - vc_engine_common_type voice_record; - -#ifdef PDIAL_SEND_DTMF vc_engine_dtmf_ack_type dtmf_progress; -#endif + vc_engine_wbamr_status_type wbamr_status; } vc_engine_msg_type; typedef enum { @@ -396,6 +388,7 @@ typedef union { vcui_common_type accept; vcui_accept_with_type accept_with_type; vcui_common_type reject; + vcui_common_type reject_with_msg; vcui_common_type end; vcui_common_with_handle_type end_with_handle; vcui_common_type end_all_calls; @@ -418,8 +411,6 @@ typedef union { vcui_common_type headset_off; vcui_common_with_redial_type redial_type; vcui_common_type redial_stop; - vcui_common_type record_stop; - vcui_common_type record_start; vcui_dtmf_type dtmf; } vcui_msg_type; #ifdef __cplusplus diff --git a/call-engine/include/voice-call-engine.h b/call-engine/include/voice-call-engine.h index 643f27b..899735e 100755 --- a/call-engine/include/voice-call-engine.h +++ b/call-engine/include/voice-call-engine.h @@ -67,7 +67,7 @@ typedef enum _vcall_engine_api_result_t { VCALL_ERROR_MAX } vcall_engine_api_result_t; -/** +/** * This enum defines call answer types */ typedef enum _vcall_engine_answer_type_t { @@ -77,7 +77,7 @@ typedef enum _vcall_engine_answer_type_t { VCALL_ENGINE_ANSWER_RELEASE_ALL_AND_ACCEPT /**< Releases the all calls and accept the call (END and CONNECTED will be sent to client) */ } vcall_engine_answer_type_t; -/** +/** * This enum defines call release types */ typedef enum _vcall_engine_release_type_t { @@ -86,7 +86,18 @@ typedef enum _vcall_engine_release_type_t { VCALL_ENGINE_RELEASE_ALL_CALLS, /**< To end all available calls(active,held,incoming/outgoing*/ } vcall_engine_release_type_t; -/** +/** +* This enum defines the command type sent by recorder to the client view through update signal +*/ +typedef enum _vcall_engine_record_stop_type_t { + VCALL_ENGINE_RECORD_STOP_BY_NORMAL, /**< BY_NORMAL*/ + VCALL_ENGINE_RECORD_STOP_BY_MAX_SIZE, /**< by MAX_SIZE*/ + VCALL_ENGINE_RECORD_STOP_BY_NO_FREE_SPACE, /**< BY_NO_FREE_SPACE*/ + VCALL_ENGINE_RECORD_STOP_BY_TIME_LIMIT, /**< BY_TIME_LIMIT*/ + VCALL_ENGINE_RECORD_STOP_ERROR, /**< ERROR*/ +} vcall_engine_record_stop_type_t; + +/** * This enum defines call answer types */ typedef enum _vcall_engine_vol_type_t { @@ -101,9 +112,8 @@ typedef enum _vcall_engine_vol_type_t { typedef enum _vcall_engine_audio_type_t { VCALL_ENGINE_AUDIO_NONE, /**< none*/ VCALL_ENGINE_AUDIO_SPEAKER, /**< System LoudSpeaker Audio */ - VCALL_ENGINE_AUDIO_RECEIVER, /**< System receiver Audio */ + VCALL_ENGINE_AUDIO_RECEIVER_EARJACK, /**< System receiver or earjack Audio */ VCALL_ENGINE_AUDIO_HEADSET, /**< System Headset Audio */ - VCALL_ENGINE_AUDIO_EARJACK, /**< System Earjack Audio */ VCALL_ENGINE_AUDIO_MAX, } vcall_engine_audio_type_t; @@ -125,7 +135,7 @@ typedef enum { VC_LCD_ON_UNLOCK, } voicecall_lcd_control_t; -/** +/** * This struct provides a structure for call setup info data. */ typedef struct _vcall_engine_setup_info_t { @@ -139,7 +149,7 @@ typedef struct _vcall_engine_setup_info_t { char call_full_file_path[VC_IMAGE_PATH_LENGTH_MAX]; } vcall_engine_setup_info_t; -/** +/** * This struct provides a structure for sat setup call info data. */ typedef struct _vcall_engine_sat_setup_call_info_t { @@ -150,7 +160,7 @@ typedef struct _vcall_engine_sat_setup_call_info_t { unsigned int duration; /***/ @@ -34,6 +35,26 @@ typedef struct { } voicecall_contact_info_t; /** + * This function gets contact info from phone number + * + * @return gboolean + * @param[in] phonenumber phone number + * @param[out] ct_info contact info + */ +gboolean voicecall_service_contact_info_by_number(char *phonenumber, voicecall_contact_info_t * ct_info); + +/** + * This function gets contact info from contact id + * + * @return gboolean + * @param[in] phonenumber phone number + * @param[in] contact_id contact id + * @param[in] storage_type storage type + * @param[out] ct_info contact info + */ +gboolean voicecall_service_contact_info_by_contact_id(char *phonenumber, int contact_id, voicecall_contact_info_t * ct_info); + +/** * This function on the loud speaker state * * @return gboolean @@ -74,4 +95,5 @@ gboolean voicecall_service_mute_status_off(call_vc_core_state_t *pcall_core); * @param[in] volume_level volume level to be set */ gboolean voicecall_service_set_volume(call_vc_core_state_t *pcall_core, voicecall_snd_volume_alert_type_t vol_alert_type, int volume_level); + #endif diff --git a/call-engine/include/voice-call-sound.h b/call-engine/include/voice-call-sound.h index e67ae0f..f4c399b 100755 --- a/call-engine/include/voice-call-sound.h +++ b/call-engine/include/voice-call-sound.h @@ -25,7 +25,7 @@ extern "C" { #include #include #include -#include +#include #include #include #include @@ -33,6 +33,8 @@ extern "C" { #define VOICE_CALL_SND_RINGTONE_PATH_LEN 256 /**pcall_engine; - CALL_ENG_DEBUG(ENG_DEBUG, "bt_headset_connect_status = %d \n", bt_headset_connect_status); + CALL_ENG_DEBUG(ENG_DEBUG, "bt_headset_connect_status = %d", bt_headset_connect_status); if (FALSE == bt_headset_connect_status) { voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_BT_EVENT_WAITING, FALSE); } if (bt_headset_connect_status == pcall_core->bt_connected) { - CALL_ENG_DEBUG(ENG_DEBUG, "No change in state, Ignoring Event \n"); - CALL_ENG_DEBUG(ENG_DEBUG, "bt_headset_connect_status = %d \n", bt_headset_connect_status); + CALL_ENG_DEBUG(ENG_DEBUG, "No change in state, Ignoring Event"); + CALL_ENG_DEBUG(ENG_DEBUG, "bt_headset_connect_status = %d", bt_headset_connect_status); return; } pcall_core->bt_connected = bt_headset_connect_status; @@ -113,7 +111,7 @@ static void __vc_bt_handle_connectivity_event(call_vc_core_state_t *pcall_core, /*Check the Call Status and Send Response event to the Bluetooth */ int call_handle = -1; - CALL_ENG_DEBUG(ENG_DEBUG, "BT connected, Not changing the sound status \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "BT connected, Not changing the sound status"); /* Headset is connected, Set the Sound Status to Headset and change the path only incase of mocall and connected call */ @@ -121,7 +119,7 @@ static void __vc_bt_handle_connectivity_event(call_vc_core_state_t *pcall_core, if (call_handle != -1) { call_vc_call_objectinfo_t callobject_info; - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming Call Exists, call handle = %d \n", call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "Incoming Call Exists, call handle = %d", call_handle); voicecall_core_get_call_object(pcall_engine, call_handle, &callobject_info); @@ -134,7 +132,7 @@ static void __vc_bt_handle_connectivity_event(call_vc_core_state_t *pcall_core, if (call_handle != -1) { int io_state = VC_INOUT_STATE_NONE; - CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing Call Exists, call handle = %d \n", call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "Outgoing Call Exists, call handle = %d", call_handle); _vc_core_engine_status_get_engine_iostate(pcall_engine, &io_state); switch (io_state) { @@ -151,15 +149,13 @@ static void __vc_bt_handle_connectivity_event(call_vc_core_state_t *pcall_core, case VC_INOUT_STATE_OUTGOING_WAIT_CONNECTED: { _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_CALL_REMOTE_RINGING, call_handle, NULL); -#ifdef _NEW_SND_ voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); _vc_bt_request_switch_headset_path(pcall_core, TRUE); -#endif } break; default: { - CALL_ENG_DEBUG(ENG_DEBUG, "Engine not in desired IO State, Current IO State: %d \n", io_state); + CALL_ENG_DEBUG(ENG_DEBUG, "Engine not in desired IO State, Current IO State: %d", io_state); return; } break; @@ -170,9 +166,9 @@ static void __vc_bt_handle_connectivity_event(call_vc_core_state_t *pcall_core, _vc_core_engine_status_get_call_handle_bytype(pcall_engine, VC_CONNECTED_CALL, &call_handle); if (call_handle != -1) { - CALL_ENG_DEBUG(ENG_DEBUG, "Connected Call Exists, call handle = %d \n", call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "Connected Call Exists, call handle = %d", call_handle); - CALL_ENG_DEBUG(ENG_DEBUG, "BT connected, Not changing the path in bt connect event\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "BT connected, Not changing the path in bt connect event"); _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_CALL_CONNECT, call_handle, NULL); } @@ -180,57 +176,27 @@ static void __vc_bt_handle_connectivity_event(call_vc_core_state_t *pcall_core, } else { vc_engine_headset_status_type event_data; -#ifdef _NEW_SND_ if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_BT) { - if (_voicecall_dvc_get_earjack_connected() == TRUE) { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_EARJACK); - } else { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER); - } - + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); + /* Headset is disconnected, so voice sound path should be changed to phone. */ voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_HEADSET, FALSE); if (voicecall_core_is_incoming_call_exists(pcall_engine)) { - if (pcall_core->papp_snd->bmute_play == TRUE) { - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_MUTE_PLAY); - } else { - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RING_TONE); - } + sound_manager_call_session_set_mode(pcall_core->papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_RINGTONE); } else { if (voicecall_core_is_outgoing_call_exists(pcall_engine) || (voicecall_core_is_connected_call_exist(pcall_engine))) { voicecall_snd_change_path(pcall_core->papp_snd); } else { - CALL_ENG_DEBUG(ENG_ERR, "No valid calls, not changing the path \n"); + CALL_ENG_DEBUG(ENG_ERR, "No valid calls, not changing the path"); } } } else { - CALL_ENG_DEBUG(ENG_ERR, "BT disconnected when path is not on BT. Do NOT change path. only update UI"); + CALL_ENG_DEBUG(ENG_ERR, "BT disconnected when path is not on BT. Do NOT change path. only update UI"); } - - memset(&event_data, 0, sizeof(event_data)); - event_data.bstatus = FALSE; - vcall_engine_send_event_to_client(VC_ENGINE_MSG_HEADSET_STATUS_TO_UI, (void *)&event_data); -#else + memset(&event_data, 0, sizeof(event_data)); event_data.bstatus = FALSE; vcall_engine_send_event_to_client(VC_ENGINE_MSG_HEADSET_STATUS_TO_UI, (void *)&event_data); - - /* Headset is disconnected, so voice sound path should be changed to phone. */ - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_HEADSET, FALSE); - if (voicecall_core_is_incoming_call_exists(pcall_engine)) { - if (pcall_core->papp_snd->bmute_play == TRUE) { - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_MUTE_PLAY); - } else { - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RING_TONE); - } - } else { - if (voicecall_core_is_outgoing_call_exists(pcall_engine) || (voicecall_core_is_connected_call_exist(pcall_engine))) { - voicecall_snd_change_path(pcall_core->papp_snd); - } else { - CALL_ENG_DEBUG(ENG_ERR, "No valid calls, not changing the path \n"); - } - } -#endif } } @@ -243,49 +209,28 @@ gboolean _vc_bt_switch_headset_path(call_vc_core_state_t *pcall_core, gboolean b voicecall_snd_mgr_t *papp_snd = pcall_core->papp_snd; voicecall_engine_t *pcall_engine = pcall_core->pcall_engine; - CALL_ENG_DEBUG(ENG_DEBUG, "bheadset = %d,bsend_bt_response = %d \n", bheadset, bsend_bt_response); + CALL_ENG_DEBUG(ENG_DEBUG, "bheadset = %d,bsend_bt_response = %d", bheadset, bsend_bt_response); -#ifdef _NEW_SND_ CALL_ENG_DEBUG(ENG_DEBUG, "b_user_rqst_path_change(%d)", b_user_rqst_path_change); if (b_user_rqst_path_change == FALSE) { if (TRUE == bheadset) { voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); - } - else { - int earjack_status = -1; - if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack_status)) { - CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]\n", earjack_status); - if (earjack_status == VCONFKEY_SYSMAN_EARJACK_REMOVED) { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER); - } else { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_EARJACK); - } - } else { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int fail"); - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER); - } + } else { + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); } } else { CALL_ENG_DEBUG(ENG_DEBUG, "Don't set path_status.. rqst from User. Already setted."); } -#else - /*TODO Check whehter the follwing check and set status to be done inside if((TRUE == bconnected_call_exists) || (TRUE == bmo_call_exists)) */ - /*If Loud Speaker is ON, Change to Normal when Bluetooth Headset is switched ON */ - if ((TRUE == bheadset) && (TRUE == voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER))) { - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER, FALSE); - } - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_HEADSET, bheadset); -#endif /*Donot change the path for MT Call. Change the Audio Path only for MO and Connected calls */ if ((TRUE == voicecall_core_is_connected_call_exist(pcall_engine)) || (TRUE == voicecall_core_is_outgoing_call_exists(pcall_engine))) { - CALL_ENG_DEBUG(ENG_DEBUG, "Changing the Path on BT Request \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Changing the Path on BT Request"); voicecall_snd_change_path_real(papp_snd); /*Send Response to BT only if the path is changed */ if (TRUE == bsend_bt_response) { bt_event = (TRUE == bheadset) ? BT_AG_RES_SWITCH_TO_HEADSET : BT_AG_RES_SWITCH_TO_PHONE; - CALL_ENG_DEBUG(ENG_DEBUG, "Sending BT Response bt_event: %d \n", bt_event); + CALL_ENG_DEBUG(ENG_DEBUG, "Sending BT Response bt_event: %d", bt_event); _vc_bt_send_response_to_bt(pcall_core, bt_event, -1, NULL); } return TRUE; @@ -308,17 +253,17 @@ void _vc_bt_request_switch_headset_path(call_vc_core_state_t *pcall_core, gboole connectivity_bt_ag_res_t bt_event = BT_AG_RES_SWITCH_TO_PHONE; voicecall_engine_t *pcall_engine = pcall_core->pcall_engine; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); /*Donot change the path for MT Call. Change the Audio Path only for MO and Connected calls */ if ((TRUE == voicecall_core_is_connected_call_exist(pcall_engine)) || (TRUE == voicecall_core_is_outgoing_call_exists(pcall_engine))) { bt_event = (TRUE == bheadset) ? BT_AG_RES_SWITCH_TO_HEADSET : BT_AG_RES_SWITCH_TO_PHONE; - CALL_ENG_DEBUG(ENG_DEBUG, "Sending BT Response bt_event: %d \n", bt_event); + CALL_ENG_DEBUG(ENG_DEBUG, "Sending BT Response bt_event: %d", bt_event); voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_BT_EVENT_WAITING, TRUE); _vc_bt_send_response_to_bt(pcall_core, bt_event, -1, NULL); } else { - CALL_ENG_DEBUG(ENG_ERR, "No Valid calls to switch path \n"); + CALL_ENG_DEBUG(ENG_ERR, "No Valid calls to switch path"); } } @@ -334,11 +279,11 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ VOICECALL_RETURN_FALSE_IF_FAIL(pcall_core != NULL); VOICECALL_RETURN_FALSE_IF_FAIL(pbt_info != NULL); - CALL_ENG_DEBUG(ENG_DEBUG, "Event: %s(%d) \n", gszbt_req_event[pbt_info->param1], pbt_info->param1); + CALL_ENG_DEBUG(ENG_DEBUG, "Event: %s(%d)", gszbt_req_event[pbt_info->param1], pbt_info->param1); /*HS Connection not required for sending response to BT_AG_REQ_CALL_STATUS */ if ((FALSE == pcall_core->bt_connected) && (BT_AG_REQ_CALL_STATUS != pbt_info->param1)) { - CALL_ENG_DEBUG(ENG_ERR, "BT not connected, Ignoring BT Events, BT Event= %d \n", pbt_info->param1); + CALL_ENG_DEBUG(ENG_ERR, "BT not connected, Ignoring BT Events, BT Event= %d", pbt_info->param1); return TRUE; } @@ -356,24 +301,17 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ int converted_vol_level; vc_engine_vol_set_from_bt_type event_data; - CALL_ENG_DEBUG(ENG_DEBUG, "Speaker Gain Value : %d\n", bt_vol_level); + CALL_ENG_DEBUG(ENG_DEBUG, "Speaker Gain Value : %d", bt_vol_level); -#ifdef _NEW_SND_ if (voicecall_snd_get_path_status(pcall_core->papp_snd) != VOICE_CALL_SND_PATH_BT) { - CALL_ENG_DEBUG(ENG_DEBUG, "Headset not switched on, Ignoring Speaker Gain Event \n"); - return TRUE; - } -#else - if (FALSE == voicecall_snd_get_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_HEADSET)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Headset not switched on, Ignoring Speaker Gain Event \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Headset not switched on, Ignoring Speaker Gain Event"); return TRUE; } -#endif voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_VOL_CHNGD_BYBT, TRUE); converted_vol_level = __vc_bt_converted_bt_vol_to_voice_vol(bt_vol_level); - CALL_ENG_DEBUG(ENG_DEBUG, "converted Speaker Gain Value : %d\n", converted_vol_level); + CALL_ENG_DEBUG(ENG_DEBUG, "converted Speaker Gain Value : %d", converted_vol_level); memset(&event_data, 0, sizeof(event_data)); event_data.vol_level = converted_vol_level; @@ -383,18 +321,16 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ case BT_AG_REQ_CALL_ACCEPTED: { if (voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call Accept by BT \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call Accept by BT"); voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT, TRUE); - if(_vc_core_util_phonelock_status() == FALSE) + if (_vc_core_util_phonelock_status() == FALSE) vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); -#ifdef _NEW_SND_ - voicecall_snd_set_path_status(pcall_core->papp_snd,VOICE_CALL_SND_PATH_BT); -#endif + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); if (TRUE == voicecall_core_answer_call(pcall_core, FALSE)) { - CALL_ENG_DEBUG(ENG_DEBUG, "voicecall_core_answer_call success \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "voicecall_core_answer_call success"); } } else { - CALL_ENG_DEBUG(ENG_ERR, "No Incoming call, skipping BT request \n"); + CALL_ENG_DEBUG(ENG_ERR, "No Incoming call, skipping BT request"); } } break; @@ -402,7 +338,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ { if (TRUE == voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine)) { if (FALSE == voicecall_core_reject_mt(pcall_core, TRUE)) { - CALL_ENG_DEBUG(ENG_ERR, "voicecall_core_reject_mt returned FALSE!\n"); + CALL_ENG_DEBUG(ENG_ERR, "voicecall_core_reject_mt returned FALSE!"); } /*Call rejected, reset the accept by flag */ voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT, FALSE); @@ -412,7 +348,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ voicecall_core_end_mo_call(pcall_core->pcall_engine); } else { - CALL_ENG_DEBUG(ENG_ERR, "No Incoming/Outgoing calls, skipping BT request \n"); + CALL_ENG_DEBUG(ENG_ERR, "No Incoming/Outgoing calls, skipping BT request"); } } break; @@ -421,7 +357,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ if (voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { return voicecall_core_process_hold_call(pcall_core); } else { - CALL_ENG_DEBUG(ENG_ERR, "No connected calls, skipping BT request \n"); + CALL_ENG_DEBUG(ENG_ERR, "No connected calls, skipping BT request"); } } @@ -448,7 +384,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ { if (TRUE == voicecall_core_is_any_call_exists(pcall_core->pcall_engine)) { if (TRUE == voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call Accept by BT \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call Accept by BT"); voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT, TRUE); } voicecall_core_start_incall_ss(pcall_core, CALL_VC_CORE_SS_1); @@ -464,7 +400,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ if (TRUE == voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine)) { voicecall_core_is_call_exists(pcall_core->pcall_engine, &bactive_calls, &bheld_calls); if (!((TRUE == bactive_calls) && (TRUE == bheld_calls))) { - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call Accept by BT \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call Accept by BT"); voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT, TRUE); } } @@ -484,7 +420,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ int bt_vol_level = pbt_info->param2; int converted_vol_level; - CALL_ENG_DEBUG(ENG_DEBUG, "BT volume Level: %d \n", bt_vol_level); + CALL_ENG_DEBUG(ENG_DEBUG, "BT volume Level: %d", bt_vol_level); if (voicecall_core_is_any_call_exists(pcall_core->pcall_engine)) { vc_engine_vol_resp_type event_data; @@ -496,7 +432,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ event_data.vol_level = converted_vol_level; vcall_engine_send_event_to_client(VC_ENGINE_MSG_GET_VOLUME_RESP_TO_UI, (void *)&event_data); } else { - CALL_ENG_DEBUG(ENG_ERR, "NO Calls, Skipping BT Response \n"); + CALL_ENG_DEBUG(ENG_ERR, "NO Calls, Skipping BT Response"); } } break; @@ -506,20 +442,18 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ gboolean bswitch_to_headset = FALSE; int bt_error = pbt_info->param2; -#ifdef _NEW_SND_ - if(voicecall_core_get_status(pcall_core, CALL_VC_CORE_FLAG_BT_EVENT_WAITING) == TRUE) { + if (voicecall_core_get_status(pcall_core, CALL_VC_CORE_FLAG_BT_EVENT_WAITING) == TRUE) { b_user_rqst_path_change = TRUE; } else { b_user_rqst_path_change = FALSE; } -#endif voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_BT_EVENT_WAITING, FALSE); /*Switch to response is received from BT, BT decision is fina, so reset the accept by BT */ voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT, FALSE); - CALL_ENG_DEBUG(ENG_DEBUG, "BT Error :%d \n", bt_error); + CALL_ENG_DEBUG(ENG_DEBUG, "BT Error :%d", bt_error); if (0 == bt_error) { /*Audio Connection/Disconnection Success case */ bswitch_to_headset = (BT_AG_REQ_SWITCH_TO_HEADSET == pbt_info->param1) ? TRUE : FALSE; @@ -532,12 +466,12 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ /*Disconnection Error, switch to headset */ bswitch_to_headset = TRUE; } else { - CALL_ENG_DEBUG(ENG_ERR, "Invalid BT Error: %d \n", bt_error); + CALL_ENG_DEBUG(ENG_ERR, "Invalid BT Error: %d", bt_error); } } - CALL_ENG_DEBUG(ENG_DEBUG, "bswitch_to_headset = %d \n", bswitch_to_headset); + CALL_ENG_DEBUG(ENG_DEBUG, "bswitch_to_headset = %d", bswitch_to_headset); if ((TRUE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) || (TRUE == voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine))) { gboolean bupdate = FALSE; @@ -545,7 +479,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ if (0 == bt_error) { /*Connection/Diconnection is sucess, don't send response to BT */ bupdate = _vc_bt_switch_headset_path(pcall_core, bswitch_to_headset, FALSE); - CALL_ENG_DEBUG(ENG_DEBUG, "bupdate = %d, bswitch_to_headset = %d \n", bupdate, bswitch_to_headset); + CALL_ENG_DEBUG(ENG_DEBUG, "bupdate = %d, bswitch_to_headset = %d", bupdate, bswitch_to_headset); vc_engine_headset_status_type event_data; memset(&event_data, 0, sizeof(event_data)); @@ -557,7 +491,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ } } else { - CALL_ENG_DEBUG(ENG_ERR, "No connected/outgoing calls, Skipping BT Request \n"); + CALL_ENG_DEBUG(ENG_ERR, "No connected/outgoing calls, Skipping BT Request"); } } break; @@ -566,7 +500,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ gboolean active_calls = FALSE; gboolean held_calls = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, "Send DTMF(%s)\n", pbt_info->param4); + CALL_ENG_DEBUG(ENG_DEBUG, "Send DTMF(%s)", pbt_info->param4); if ((voicecall_core_is_call_exists(pcall_core->pcall_engine, &active_calls, &held_calls)) && (TRUE == active_calls)) { voicecall_core_send_dtmf(pcall_core, pbt_info->param4); } @@ -575,7 +509,7 @@ gboolean _vc_bt_handle_bt_events(call_vc_core_state_t *pcall_core, connectivity_ case BT_AG_REQ_CALL_REDIAL: default: - CALL_ENG_DEBUG(ENG_DEBUG, "Action not defined for bt event: %d\n", pbt_info->param1); + CALL_ENG_DEBUG(ENG_DEBUG, "Action not defined for bt event: %d", pbt_info->param1); return FALSE; break; @@ -598,12 +532,12 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, VOICECALL_RETURN_IF_FAIL(pcall_core != NULL); connectivity_bt_ag_param_info_t bt_response_info; - CALL_ENG_DEBUG(ENG_DEBUG, "Event: %s(%d), param1=[%d] \n", gszbt_res_event[bt_event], bt_event, param1); + CALL_ENG_DEBUG(ENG_DEBUG, "Event: %s(%d), param1=[%d]", gszbt_res_event[bt_event], bt_event, param1); /*Skip events, if Bluetooth is not connected */ /* if((FALSE == pcall_core->bt_connected) && (BT_AG_RES_CALL_STATUS != bt_event)) { - CALL_ENG_DEBUG(ENG_DEBUG,"Bluetooth not connected , Not sending any responses to BT\n"); + CALL_ENG_DEBUG(ENG_DEBUG,"Bluetooth not connected , Not sending any responses to BT"); return; } */ @@ -630,12 +564,12 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, /*Incoming Call */ _vc_core_engine_status_get_call_handle_bytype(pcall_core->pcall_engine, VC_INCOMING_CALL, &mt_call_handle); if (mt_call_handle != -1) { - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming Call Exists, call handle = %d \n", mt_call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "Incoming Call Exists, call handle = %d", mt_call_handle); call_status_info[index].call_id = mt_call_handle; call_status_info[index].call_status = BT_AG_CALL_STATUS_INCOMING; index++; - CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after mt= %d \n", index); + CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after mt= %d", index); } /*Outgoing Call */ @@ -645,7 +579,7 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, gboolean bvalid_call = TRUE; _vc_core_engine_status_get_call_state_byhandle(pcall_core->pcall_engine, mo_call_handle, &call_state); - CALL_ENG_DEBUG(ENG_DEBUG, "call state: %d \n", call_state); + CALL_ENG_DEBUG(ENG_DEBUG, "call state: %d", call_state); switch (call_state) { case VC_CALL_STATE_OUTGOING_ALERT: @@ -661,14 +595,14 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, } break; default: /*All Other states , donot consider for mocall */ - CALL_ENG_DEBUG(ENG_DEBUG, "mo call state: %d \n", call_state); + CALL_ENG_DEBUG(ENG_DEBUG, "mo call state: %d", call_state); bvalid_call = FALSE; } if (TRUE == bvalid_call) { call_status_info[index].call_id = mo_call_handle; index++; - CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after mo= %d \n", index); + CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after mo= %d", index); } } @@ -679,11 +613,11 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, _vc_core_engine_group_get_group_indices(pcall_core->pcall_engine, &act_grp_index, &held_grp_index); - CALL_ENG_DEBUG(ENG_DEBUG, "act_grp_index = %d, held_grp_index = %d\n", act_grp_index, held_grp_index); + CALL_ENG_DEBUG(ENG_DEBUG, "act_grp_index = %d, held_grp_index = %d", act_grp_index, held_grp_index); /*Active Connected Call */ if (act_grp_index != -1) { _vc_core_engine_group_get_connected_member_count(pcall_core->pcall_engine, act_grp_index, &active_group_member_num); - CALL_ENG_DEBUG(ENG_DEBUG, "active_group_connected_member_num = %d \n", active_group_member_num); + CALL_ENG_DEBUG(ENG_DEBUG, "active_group_connected_member_num = %d", active_group_member_num); for (i = 0; i < active_group_member_num; i++) { _vc_core_engine_group_get_call_handle_byposition(pcall_core->pcall_engine, act_grp_index, i, &connected_call_handle); if (connected_call_handle != -1) { @@ -692,27 +626,27 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, index++; } } - CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after active calls= %d \n", index); + CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after active calls= %d", index); } /*Held Connected Call */ if (held_grp_index != -1) { _vc_core_engine_group_get_connected_member_count(pcall_core->pcall_engine, held_grp_index, &held_group_member_num); - CALL_ENG_DEBUG(ENG_DEBUG, "held_group_member_num = %d \n", held_group_member_num); + CALL_ENG_DEBUG(ENG_DEBUG, "held_group_member_num = %d", held_group_member_num); for (i = 0; i < held_group_member_num; i++) { _vc_core_engine_group_get_call_handle_byposition(pcall_core->pcall_engine, held_grp_index, i, &connected_call_handle); - CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle[%d] = %d \n", i, connected_call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle[%d] = %d", i, connected_call_handle); if (connected_call_handle != -1) { call_status_info[index].call_id = connected_call_handle; call_status_info[index].call_status = BT_AG_CALL_STATUS_HELD; index++; } } - CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after held calls= %d \n", index); + CALL_ENG_DEBUG(ENG_DEBUG, "total_call_member after held calls= %d", index); } - CALL_ENG_DEBUG(ENG_DEBUG, "Total Calls = %d \n", index); + CALL_ENG_DEBUG(ENG_DEBUG, "Total Calls = %d", index); bt_response_info.param2 = index; memset(result_str, 0x00, sizeof(result_str)); @@ -721,18 +655,18 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, snprintf(temp_str, sizeof(temp_str), "%d.%d/", call_status_info[i].call_id, call_status_info[i].call_status); strncat(result_str, temp_str, sizeof(temp_str) - 1); } - CALL_ENG_DEBUG(ENG_DEBUG, "The resultant string is %s\n", result_str); + CALL_ENG_DEBUG(ENG_DEBUG, "The resultant string is %s", result_str); _vc_core_util_strcpy(bt_response_info.param4, sizeof(bt_response_info.param4), result_str); - CALL_ENG_DEBUG(ENG_DEBUG, "Actual Data Passed is %s \n", bt_response_info.param4); - CALL_ENG_DEBUG(ENG_DEBUG, "Actual Data Passed to BT \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Actual Data Passed is %s", bt_response_info.param4); + CALL_ENG_DEBUG(ENG_DEBUG, "Actual Data Passed to BT"); for (i = 0; i < index; i++) { - CALL_ENG_DEBUG(ENG_DEBUG, "call id = %d \n", call_status_info[i].call_id); - CALL_ENG_DEBUG(ENG_DEBUG, "call status= %d \n", call_status_info[i].call_status); + CALL_ENG_DEBUG(ENG_DEBUG, "call id = %d", call_status_info[i].call_id); + CALL_ENG_DEBUG(ENG_DEBUG, "call status= %d", call_status_info[i].call_status); } - CALL_ENG_DEBUG(ENG_DEBUG, "Verification of BT data being sent\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Verification of BT data being sent"); } break; @@ -740,7 +674,7 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, { /*Length of Incoming Call Number */ if (NULL != param2) { - CALL_ENG_DEBUG(ENG_DEBUG, "phone number=%s\n", (char *)param2); + CALL_ENG_DEBUG(ENG_DEBUG, "phone number=%s", (char *)param2); bt_response_info.param2 = strlen(param2); bt_response_info.param3 = param1; _vc_core_util_strcpy(bt_response_info.param4, VC_PHONE_NUMBER_LENGTH_MAX, param2); @@ -750,21 +684,18 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, case BT_AG_RES_CALL_ORIG: { if (NULL != param2) { - CALL_ENG_DEBUG(ENG_DEBUG, "phone number=%s\n", (char *)param2); -#ifdef _NEW_SND_ + CALL_ENG_DEBUG(ENG_DEBUG, "phone number=%s", (char *)param2); switch (voicecall_snd_get_path_status(pcall_core->papp_snd)) { - case VOICE_CALL_SND_PATH_RECEIVER: + case VOICE_CALL_SND_PATH_RECEIVER_EARJACK: case VOICE_CALL_SND_PATH_SPEAKER: - case VOICE_CALL_SND_PATH_EARJACK: bt_response_info.param2 = FALSE; break; case VOICE_CALL_SND_PATH_BT: bt_response_info.param2 = TRUE; break; + default: + break; } -#else - bt_response_info.param2 = strlen(param2); -#endif bt_response_info.param3 = param1; _vc_core_util_strcpy(bt_response_info.param4, VC_PHONE_NUMBER_LENGTH_MAX, param2); } @@ -779,18 +710,17 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, case BT_AG_RES_CALL_CONNECT: case BT_AG_RES_CALL_END: { -#ifdef _NEW_SND_ switch (voicecall_snd_get_path_status(pcall_core->papp_snd)) { - case VOICE_CALL_SND_PATH_RECEIVER: + case VOICE_CALL_SND_PATH_RECEIVER_EARJACK: case VOICE_CALL_SND_PATH_SPEAKER: - case VOICE_CALL_SND_PATH_EARJACK: bt_response_info.param2 = FALSE; break; case VOICE_CALL_SND_PATH_BT: bt_response_info.param2 = TRUE; break; + default: + break; } -#endif /*Assign Call Handle */ bt_response_info.param3 = param1; } @@ -801,7 +731,7 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, break; case BT_AG_RES_HEADSET_VOL: /*Request For Current BT Volume Level */ { - CALL_ENG_DEBUG(ENG_DEBUG, "Requesting for Current BT Volume Level \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Requesting for Current BT Volume Level"); } break; case BT_AG_RES_SWITCH_TO_HEADSET: @@ -818,7 +748,7 @@ void _vc_bt_send_response_to_bt(call_vc_core_state_t *pcall_core, int bt_event, vc_engine_on_dbus_send_response_to_bt(bt_response_info); - CALL_ENG_DEBUG(ENG_DEBUG, "bt response ended.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "bt response ended."); } @@ -836,12 +766,12 @@ gboolean _vc_bt_status_init(call_vc_core_state_t *pcall_core) int bstatus = 0; bstatus = _vc_bt_get_bt_status(); - CALL_ENG_DEBUG(ENG_DEBUG, "bt_connected:[%d]\n", bstatus); + CALL_ENG_DEBUG(ENG_DEBUG, "bt_connected:[%d]", bstatus); __vc_bt_handle_connectivity_event(pcall_core, bstatus); ret = vconf_notify_key_changed(VCONFKEY_BT_DEVICE, (void *)_vc_bt_handle_phonestatus_bt_events, pcall_core); if (0 != ret) { - CALL_ENG_DEBUG(ENG_ERR, "vconf_notify_key_changed failed..[%d]\n", ret); + CALL_ENG_DEBUG(ENG_ERR, "vconf_notify_key_changed failed..[%d]", ret); return FALSE; } return TRUE; @@ -860,9 +790,9 @@ gboolean _vc_bt_get_bt_status(void) ret = vconf_get_int(VCONFKEY_BT_DEVICE, &bt_status); if (0 == ret) { - CALL_ENG_DEBUG(ENG_DEBUG, "bt_status = [0x%x] \n", bt_status); + CALL_ENG_DEBUG(ENG_DEBUG, "bt_status = [0x%x]", bt_status); } else { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..[%d]\n", ret); + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..[%d]", ret); } return (VCONFKEY_BT_DEVICE_HEADSET_CONNECTED == (bt_status & VCONFKEY_BT_DEVICE_HEADSET_CONNECTED)) ? TRUE : FALSE; @@ -895,11 +825,11 @@ gboolean _vc_bt_handle_phonestatus_bt_events(keynode_t *node, call_vc_core_state gboolean bt_conn_status = FALSE; int bt_status = vconf_keynode_get_int(node); - CALL_ENG_DEBUG(ENG_DEBUG, "bt_status = [0x%x] \n", bt_status); + CALL_ENG_DEBUG(ENG_DEBUG, "bt_status = [0x%x]", bt_status); /*set the sound status */ bt_conn_status = (VCONFKEY_BT_DEVICE_HEADSET_CONNECTED == (bt_status & VCONFKEY_BT_DEVICE_HEADSET_CONNECTED)) ? TRUE : FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, "bt_conn_status = %d\n", bt_conn_status); + CALL_ENG_DEBUG(ENG_DEBUG, "bt_conn_status = %d", bt_conn_status); __vc_bt_handle_connectivity_event(pcall_core, bt_conn_status); return TRUE; @@ -908,7 +838,7 @@ gboolean _vc_bt_handle_phonestatus_bt_events(keynode_t *node, call_vc_core_state /** * This function retreives volume level of headset * - * @return + * @return * @param[in] pcall_core Handle to voicecall core */ void _vc_bt_get_headset_volume(call_vc_core_state_t *pcall_core) @@ -944,9 +874,9 @@ gboolean _vc_bt_get_bt_sco_status(void) ret = vconf_get_bool(VCONFKEY_BT_HEADSET_SCO, &sco_status); if (0 == ret) { - CALL_ENG_DEBUG(ENG_DEBUG, "sco_status = [%d] \n", sco_status); + CALL_ENG_DEBUG(ENG_DEBUG, "sco_status = [%d]", sco_status); } else { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..[%d]\n", ret); + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..[%d]", ret); } return sco_status; @@ -957,13 +887,13 @@ gboolean _vc_bt_get_bt_sco_status(void) * * @return TRUE if bt is connected, FALSE otherwise * @param[in] pcall_core Handle to voicecall core - * @param[in] bheadset headset status + * @param[in] bheadset headset status */ gboolean _vc_bt_process_bt_handset(call_vc_core_state_t *pcall_core, int bheadset) { VOICECALL_RETURN_FALSE_IF_FAIL(pcall_core != NULL); - CALL_ENG_DEBUG(ENG_DEBUG, "bheadset:[%d] \n", bheadset); + CALL_ENG_DEBUG(ENG_DEBUG, "bheadset:[%d]", bheadset); if (bheadset) { if (FALSE == _vc_bt_get_bt_status()) { vc_engine_on_dbus_send_connect_to_bt(); diff --git a/call-engine/voice-call-core.c b/call-engine/voice-call-core.c index da160a7..9d6eb95 100755 --- a/call-engine/voice-call-core.c +++ b/call-engine/voice-call-core.c @@ -15,6 +15,8 @@ */ +#include + #include "vc-core-util.h" #include "vc-core-engine-types.h" #include "vc-core-callagent.h" @@ -24,8 +26,11 @@ #include "voice-call-dbus.h" #include "voice-call-engine-msg.h" #include "voice-call-service.h" +#include "voice-call-device.h" +#include "voice-call-sound.h" #include "voice-call-bt.h" +#include "phone-misc.h" #include "vc-core-engine.h" #include "voice-call-engine.h" @@ -45,7 +50,7 @@ gboolean mo_redial_timer_cb(void *data); #define SET_PATH_TIMER_VALUE 50 -static guint g_set_path_timer_handler = 0; +static guint g_set_path_timer_handler = 0; static gboolean __voicecall_core_set_path_timer_cb(gpointer puser_data); /* For Debug Information, Call Engine Event name string constant */ @@ -59,7 +64,7 @@ char *gszcall_engine_event[VC_ENGINE_EVENT_MAX] = { "VC_CALL_INCOM_END", "VC_CALL_INCOM_DROPPED", "VC_CALL_REJECTED_END", - "VC_CALL_OUTGOING_END", /* 10 */ + "VC_CALL_OUTGOING_END", /* 10 */ "VC_CALL_OUTGOING_ABORTED", "VC_CALL_DTMF_ACK", @@ -81,7 +86,7 @@ char *gszcall_engine_event[VC_ENGINE_EVENT_MAX] = { "VC_CALL_IND_BARRING", "VC_CALL_IND_WAITING", "VC_CALL_IND_CUGINFO", - "VC_CALL_IND_SSNOTIFY", /* 30 */ + "VC_CALL_IND_SSNOTIFY", /* 30 */ "VC_CALL_IND_CALLINGNAMEINFO", "VC_CALL_IND_REDIRECT_CNF", @@ -98,18 +103,20 @@ char *gszcall_engine_event[VC_ENGINE_EVENT_MAX] = { "VC_CALL_GET_VOLUME_RESP" }; -static void __voicecall_core_check_headset_earjack_status(call_vc_core_state_t *pcall_core); +static gboolean __vc_core_is_answermode_enabled_from_testmode(void); +static gboolean __vc_core_is_answermode_enabled(void); +static void __voicecall_core_start_auto_answer(call_vc_core_state_t *pcall_core, gboolean isTestMode); +static void __voicecall_core_cancel_auto_answer(call_vc_core_state_t *pcall_core); +/*static void __voicecall_core_check_headset_earjack_status(call_vc_core_state_t *pcall_core);*/ static void __vc_core_set_auto_redial_count(call_vc_core_state_t *pcall_core, int auto_redial_count); -static gboolean __voicecall_core_callstatus_set_timer_cb(gpointer puser_data); +/*static gboolean __voicecall_core_callstatus_set_timer_cb(gpointer puser_data);*/ static int __voicecall_core_get_string_id_by_errorcode(int error_code); static void __voicecall_core_mocall_reset_engine_state(voicecall_engine_t *pcall_engine); static gboolean __voicecall_core_is_redial_cuase(int end_cause); -#ifdef PDIAL_SEND_DTMF static gboolean __voicecall_core_queue_dtmf_string(call_vc_core_state_t *pcall_core, char *dtmf_string, gboolean bsat_dtmf); static gboolean __voicecall_core_handle_dtmf_ack(call_vc_core_state_t *pcall_core, gboolean success); -#endif /** * This function puts the currently active call on hold @@ -122,7 +129,6 @@ inline gboolean voicecall_core_hold_call(voicecall_engine_t *pcall_engine) voicecall_error_t error_code = ERROR_VOICECALL_NONE; - PRINT_CURRENT_TIME("Call Hold Start at"); error_code = _vc_core_engine_hold_call(pcall_engine); CALL_ENG_DEBUG(ENG_DEBUG, "Error Code : %d", error_code); @@ -139,7 +145,6 @@ inline gboolean voicecall_core_retrieve_call(voicecall_engine_t *pcall_engine) { voicecall_error_t error_code = ERROR_VOICECALL_NONE; - PRINT_CURRENT_TIME("Call Retrieve Start at"); error_code = _vc_core_engine_retrieve_call(pcall_engine); CALL_ENG_DEBUG(ENG_DEBUG, "Error Code : %d", error_code); @@ -156,7 +161,6 @@ inline gboolean voicecall_core_swap_calls(voicecall_engine_t *pcall_engine) { voicecall_error_t error_code = ERROR_VOICECALL_NONE; - PRINT_CURRENT_TIME("Call Swap Start at"); error_code = _vc_core_engine_swap_calls(pcall_engine); CALL_ENG_DEBUG(ENG_DEBUG, "Error Code : %d", error_code); @@ -229,7 +233,7 @@ inline gboolean voicecall_core_get_engine_state(voicecall_engine_t *pcall_engine * @param[out] active_calls TRUE - If active call exists or FALSE If active call doesn't exists * @param[out] held_calls TRUE - If held call exists or FALSE If held call doesn't exists */ -inline gboolean voicecall_core_is_call_exists(voicecall_engine_t *pcall_engine, gboolean * active_calls, gboolean * held_calls) +inline gboolean voicecall_core_is_call_exists(voicecall_engine_t *pcall_engine, gboolean *active_calls, gboolean *held_calls) { return (ERROR_VOICECALL_NONE == _vc_core_engine_status_isexists_any_call(pcall_engine, active_calls, held_calls)) ? TRUE : FALSE; } @@ -381,9 +385,9 @@ inline gboolean voicecall_core_is_incall_request_possible(voicecall_engine_t *pc * @param[in] pcall_engine Handle to voicecall engine * @param[in] audio_path audio path to be changed */ -inline gboolean voicecall_core_change_audio_path(voicecall_engine_t *pcall_engine, voicecall_audio_path_t audio_path) +inline gboolean voicecall_core_change_audio_path(voicecall_engine_t *pcall_engine, voicecall_audio_path_t audio_path, gboolean bextra_volume) { - return (ERROR_VOICECALL_NONE == _vc_core_engine_change_audio_path(pcall_engine, audio_path)) ? TRUE : FALSE; + return (ERROR_VOICECALL_NONE == _vc_core_engine_change_audio_path(pcall_engine, audio_path, bextra_volume)) ? TRUE : FALSE; } /** @@ -555,7 +559,7 @@ inline gboolean voicecall_core_set_check_ss_on_end(call_vc_core_state_t *pcall_c * This function extracts vaild phone number * * @return void - * @param[in] + * @param[in] */ inline void voicecall_core_extract_phone_number(const char *source_tel_number, char *phone_number, const int buf_size) { @@ -603,39 +607,6 @@ gboolean voicecall_core_get_status(call_vc_core_state_t *pcall_core, call_vc_cor return FALSE; } -#ifdef VC_ENG_FDN_SUPPORT -gboolean voicecall_core_check_fdn_status(call_vc_core_state_t *pcall_core) -{ - gboolean bfdn_enabled = FALSE; - - /*Check the FDN Status of the number with the contact */ - _vc_core_engine_status_isenabled_fdn(pcall_core->pcall_engine, &bfdn_enabled); - voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_FDN_SVC_ENABLED, bfdn_enabled); - - if (TRUE == bfdn_enabled) { - gboolean bct_exists = FALSE; - - CALL_ENG_DEBUG(ENG_DEBUG, "FDN mode enabled.."); - if (!bct_exists) { - vc_engine_msg_box_type event_data; - memset(&event_data, 0, sizeof(event_data)); - - CALL_ENG_DEBUG(ENG_DEBUG, "FDN only..."); - _vc_core_engine_finalize_call(pcall_core->pcall_engine, VC_OUTGOING_CALL, -1); - - event_data.string_id = IDS_CALL_POP_FDNCALLONLY; - vcall_engine_send_event_to_client(VC_ENGINE_MSG_MESSAGE_BOX_TO_UI, (void *)&event_data); - return FALSE; - } - - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "FDN mode disabled.."); - } - - return TRUE; -} -#endif - static gboolean __voicecall_core_minute_minder(gpointer puser_data) { CALL_ENG_DEBUG(ENG_DEBUG, ".."); @@ -671,9 +642,9 @@ static gboolean __voicecall_core_handle_call_end_on_silent_reject(call_vc_core_s CALL_ENG_DEBUG(ENG_DEBUG, "call_handle = %d", call_handle); if ((pcall_core->mtcall_silent_reject_handle == call_handle)) { + /*Call rejected due to lawmo lock */ if (FALSE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { /*Connected calls need to be checked, Connected emergency calls may be avaialble */ - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RESET); voicecall_core_set_to_default(pcall_core); } else { CALL_ENG_DEBUG(ENG_ERR, "Connected calls available"); @@ -715,7 +686,7 @@ static void __voicecall_core_processing_mo_cancel(call_vc_core_state_t *pcall_co CALL_ENG_DEBUG(ENG_DEBUG, "Signal is playing, skipping cancel timer"); return; } - + vc_engine_outgoing_end_type event_data; /* normal outgong end */ @@ -757,7 +728,6 @@ static void __voicecall_core_mocall_signal_play_end_cb(gpointer pdata) if (FALSE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { CALL_ENG_DEBUG(ENG_DEBUG, "No More calls, resetting path"); - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RESET); _vc_core_util_set_call_status(VCONFKEY_CALL_OFF); } @@ -803,32 +773,20 @@ static void __voicecall_core_handle_normal_end(call_vc_core_state_t *pcall_core, } else if ((TRUE == voicecall_core_is_incoming_call_exists(pcall_engine)) || (TRUE == voicecall_core_is_outgoing_call_exists(pcall_engine))) { _vc_core_util_set_call_status(VCONFKEY_CALL_VOICE_CONNECTING); } else { - /*Reset the Path. Actual path must be closed when modem path closed!! */ - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RESET); + /*Reset the Path Actual path must be closed when modem path closed!! */ _vc_core_util_set_call_status(VCONFKEY_CALL_OFF); } if (FALSE == voicecall_snd_play_effect_tone(pcall_core->papp_snd, VOICE_CALL_SND_EFFECT_CALL_DISCONNECT)) { CALL_ENG_DEBUG(ENG_DEBUG, "Effect tone not played, check and play busy tone"); } - -#ifdef _NEW_SND_ - if ((FALSE == voicecall_core_is_connected_call_exist(pcall_engine)) - && (TRUE == voicecall_core_is_incoming_call_exists(pcall_engine)) - && (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_SPEAKER)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming Call: TRUE,Connected Call:FALSE, Speaker: TRUE. So change path to normal"); - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER); - voicecall_snd_change_path(pcall_core->papp_snd); - } -#else - if ((FALSE == voicecall_core_is_connected_call_exist(pcall_engine)) - && (TRUE == voicecall_core_is_incoming_call_exists(pcall_engine)) - && (TRUE == voicecall_snd_get_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_SPEAKER))) { + if ((FALSE == voicecall_core_is_connected_call_exist(pcall_engine)) + && (TRUE == voicecall_core_is_incoming_call_exists(pcall_engine)) + && (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_SPEAKER)) { CALL_ENG_DEBUG(ENG_DEBUG, "Incoming Call: TRUE,Connected Call:FALSE, Speaker: TRUE. So change path to normal"); - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_SPEAKER, FALSE); + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); voicecall_snd_change_path(pcall_core->papp_snd); } -#endif voicecall_core_clear_connected_call(pcall_engine, call_handle); @@ -903,8 +861,7 @@ static void __voicecall_core_handle_outgoingcall_end(call_vc_core_state_t *pcall /* Set phonestatus value */ _vc_core_util_set_call_status(VCONFKEY_CALL_VOICE_ACTIVE); } else if (FALSE == bsignal_play) { - /*Reset the Path. Actual path must be closed when modem path closed!! */ - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RESET); + /*Reset the Path Actual path must be closed when modem path closed!! */ _vc_core_util_set_call_status(VCONFKEY_CALL_OFF); } else { /* othing to do. */ @@ -958,15 +915,11 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param vc_engine_incoming_type event_data; memset(&event_data, 0, sizeof(event_data)); + event_data.bday_remaining_days = -1; CALL_ENG_DEBUG(ENG_DEBUG, "tel_number:[%s]", (char *)param3); _vc_core_util_strcpy(tel_number, sizeof(tel_number), (char *)param3); -#ifdef _NEW_SND_ -#else - __voicecall_core_check_headset_earjack_status(pcall_core); -#endif - /*Changing the path to headset/phone will be decided by user accept action. This will apply for second incoming call, if the first call was accpeted by BT Headset and the path was changed to BT headset, then the path will be in headset for second call by default @@ -979,6 +932,7 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT, FALSE); if (_vc_core_util_check_video_call_status() == TRUE) { + /*Check for Lawmo Lock */ if (TRUE == __voicecall_core_silent_reject_mt(pcall_core, call_handle)) { CALL_ENG_DEBUG(ENG_DEBUG, "Call rejected due to silent reject"); return TRUE; @@ -1010,6 +964,68 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param } event_data.contact_index = -1; event_data.phone_type = -1; + } else { + voicecall_contact_info_t ct_info; + memset(&ct_info, 0, sizeof(ct_info)); + ct_info.ct_index = -1; + + voicecall_service_contact_info_by_number(tel_number, &ct_info); + + _vc_core_util_strcpy(event_data.call_name, sizeof(event_data.call_name), ct_info.display_name); + _vc_core_util_strcpy(event_data.call_file_path, sizeof(event_data.call_file_path), ct_info.caller_id_path); + _vc_core_util_strcpy(event_data.call_full_file_path, sizeof(event_data.call_full_file_path), ct_info.caller_full_id_path); + event_data.contact_index = ct_info.ct_index; + event_data.phone_type = ct_info.phone_type; + event_data.bday_remaining_days = ct_info.bday_remaining_days; + + voicecall_snd_mgr_t *papp_snd = pcall_core->papp_snd; + char ringtone_path[VOICE_CALL_SND_RINGTONE_PATH_LEN] = { 0, }; + memset(papp_snd->ring_tone, 0, VOICE_CALL_SND_RINGTONE_PATH_LEN); + if (TRUE == g_file_test(ct_info.ring_tone, G_FILE_TEST_EXISTS)) { + snprintf(ringtone_path, sizeof(ringtone_path), "file://%s", ct_info.ring_tone); + _vc_core_util_strcpy(papp_snd->ring_tone, VOICE_CALL_SND_RINGTONE_PATH_LEN, ringtone_path); + CALL_ENG_DEBUG(ENG_DEBUG, "From Contact Ringtone: %s", papp_snd->ring_tone); + } else { + /*Get Ringtone File From Settings */ + CALL_ENG_DEBUG(ENG_DEBUG, "Invalid Ringtone from Contact: %s", ct_info.ring_tone); + } + } + + /*Auto Reject Check */ + if (vconf_get_bool(VCONFKEY_CISSAPPL_AUTO_REJECT_BOOL, &bauto_reject)) { + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed."); + } + + if (bauto_reject) { + CALL_ENG_DEBUG(ENG_DEBUG, "** Auto Reject Enabled. **"); + + if (vconf_get_bool(VCONFKEY_CISSAPPL_AUTO_REJECT_UNKNOWN_BOOL, &bauto_reject_unknown)) { + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed."); + } + CALL_ENG_DEBUG(ENG_DEBUG, "bauto_reject_unknown:[%d]", bauto_reject_unknown); + + if ((0 == strlen(tel_number)) && (TRUE == bauto_reject_unknown)) { + brejected_number = 1; + CALL_ENG_DEBUG(ENG_DEBUG, "Unknwon Rejected."); + } else { + phone_misc_h *handle = NULL; + + handle = phone_misc_connect(); + if (handle == NULL) { + CALL_ENG_DEBUG(ENG_ERR, "misc connect fail"); + brejected_number = FALSE; + } else { + int ret = phone_misc_block_check(handle, tel_number); + if (ret > 0) { + brejected_number = TRUE; + } else { + brejected_number = FALSE; + } + phone_misc_disconnect(handle); + handle = NULL; + } + CALL_ENG_DEBUG(ENG_DEBUG, "Call Log DB rejected:[%d]", brejected_number); + } } /* send to ui */ @@ -1019,29 +1035,34 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param vcall_engine_send_event_to_client(VC_ENGINE_MSG_INCOM_TO_UI, (void *)&event_data); - _vc_core_util_set_sleep_status(CALL_VC_POWER_PROHIBIT_DIMMING); + { + /* in case of rejected number, sound & callstatus is not processed */ + if (!brejected_number) { + gboolean benabledTestMode = FALSE; + voicecall_snd_register_cm(pcall_core->papp_snd); - /* in case of rejected number, sound & callstatus is not processed */ - if (!brejected_number) { - gboolean benabledTestMode = FALSE; - voicecall_snd_register_cm(pcall_core->papp_snd); + /*Send Incoming Call Event to Blue Tooth */ + _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_CALL_INCOM, call_handle, tel_number); - /*Send Incoming Call Event to Blue Tooth */ - _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_CALL_INCOM, call_handle, tel_number); + _vc_core_util_set_call_status(VCONFKEY_CALL_VOICE_CONNECTING); - CALL_ENG_DEBUG(ENG_DEBUG, "Preparing Sound "); - voicecall_snd_prepare_alert(pcall_core->papp_snd, call_handle); - if (FALSE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Changing MM Path just before playing the ring tone"); - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RING_TONE); - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "2nd MT call alert."); - } - voicecall_snd_play_alert(pcall_core->papp_snd); + benabledTestMode = __vc_core_is_answermode_enabled_from_testmode(); + if ((TRUE == __vc_core_is_answermode_enabled()) || (TRUE == benabledTestMode)) { + CALL_ENG_DEBUG(ENG_DEBUG, "auto answer mode is enabled."); + __voicecall_core_start_auto_answer(pcall_core, benabledTestMode); + } - _vc_core_util_set_call_status(VCONFKEY_CALL_VOICE_CONNECTING); + CALL_ENG_DEBUG(ENG_DEBUG, "Preparing Sound "); + voicecall_snd_prepare_alert(pcall_core->papp_snd, call_handle); + if (FALSE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { + CALL_ENG_DEBUG(ENG_DEBUG, "Changing MM Path just before playing the ring tone"); + sound_manager_call_session_set_mode(pcall_core->papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_RINGTONE); + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "2nd MT call alert."); + } + voicecall_snd_play_alert(pcall_core->papp_snd); + } } - } break; @@ -1071,7 +1092,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d, bemergency:[%d]", event_data.call_handle, event_data.bemergency); vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI, (void *)&event_data); - _voicecall_dvc_proximity_sensor_init(pcall_core); g_set_path_timer_handler = g_timeout_add(SET_PATH_TIMER_VALUE, __voicecall_core_set_path_timer_cb, pcall_core); @@ -1088,8 +1108,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param memset(&event_data, 0, sizeof(event_data)); - PRINT_CURRENT_TIME("Alert Indication received at "); - event_data.call_handle = call_handle; vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_ALERT_TO_UI, (void *)&event_data); @@ -1132,13 +1150,11 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param event_data.bt_status = (int)_vc_bt_get_bt_status(); vcall_engine_send_event_to_client(VC_ENGINE_MSG_CONNECTED_TO_UI, (void *)&event_data); - _voicecall_dvc_proximity_sensor_init(pcall_core); - + voicecall_snd_stop_alert(pcall_core->papp_snd); /* To stop alert in case of call accept by AT command */ voicecall_snd_change_path(pcall_core->papp_snd); - /* Set phonestatus value */ + /* Set phone-status value */ _vc_core_util_set_call_status(VCONFKEY_CALL_VOICE_ACTIVE); - _vc_core_util_set_sleep_status(CALL_VC_POWER_GRANT_DIMMING); /* check minute minder */ if (vconf_get_bool(VCONFKEY_CISSAPPL_MINUTE_MINDER_BOOL, &bstatus)) { @@ -1156,9 +1172,7 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param /*Call is accepted, reset the flag */ voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT, FALSE); -#ifdef PDIAL_SEND_DTMF - g_idle_add(voicecall_core_send_phone_number_dtmf, (gpointer) call_handle); -#endif + } break; @@ -1167,7 +1181,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param int call_handle = param1; voice_call_end_cause_type_t end_cause = param2; vc_engine_normal_end_type event_data; - int active_call_members = -1; memset(&event_data, 0, sizeof(event_data)); @@ -1205,7 +1218,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param __voicecall_core_handle_incoming_call_end(pcall_core, call_handle); - _vc_core_util_set_sleep_status(CALL_VC_POWER_GRANT_DIMMING); vcall_engine_send_event_to_client(VC_ENGINE_MSG_INCOM_END_TO_UI, (void *)&event_data); } break; @@ -1231,7 +1243,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param __voicecall_core_handle_rejected_call_end(pcall_core, call_handle); - _vc_core_util_set_sleep_status(CALL_VC_POWER_GRANT_DIMMING); vcall_engine_send_event_to_client(VC_ENGINE_MSG_REJECTED_END_TO_UI, (void *)&event_data); } break; @@ -1243,11 +1254,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param int bauto_redial = -1; CALL_ENG_DEBUG(ENG_DEBUG, "end cause type :[%d]", end_cause_type); - - if (vconf_get_bool(VCONFKEY_CISSAPPL_VOICE_AUTO_REDIAL_BOOL, &bauto_redial)) { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed."); - } - CALL_ENG_DEBUG(ENG_DEBUG, "bauto_redial:[%d]", bauto_redial); if ((TRUE == bauto_redial) && (FALSE == voicecall_core_is_connected_call_exist(pcall_engine)) @@ -1268,7 +1274,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param } else { __voicecall_core_handle_outgoingcall_end(pcall_core, call_handle, end_cause_type); } - _vc_core_util_set_sleep_status(CALL_VC_POWER_GRANT_DIMMING); } break; @@ -1279,8 +1284,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param memset(&event_data, 0, sizeof(event_data)); vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_ABORTED_TO_UI, (void *)&event_data); - - _vc_core_util_set_sleep_status(CALL_VC_POWER_GRANT_DIMMING); } break; @@ -1288,9 +1291,7 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param { gboolean bsuccess = param1; CALL_ENG_DEBUG(ENG_DEBUG, "bsuccess:[%d]", bsuccess); -#ifdef PDIAL_SEND_DTMF __voicecall_core_handle_dtmf_ack(pcall_core, bsuccess); -#endif } break; @@ -1302,10 +1303,8 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param case VC_CALL_SS_HELD: { - int io_state = -1; int call_handle = param1; vc_engine_common_type event_data; - PRINT_CURRENT_TIME("Call Hold Ends at"); /* held popup shold not be displayed on outgoing popup */ memset(&event_data, 0, sizeof(event_data)); @@ -1321,7 +1320,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param { int call_handle = param1; vc_engine_common_type event_data; - PRINT_CURRENT_TIME("Call Retrieve Ends at"); /* held popup shold not be displayed on outgoing popup */ memset(&event_data, 0, sizeof(event_data)); @@ -1337,7 +1335,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param vc_engine_common_type event_data; int call_handle = param1; - PRINT_CURRENT_TIME("Call Swap Ends at"); memset(&event_data, 0, sizeof(event_data)); @@ -1352,8 +1349,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param { vc_engine_common_type event_data; - PRINT_CURRENT_TIME("Setup Conf Ends at"); - memset(&event_data, 0, sizeof(event_data)); /* Show Call Joined Message Box */ @@ -1369,8 +1364,6 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param int call_handle = param1; CALL_ENG_DEBUG(ENG_DEBUG, "The handle to be split is %d", call_handle); - PRINT_CURRENT_TIME("Split Conf Ends at"); - memset(&event_data, 0, sizeof(event_data)); event_data.call_handle = call_handle; @@ -1595,6 +1588,7 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param _vc_core_util_strcpy(event_data.call_num, sizeof(event_data.call_num), pcall_core->call_setup_info.tel_number); event_data.contact_index = -1; event_data.phone_type = -1; + event_data.bday_remaining_days = -1; _vc_core_util_strcpy(event_data.call_num, sizeof(event_data.call_num), psat_callinfo->disp_text); vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_TO_UI, (void *)&event_data); @@ -1668,7 +1662,7 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param vcui_app_util_strcpy(new_display_data.name, sizeof(new_display_data.name), psat_call_info->disp_text); } - /* todo, Check whether contact search need to be done for the SAT modified number */ + /*todo, Check whether contact search need to be done for the SAT modified number */ /*Set the newly modified data to the CDM */ vcui_app_cdm_set_display_object(pdisplay_mgr, &new_display_data); @@ -1723,6 +1717,18 @@ static gboolean voicecall_core_cb(int event, int param1, int param2, void *param } break; + case VC_CALL_NOTI_WBAMR: + { + vc_engine_wbamr_status_type event_data; + + CALL_ENG_DEBUG(ENG_DEBUG, "Current WBAmr status %d", param1); + + memset(&event_data, 0, sizeof(event_data)); + event_data.bstatus = param1; + vcall_engine_send_event_to_client(VC_ENGINE_MSG_NOTI_WBAMR_TO_UI, (void *)&event_data); + } + break; + default: CALL_ENG_DEBUG(ENG_DEBUG, " Engine Event ID : %d not handled", event); break; @@ -1866,15 +1872,10 @@ gboolean voicecall_core_set_to_default(call_vc_core_state_t *pcall_core) _vc_core_util_set_call_status(VCONFKEY_CALL_OFF); voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_NONE, TRUE); - _vc_core_util_set_sleep_status(CALL_VC_POWER_NORMAL_STATUS); pcall_core->bt_connected = _vc_bt_get_bt_status(); if (FALSE == pcall_core->bt_connected) { -#ifdef _NEW_SND_ - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER); -#else - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_HEADSET, pcall_core->bt_connected); -#endif + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); } else { CALL_ENG_DEBUG(ENG_DEBUG, "BT connected, Not changing the sound status"); } @@ -1882,6 +1883,10 @@ gboolean voicecall_core_set_to_default(call_vc_core_state_t *pcall_core) /* sound reset */ voicecall_snd_unregister_cm(pcall_core->papp_snd); + if (vconf_set_int(VCONFKEY_FACTORY_CALL_CONNECT_STATE, VCONFKEY_FACTORY_CALL_DISCONNECTED)) { + CALL_ENG_DEBUG(ENG_ERR, "vconf_set_int failed."); + } + return TRUE; } @@ -1927,7 +1932,7 @@ int voicecall_core_init(call_vc_core_state_t *pcall_core) _vc_bt_status_init(pcall_core); _voicecall_dvc_earjack_init(pcall_core); - + voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_NONE, TRUE); return TRUE; } @@ -1938,7 +1943,7 @@ int voicecall_core_init(call_vc_core_state_t *pcall_core) * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core * @param[in] bemergency emergency call or not from dialer - * @param[in] + * @param[in] */ gboolean voicecall_core_setup_call(call_vc_core_state_t *pcall_core, gboolean bemergency) { @@ -1946,7 +1951,6 @@ gboolean voicecall_core_setup_call(call_vc_core_state_t *pcall_core, gboolean be voicecall_setup_info_t setupcall_info = { 0, }; voicecall_error_t error_code = -1; gboolean bemergency_call = FALSE; - int io_state; gboolean bmocall_exists = FALSE; gboolean bmtcall_exists = FALSE; int nw_status = 0; @@ -2097,26 +2101,14 @@ gboolean voicecall_core_setup_call(call_vc_core_state_t *pcall_core, gboolean be } -#ifdef VC_ENG_FDN_SUPPORT - /*Check FDN Status */ - if (setupcall_info.call_setup_by != VC_CALL_SETUP_BY_SAT) { - if (FALSE == voicecall_core_check_fdn_status(pcall_core)) { - voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_SETUPCALL_FAIL, TRUE); - return FALSE; - } - } -#endif - /*Check for voicemail number if it is not an emergency call */ } CALL_ENG_DEBUG(ENG_DEBUG, "MO Call Setup OVer"); -#ifdef _NEW_SND_ - if(_vc_bt_get_bt_status() == TRUE){ - voicecall_snd_set_path_status(pcall_core->papp_snd,VOICE_CALL_SND_PATH_BT); + if (_vc_bt_get_bt_status() == TRUE) { + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); } -#endif voicecall_core_make_call(pcall_core); @@ -2138,8 +2130,6 @@ gboolean voicecall_core_make_call(call_vc_core_state_t *pcall_core) CALL_ENG_DEBUG(ENG_DEBUG, ""); - _vc_core_util_set_sleep_status(CALL_VC_POWER_PROHIBIT_DIMMING); - /*Make Actual Call with Voicecall Engine */ error_code = _vc_core_engine_make_call(pcall_engine, pcall_core->call_setup_info.mo_call_index, &call_handle); if (ERROR_VOICECALL_NONE != error_code) { @@ -2166,8 +2156,6 @@ gboolean voicecall_core_make_call(call_vc_core_state_t *pcall_core) } vcall_engine_send_event_to_client(VC_ENGINE_MSG_MESSAGE_BOX_TO_UI, (void *)&event_data); - _vc_core_util_set_sleep_status(CALL_VC_POWER_GRANT_DIMMING); - return FALSE; } @@ -2186,7 +2174,7 @@ gboolean voicecall_core_make_call(call_vc_core_state_t *pcall_core) * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - * @param[in] + * @param[in] */ gboolean voicecall_core_process_sat_setup_call(vcall_engine_sat_setup_call_info_t *sat_setup_call_info) { @@ -2224,7 +2212,7 @@ gboolean voicecall_core_process_sat_setup_call(vcall_engine_sat_setup_call_info_ * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - * @param[in] + * @param[in] */ gboolean voicecall_core_process_incoming_call(call_vc_core_incoming_info_t *incoming_call_info) { @@ -2267,7 +2255,7 @@ gboolean voicecall_core_process_incoming_call(call_vc_core_incoming_info_t *inco * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core - * @param[in] + * @param[in] */ gboolean voicecall_core_answer_call(call_vc_core_state_t *pcall_core, gboolean auto_accept) { @@ -2281,6 +2269,8 @@ gboolean voicecall_core_answer_call(call_vc_core_state_t *pcall_core, gboolean a /*First Stop the Incoming alert */ voicecall_snd_stop_alert(pcall_core->papp_snd); + __voicecall_core_cancel_auto_answer(pcall_core); + _vc_core_engine_status_isexists_any_call(pcall_engine, &active_calls, &held_calls); CALL_ENG_DEBUG(ENG_DEBUG, "active_calls=%d, held_calls=%d", active_calls, held_calls); @@ -2334,6 +2324,7 @@ gboolean voicecall_core_answer_call_bytype(call_vc_core_state_t *pcall_core, voi /*First Stop the Incoming alert */ voicecall_snd_stop_alert(pcall_core->papp_snd); + __voicecall_core_cancel_auto_answer(pcall_core); error_code = _vc_core_engine_answer_call(pcall_engine, answer_type); @@ -2367,6 +2358,8 @@ gboolean voicecall_core_reject_mt(call_vc_core_state_t *pcall_core, gboolean bUD /* Stop Incmoing Call Alert */ voicecall_snd_stop_alert(papp_snd); + __voicecall_core_cancel_auto_answer(pcall_core); + CALL_ENG_DEBUG(ENG_DEBUG, "bUDUB = %d", bUDUB); error_code = _vc_core_engine_reject_call(pcall_engine, bUDUB); @@ -2459,7 +2452,7 @@ gboolean voicecall_core_end_all_held_calls(call_vc_core_state_t *pcall_core) * This function cancel outgoing call * * @return Returns TRUE -if answer is sucess, FALSE - otherwise - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_core_cancel_call(call_vc_core_state_t *pcall_core) { @@ -2555,7 +2548,7 @@ gboolean voicecall_core_cancel_call(call_vc_core_state_t *pcall_core) * This function process hold/retrive/swap conntected call * * @return Returns TRUE -if answer is sucess, FALSE - otherwise - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_core_process_hold_call(call_vc_core_state_t *pcall_core) { @@ -2579,6 +2572,7 @@ gboolean voicecall_core_process_hold_call(call_vc_core_state_t *pcall_core) CALL_ENG_DEBUG(ENG_DEBUG, "active calls: %d, held calls: %d", active_calls, held_calls); if (active_calls && held_calls) { + /*Both Calls available, swap the calls */ if (FALSE == voicecall_core_swap_calls(pcall_engine)) { return FALSE; @@ -2605,7 +2599,7 @@ gboolean voicecall_core_process_hold_call(call_vc_core_state_t *pcall_core) * This function sets up a conference call * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_core_setup_conference(call_vc_core_state_t *pcall_core) { @@ -2613,7 +2607,6 @@ gboolean voicecall_core_setup_conference(call_vc_core_state_t *pcall_core) CALL_ENG_DEBUG(ENG_DEBUG, ""); - PRINT_CURRENT_TIME("Setup Conf Start at"); return (ERROR_VOICECALL_NONE == _vc_core_engine_setup_conference(pcall_engine)) ? TRUE : FALSE; } @@ -2621,7 +2614,7 @@ gboolean voicecall_core_setup_conference(call_vc_core_state_t *pcall_core) * This function splits the call corressponding to the given call handle and makes a private call * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core * @param[in] call_handle Call to be splitted from the conference call */ gboolean voicecall_core_make_private_call(call_vc_core_state_t *pcall_core, int call_handle) @@ -2630,7 +2623,6 @@ gboolean voicecall_core_make_private_call(call_vc_core_state_t *pcall_core, int CALL_ENG_DEBUG(ENG_DEBUG, ""); - PRINT_CURRENT_TIME("Split Conf Start at"); return (ERROR_VOICECALL_NONE == _vc_core_engine_private_call(pcall_engine, call_handle)) ? TRUE : FALSE; } @@ -2638,7 +2630,7 @@ gboolean voicecall_core_make_private_call(call_vc_core_state_t *pcall_core, int * This function transfers the call from active call to the held call * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_core_transfer_calls(call_vc_core_state_t *pcall_core) { @@ -2653,7 +2645,7 @@ gboolean voicecall_core_transfer_calls(call_vc_core_state_t *pcall_core) * This function sends a dtmf string * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core * @param[in] dtmf_string dtmf string to be sent */ gboolean voicecall_core_send_dtmf(call_vc_core_state_t *pcall_core, char *dtmf_string) @@ -2667,7 +2659,7 @@ gboolean voicecall_core_send_dtmf(call_vc_core_state_t *pcall_core, char *dtmf_s } /** -* This function stops sound alert +* This function stops sound alert in case of reject with msg * * @return Returns TRUE on success or FALSE on failure * @param[in] pcall_core Handle to voicecall core @@ -2706,11 +2698,6 @@ gboolean voicecall_core_start_redial(call_vc_core_state_t *pcall_core, int manua int total_call_member = 0; CALL_ENG_DEBUG(ENG_DEBUG, ""); - - if (vconf_get_bool(VCONFKEY_CISSAPPL_VOICE_AUTO_REDIAL_BOOL, &auto_redial_status)) { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed."); - } - CALL_ENG_DEBUG(ENG_DEBUG, "auto_redial_status:[%d]", auto_redial_status); redial_count = voicecall_core_get_auto_redial_count(pcall_core); @@ -2740,8 +2727,6 @@ gboolean voicecall_core_start_redial(call_vc_core_state_t *pcall_core, int manua } else { CALL_ENG_DEBUG(ENG_DEBUG, "You dont need to redial close the MO Call Things"); - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RESET); - /* __vcui_app_view_mo_canceltimer_cb() */ _vc_core_engine_status_get_call_handle_bytype(pcall_core->pcall_engine, VC_OUTGOING_CALL, &call_handle); _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_CALL_END, call_handle, NULL); @@ -2810,7 +2795,6 @@ gboolean voicecall_core_stop_redial(call_vc_core_state_t *pcall_core) CALL_ENG_DEBUG(ENG_DEBUG, "coming inside voicecall_core_stop_redial"); - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_RESET); _vc_core_util_set_call_status(VCONFKEY_CALL_OFF); /*Cancel the Redial Timer */ @@ -2862,6 +2846,7 @@ static gboolean __voicecall_core_auto_answer_timer_cb(gpointer puser_data) return FALSE; } +#if 0 static gboolean __voicecall_core_callstatus_set_timer_cb(gpointer puser_data) { call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)puser_data; @@ -2875,6 +2860,7 @@ static gboolean __voicecall_core_callstatus_set_timer_cb(gpointer puser_data) return FALSE; } +#endif static gboolean __voicecall_core_auto_answer_idle_cb(gpointer puser_data) { @@ -2904,6 +2890,111 @@ static gboolean __voicecall_core_auto_answer_idle_cb(gpointer puser_data) } /** +* This function checks whether given answer mode is enabled or not +* +* @return returns TRUE if given answer mode type is enabled in the settings or FALSE otherwise +* +*/ +static gboolean __vc_core_is_answermode_enabled_from_testmode(void) +{ + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + int benabled = -1; + int ret = -1; + + ret = vconf_get_int(VCONFKEY_TESTMODE_AUTO_ANSWER, &benabled); + if (0 == ret) { + CALL_ENG_DEBUG(ENG_DEBUG, "benabled = %d", benabled); + if (TRUE == benabled) + return TRUE; + else + return FALSE; + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "vconf_get_int FAILED"); + return FALSE; + } +} + +/** +* This function checks whether given answer mode is enabled or not +* +* @return returns TRUE if given answer mode type is enabled in the settings or FALSE otherwise +* +*/ +static gboolean __vc_core_is_answermode_enabled(void) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "coming inside voicecall_is_answermode_enabled"); + int answer_mode_enabled = -1; + int ret = -1; + + ret = vconf_get_int(VCONFKEY_CISSAPPL_ANSWERING_MODE_INT, &answer_mode_enabled); + if (0 == ret) { + CALL_ENG_DEBUG(ENG_DEBUG, "answer_mode_enabled = %d", answer_mode_enabled); + if (2 == answer_mode_enabled) /* here 2 is auto answer mode is enabled */ + return TRUE; + else + return FALSE; + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "vconf_get_int FAILED"); + return FALSE; + } + +} + +/** +* This function processes auto answer request +* +* @return Returns void +* @param[in] pcall_core Handle to voicecall core +*/ +static void __voicecall_core_start_auto_answer(call_vc_core_state_t *pcall_core, gboolean isTestMode) +{ + gboolean earjack_connected = FALSE; + gboolean headset_connected = FALSE; + + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + + if (TRUE == isTestMode) { + CALL_ENG_DEBUG(ENG_DEBUG, "In case Of Testmode, always auto answer enabled"); + + g_idle_add(__voicecall_core_auto_answer_idle_cb, pcall_core); + return; + } + earjack_connected = _voicecall_dvc_get_earjack_connected(); + + if (TRUE == earjack_connected) { + CALL_ENG_DEBUG(ENG_DEBUG, "earjack is connected"); + } + headset_connected = _vc_bt_get_bt_status(); + + if (TRUE == headset_connected) { + CALL_ENG_DEBUG(ENG_DEBUG, "headset is connected"); + } + + if (TRUE == earjack_connected || TRUE == headset_connected) { + g_idle_add(__voicecall_core_auto_answer_idle_cb, pcall_core); + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "Without earjack or headset, skip auto answer "); + return; + } +} + +/** +* This function cancels the auto answering timer +* +* @return void +* @param[in] pcall_core Handle to voicecall core +*/ +static void __voicecall_core_cancel_auto_answer(call_vc_core_state_t *pcall_core) +{ + CALL_ENG_DEBUG(ENG_DEBUG, "coming inside __voicecall_cancel_auto_answer"); + if (pcall_core->auto_answer_timer > 0) { + g_source_remove(pcall_core->auto_answer_timer); + pcall_core->auto_answer_timer = 0; + } +} + +#if 0 +/** * This function checks BT headset and Earjack status * * @return void @@ -2917,14 +3008,11 @@ static void __voicecall_core_check_headset_earjack_status(call_vc_core_state_t * CALL_ENG_DEBUG(ENG_DEBUG, "Bt connected =%d", bt_connected); pcall_core->bt_connected = bt_connected; -#ifdef _NEW_SND_ -#else - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_HEADSET, bt_connected); -#endif CALL_ENG_DEBUG(ENG_DEBUG, "Update the earjack status"); _voicecall_dvc_get_earjack_status(pcall_core); } +#endif /** * This function parses the in call supplementary services string and returns the in call ss to be used @@ -3142,12 +3230,6 @@ gboolean voicecall_core_start_incall_ss(call_vc_core_state_t *pcall_core, call_v CALL_ENG_DEBUG(ENG_DEBUG, "Need to show a popup to the user "); vcall_engine_send_event_to_client(VC_ENGINE_MSG_MESSAGE_BOX_TO_UI, (void *)&event_data); } - /* - if ( !(vcui_app_doc_is_transfer_call_possible(papp_document) && TRUE == vcui_app_doc_transfer_calls(papp_document)) ) - { - vcui_app_msgbox(papp_document, vcui_app_rsr_load_string(IDS_CALL_POP_OPERATION_REFUSED),GTK_MESSAGE_ALERT); - } - */ break; default: CALL_ENG_DEBUG(ENG_DEBUG, "Invalid SS State"); @@ -3228,12 +3310,15 @@ gboolean voicecall_core_cancel_dtmf_queue(call_vc_core_state_t *pcall_core) } /*Remove Pauser Timer */ - g_source_remove(pdtmf_info->dtmf_pause_timer); - pdtmf_info->dtmf_pause_timer = -1; + if (pdtmf_info->dtmf_pause_timer > 0) { + g_source_remove(pdtmf_info->dtmf_pause_timer); + pdtmf_info->dtmf_pause_timer = -1; + } /*Reset the Status Flags */ pdtmf_info->bdtmf_queue = FALSE; pdtmf_info->dtmf_index = 0; + pdtmf_info->bdtmf_wait = FALSE; memset(pdtmf_info->dtmf_number, 0, sizeof(pdtmf_info->dtmf_number)); if (TRUE == pdtmf_info->bsat_dtmf) { voicecall_core_send_sat_response(pcall_core->pcall_engine, SAT_RQST_SEND_DTMF, CALL_VC_ME_UNABLE_TO_PROCESS_COMMAND); @@ -3275,7 +3360,7 @@ gboolean __voicecall_core_send_dtmf_idle_cb(gpointer pdata) voicecall_core_cancel_dtmf_queue(pcall_core); memset(&event_data, 0, sizeof(event_data)); event_data.bstatus = FALSE; - event_data.string_id = -1; + event_data.string_id = IDS_CALL_POP_DTMFSENDING_FAIL; vcall_engine_send_event_to_client(VC_ENGINE_MSG_DTMF_ACK_TO_UI, (void *)&event_data); if (TRUE == pdtmf_info->bsat_dtmf) { @@ -3314,13 +3399,6 @@ static gboolean __voicecall_core_handle_dtmf_ack(call_vc_core_state_t *pcall_cor CALL_ENG_DEBUG(ENG_DEBUG, "Current dtmf_index: %d,dtmf_max_length=%d", pdtmf_info->dtmf_index, pdtmf_info->dtmf_max_length); CALL_ENG_DEBUG(ENG_DEBUG, "Current DTMF String: %s", &pdtmf_info->dtmf_number[pdtmf_info->dtmf_index]); - /*Update the DTMF Sending UI only, if it is available */ - memset(&event_data, 0, sizeof(event_data)); - event_data.bstatus = TRUE; - event_data.string_id = IDS_CALL_POP_SENDING; - snprintf(event_data.display_string, sizeof(event_data.display_string), &pdtmf_info->dtmf_number[pdtmf_info->dtmf_index]); - vcall_engine_send_event_to_client(VC_ENGINE_MSG_DTMF_ACK_TO_UI, (void *)&event_data); - /*Find the End of the queue */ if (pdtmf_info->dtmf_index >= pdtmf_info->dtmf_max_length) { @@ -3328,8 +3406,8 @@ static gboolean __voicecall_core_handle_dtmf_ack(call_vc_core_state_t *pcall_cor if (!((TRUE == pdtmf_info->bsat_dtmf) && (TRUE == pdtmf_info->bsat_hidden))) { memset(&event_data, 0, sizeof(event_data)); - event_data.bstatus = FALSE; - event_data.string_id = IDS_CALL_POP_DTMF_SENT; + event_data.bstatus = FALSE; /*check it*/ + event_data.string_id = IDS_CALL_POP_DTMF_SENT; /*check it*/ vcall_engine_send_event_to_client(VC_ENGINE_MSG_DTMF_ACK_TO_UI, (void *)&event_data); } @@ -3337,7 +3415,15 @@ static gboolean __voicecall_core_handle_dtmf_ack(call_vc_core_state_t *pcall_cor voicecall_core_send_sat_response(pcall_core->pcall_engine, SAT_RQST_SEND_DTMF, CALL_VC_ME_RET_SUCCESS); } } else { - if (0 == strcasecmp(dtmf_string, "p")) { + if (0 == strcasecmp(dtmf_string, "p") || 0 == strcmp(dtmf_string, ",")) { + CALL_ENG_DEBUG(ENG_DEBUG, "Pause on the dtmf string"); + + memset(&event_data, 0, sizeof(event_data)); + event_data.bstatus = TRUE; + event_data.string_id = IDS_CALL_POP_SENDING; + snprintf(event_data.display_string, sizeof(event_data.display_string), "%s", &pdtmf_info->dtmf_number[pdtmf_info->dtmf_index]); + vcall_engine_send_event_to_client(VC_ENGINE_MSG_DTMF_ACK_TO_UI, (void *)&event_data); + int dtmf_interval = 0; if (FALSE == _vc_core_util_check_gcf_status()) { @@ -3365,9 +3451,16 @@ static gboolean __voicecall_core_handle_dtmf_ack(call_vc_core_state_t *pcall_cor #else dtmf_interval = (pdtmf_info->dtmf_index == 0) ? DTMF_PAUSE_TIMER_INTERVAL_GCF_FIRST : DTMF_PAUSE_TIMER_INTERVAL_GCF_REST; #endif - CALL_ENG_DEBUG(ENG_DEBUG, "dtmf_interval:%d", dtmf_interval); } + CALL_ENG_DEBUG(ENG_DEBUG, "dtmf_interval:%d", dtmf_interval); pdtmf_info->dtmf_pause_timer = g_timeout_add(dtmf_interval, __voicecall_core_dtmf_pause_timer_cb, pcall_core); + } else if (0 == strcasecmp(dtmf_string, "w") || 0 == strcmp(dtmf_string, ";")) { + CALL_ENG_DEBUG(ENG_DEBUG, "Wait on the dtmf string"); + memset(&event_data, 0, sizeof(event_data)); + event_data.bstatus = TRUE; + event_data.string_id = IDS_CALL_POP_UNAVAILABLE; /*assign ID when string is added*/ + snprintf(event_data.display_string, sizeof(event_data.display_string), "%s", &pdtmf_info->dtmf_number[pdtmf_info->dtmf_index]); + vcall_engine_send_event_to_client(VC_ENGINE_MSG_DTMF_ACK_TO_UI, (void *)&event_data); } else { g_idle_add_full(G_PRIORITY_HIGH_IDLE + 25, __voicecall_core_send_dtmf_idle_cb, pcall_core, NULL); } @@ -3431,22 +3524,17 @@ static gboolean __voicecall_core_queue_dtmf_string(call_vc_core_state_t *pcall_c pdtmf_info->bsat_hidden = bhidden_mode; } - /* Check: It takes only 40 characters from the source, rest of the characters are ignored */ + /*It takes only 40 characters from the source, rest of the characters are ignored*/ memset(pdtmf_info->dtmf_number, 0, sizeof(pdtmf_info->dtmf_number)); - if (1 < sizeof(pdtmf_info->dtmf_number)) - _vc_core_util_strcpy(pdtmf_info->dtmf_number, VC_PHONE_NUMBER_LENGTH_MAX, "P"); - - strncat(pdtmf_info->dtmf_number, dtmf_string, min((sizeof(pdtmf_info->dtmf_number) - 2), strlen(dtmf_string))); - + strncpy(pdtmf_info->dtmf_number, dtmf_string, min((sizeof(pdtmf_info->dtmf_number) - 1), strlen(dtmf_string))); pdtmf_info->dtmf_max_length = strlen(pdtmf_info->dtmf_number); - CALL_ENG_DEBUG(ENG_DEBUG, "Dtmf Number:%s ,dtmf_max_length:%d", pdtmf_info->dtmf_number, pdtmf_info->dtmf_max_length); dtmf_digit[0] = pdtmf_info->dtmf_number[pdtmf_info->dtmf_index]; dtmf_digit[1] = '\0'; /*Send DTMF */ - if (0 == strcasecmp(dtmf_digit, "p")) { + if (0 == strcasecmp(dtmf_digit, "p") || 0 == strcmp(dtmf_digit, ",")) { int dtmf_interval = 0; if (FALSE == _vc_core_util_check_gcf_status()) { @@ -3478,6 +3566,9 @@ static gboolean __voicecall_core_queue_dtmf_string(call_vc_core_state_t *pcall_c CALL_ENG_DEBUG(ENG_DEBUG, "updated dtmf_interval:%d", dtmf_interval); } pdtmf_info->dtmf_pause_timer = g_timeout_add(dtmf_interval, __voicecall_core_dtmf_pause_timer_cb, pcall_core); + } else if (0 == strcasecmp(dtmf_digit, "w") || 0 == strcmp(dtmf_digit, ";")) { + /* enable wait flag for dtmf sending */ + pdtmf_info->bdtmf_wait = TRUE; } else if ((ERROR_VOICECALL_NONE != _vc_core_engine_send_dtmf(pcall_core->pcall_engine, dtmf_digit))) { if (!((TRUE == pdtmf_info->bsat_dtmf) && (TRUE == pdtmf_info->bsat_hidden))) { memset(&event_data, 0, sizeof(event_data)); @@ -3496,7 +3587,12 @@ static gboolean __voicecall_core_queue_dtmf_string(call_vc_core_state_t *pcall_c if (!((TRUE == pdtmf_info->bsat_dtmf) && (TRUE == pdtmf_info->bsat_hidden))) { memset(&event_data, 0, sizeof(event_data)); event_data.bstatus = TRUE; - event_data.string_id = IDS_CALL_POP_SENDING; + CALL_ENG_DEBUG(ENG_DEBUG, "pdtmf_info->bdtmf_wait [%d]", pdtmf_info->bdtmf_wait); + if (pdtmf_info->bdtmf_wait) { + event_data.string_id = IDS_CALL_POP_UNAVAILABLE; + } else { + event_data.string_id = IDS_CALL_POP_SENDING; + } _vc_core_util_strcpy(event_data.display_string, VC_PHONE_NUMBER_LENGTH_MAX, pdtmf_info->dtmf_number); vcall_engine_send_event_to_client(VC_ENGINE_MSG_DTMF_ACK_TO_UI, (void *)&event_data); } else { @@ -3523,33 +3619,18 @@ gboolean voicecall_core_change_sound_path(call_vc_core_state_t *pcall_core, voic switch (sound_path) { case VOICE_CALL_AUDIO_SPEAKER: { -#ifdef _NEW_SND_ if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_BT) { /*_vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_PHONE, -1, NULL);*/ _vc_bt_request_switch_headset_path(pcall_core, FALSE); } - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_SPEAKER); -#else - if (TRUE == voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_HEADSET)) { - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_HEADSET, FALSE); - /*_vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_PHONE, -1, NULL);*/ - _vc_bt_request_switch_headset_path(pcall_core, FALSE); - } - - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER, TRUE); -#endif + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_SPEAKER); ret = TRUE; } break; case VOICE_CALL_AUDIO_HEADSET: { -#ifdef _NEW_SND_ - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); -#else - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER, FALSE); - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_HEADSET, TRUE); -#endif + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); /* _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_HEADSET, -1, NULL);*/ _vc_bt_request_switch_headset_path(pcall_core, TRUE); @@ -3557,23 +3638,13 @@ gboolean voicecall_core_change_sound_path(call_vc_core_state_t *pcall_core, voic } break; - case VOICE_CALL_AUDIO_EARJACK: + case VOICE_CALL_AUDIO_RECEIVER_EARJACK: { -#ifdef _NEW_SND_ if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_BT) { /*_vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_PHONE, -1, NULL);*/ _vc_bt_request_switch_headset_path(pcall_core, FALSE); } - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_EARJACK); -#else - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER, FALSE); - - if (TRUE == voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_HEADSET)) { - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_HEADSET, FALSE); - /*_vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_PHONE, -1, NULL);*/ - _vc_bt_request_switch_headset_path(pcall_core, FALSE); - } -#endif + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); ret = TRUE; } break; @@ -3598,81 +3669,76 @@ gboolean voicecall_core_get_sound_path(call_vc_core_state_t *pcall_core, int *so CALL_ENG_DEBUG(ENG_DEBUG, ".."); -#ifdef _NEW_SND_ - switch (voicecall_snd_get_path_status(papp_snd)) - { - case VOICE_CALL_SND_PATH_SPEAKER: - { - *sound_path = VOICE_CALL_AUDIO_SPEAKER; - } - break; - - case VOICE_CALL_SND_PATH_BT: - { - *sound_path = VOICE_CALL_AUDIO_HEADSET; - } - break; - - case VOICE_CALL_SND_PATH_EARJACK: - { - *sound_path = VOICE_CALL_AUDIO_EARJACK; - } - break; + switch (voicecall_snd_get_path_status(papp_snd)) { + case VOICE_CALL_SND_PATH_SPEAKER: + { + *sound_path = VOICE_CALL_AUDIO_SPEAKER; + } + break; - case VOICE_CALL_SND_PATH_RECEIVER: - default: - { - *sound_path = VOICE_CALL_AUDIO_RECEIVER; - } - break; + case VOICE_CALL_SND_PATH_BT: + { + *sound_path = VOICE_CALL_AUDIO_HEADSET; + } + break; + case VOICE_CALL_SND_PATH_RECEIVER_EARJACK: + default: + { + *sound_path = VOICE_CALL_AUDIO_RECEIVER_EARJACK; + } + break; } -#else - if (TRUE == voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER)) { - *sound_path = VOICE_CALL_AUDIO_SPEAKER; - } else if (TRUE == voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_HEADSET)) { - *sound_path = VOICE_CALL_AUDIO_HEADSET; - } else { - *sound_path = VOICE_CALL_AUDIO_EARJACK; - } -#endif return TRUE; } static gboolean __voicecall_core_is_redial_cuase(int end_cause) { - CALL_ENG_DEBUG(ENG_DEBUG, "end_cause(%d)",end_cause); - - switch (end_cause) - { - case VC_ENDCAUSE_CALL_BARRED: - case VC_ENDCAUSE_NO_SERVICE: - case VC_ENDCAUSE_USER_UNAVAILABLE: - case VC_ENDCAUSE_INVALID_NUMBER_FORMAT: - case VC_ENDCAUSE_NUMBER_CHANGED: - case VC_ENDCAUSE_NO_CREDIT: - case VC_ENDCAUSE_UNASSIGNED_NUMBER: - return FALSE; + CALL_ENG_DEBUG(ENG_DEBUG, "end_cause(%d)", end_cause); - case VC_ENDCAUSE_CALL_ENDED: - case VC_ENDCAUSE_CALL_DISCONNECTED: - case VC_ENDCAUSE_NO_ANSWER: - case VC_ENDCAUSE_NW_BUSY: - case VC_ENDCAUSE_CALL_SERVICE_NOT_ALLOWED: - case VC_ENDCAUSE_NW_FAILED: - case VC_ENDCAUSE_REJECTED: - case VC_ENDCAUSE_USER_BUSY: - case VC_ENDCAUSE_WRONG_GROUP: - case VC_ENDCAUSE_CALL_NOT_ALLOWED: - case VC_ENDCAUSE_CALL_FAILED: - case VC_ENDCAUSE_NO_USER_RESPONDING: - case VC_ENDCAUSE_USER_ALERTING_NO_ANSWER: - case VC_ENDCAUSE_SERVICE_TEMP_UNAVAILABLE: - case VC_ENDCAUSE_USER_DOESNOT_RESPOND: - case VC_ENDCAUSE_IMEI_REJECTED: - case VC_ENDCAUSE_TAPI_ERROR: - default: - return TRUE; + switch (end_cause) { + case VC_ENDCAUSE_CALL_BARRED: + case VC_ENDCAUSE_NO_SERVICE: + case VC_ENDCAUSE_USER_UNAVAILABLE: + case VC_ENDCAUSE_INVALID_NUMBER_FORMAT: + case VC_ENDCAUSE_NUMBER_CHANGED: + case VC_ENDCAUSE_NO_CREDIT: + case VC_ENDCAUSE_UNASSIGNED_NUMBER: + return FALSE; + + case VC_ENDCAUSE_CALL_ENDED: + case VC_ENDCAUSE_CALL_DISCONNECTED: + case VC_ENDCAUSE_NO_ANSWER: + case VC_ENDCAUSE_NW_BUSY: + case VC_ENDCAUSE_CALL_SERVICE_NOT_ALLOWED: + case VC_ENDCAUSE_NW_FAILED: + case VC_ENDCAUSE_REJECTED: + case VC_ENDCAUSE_USER_BUSY: + case VC_ENDCAUSE_WRONG_GROUP: + case VC_ENDCAUSE_CALL_NOT_ALLOWED: + case VC_ENDCAUSE_CALL_FAILED: + case VC_ENDCAUSE_NO_USER_RESPONDING: + case VC_ENDCAUSE_USER_ALERTING_NO_ANSWER: + case VC_ENDCAUSE_SERVICE_TEMP_UNAVAILABLE: + case VC_ENDCAUSE_USER_DOESNOT_RESPOND: + case VC_ENDCAUSE_IMEI_REJECTED: + case VC_ENDCAUSE_TAPI_ERROR: + default: + return TRUE; } } + +/** + * This function processed the supplementary services while on call + * + * @return Returns TRUE If transfer call can be made or FALSE if not + * @param[in] pcall_core Handle to voicecall core + */ +void voicecall_core_process_dtmf_send_status(call_vc_core_state_t *pcall_core, gboolean bsuccess) +{ + CALL_ENG_DEBUG(ENG_DEBUG, " .."); + VOICECALL_RETURN_IF_FAIL(pcall_core); + __voicecall_core_handle_dtmf_ack(pcall_core, bsuccess); +} + diff --git a/call-engine/voice-call-dbus.c b/call-engine/voice-call-dbus.c index 11b29a4..2e87463 100755 --- a/call-engine/voice-call-dbus.c +++ b/call-engine/voice-call-dbus.c @@ -26,19 +26,19 @@ #include /* Voice Call <-- BT */ -#define DBUS_BT_MATCH_RULE "type='signal',path='/org/projectx/bluetooth_event',interface='User.Bluetooth.AG'" -#define DBUS_BT_OBJECT_REQUEST "/org/projectx/bluetooth_event" +#define DBUS_BT_MATCH_RULE "type='signal',path='/org/projectx/bluetooth_event',interface='User.Bluetooth.AG'" +#define DBUS_BT_OBJECT_REQUEST "/org/projectx/bluetooth_event" #define DBUS_BT_INTERFACE_REQUEST "User.Bluetooth.AG" -#define DBUS_BT_METHOD_REQUEST "Request" +#define DBUS_BT_METHOD_REQUEST "Request" /* Voice Call --> BT */ #define DBUS_BT_SERVICE "org.projectx.bluetooth" -#define DBUS_BT_OBJECT_RESPONSE "/org/projectx/btcall_event" -#define DBUS_BT_INTERFACE_RESPONSE "User.Bluetooth.AG" +#define DBUS_BT_OBJECT_RESPONSE "/org/projectx/btcall_event" +#define DBUS_BT_INTERFACE_RESPONSE "User.Bluetooth.AG" #define DBUS_BT_METHOD_RESPONSE "Response" -//#define DBUS_BT_METHOD_CONNECT "Connect" +/*#define DBUS_BT_METHOD_CONNECT "Connect"*/ -#define BT_PKG "org.tizen.bluetooth" +#define BT_PKG "org.tizen.bluetooth" static DBusGConnection *gconnection = NULL; @@ -49,7 +49,7 @@ typedef struct _dbus_dest_t { char *method; } dbus_dest_t; -static int vc_engine_send_via_dbus(DBusGConnection * conn, dbus_dest_t * dest, int first_arg_type, ...) +static int vc_engine_send_via_dbus(DBusGConnection *conn, dbus_dest_t *dest, int first_arg_type, ...) { DBusMessage *msg; DBusMessageIter iter; @@ -60,10 +60,10 @@ static int vc_engine_send_via_dbus(DBusGConnection * conn, dbus_dest_t * dest, i dbus_int32_t val_int; char *val_str; - CALL_ENG_DEBUG(ENG_DEBUG, "path:%s, interface:%s, method:%s \n", dest->object_path, dest->interface, dest->method); + CALL_ENG_DEBUG(ENG_DEBUG, "path:%s, interface:%s, method:%s", dest->object_path, dest->interface, dest->method); msg = dbus_message_new_signal(dest->object_path, dest->interface, dest->method); if (msg == NULL) { - CALL_ENG_DEBUG(ENG_DEBUG, "dbus_message_new_signal failed.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "dbus_message_new_signal failed."); return VC_ERROR; } dbus_message_set_destination(msg, dest->service); @@ -117,18 +117,15 @@ void vc_engine_on_dbus_send_response_to_bt(connectivity_bt_ag_param_info_t bt_re DBUS_BT_INTERFACE_RESPONSE, DBUS_BT_METHOD_RESPONSE }; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); - - vc_engine_send_via_dbus(gconnection, &bt_dbus_dest, - DBUS_TYPE_INT32, &bt_resp_info.param1, - DBUS_TYPE_INT32, &bt_resp_info.param2, - DBUS_TYPE_INT32, &bt_resp_info.param3, - DBUS_TYPE_STRING, bt_resp_info.param4, - DBUS_TYPE_INVALID); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + + vc_engine_send_via_dbus(gconnection, &bt_dbus_dest, DBUS_TYPE_INT32, &bt_resp_info.param1, \ + DBUS_TYPE_INT32, &bt_resp_info.param2, DBUS_TYPE_INT32, &bt_resp_info.param3, DBUS_TYPE_STRING, bt_resp_info.param4, \ + DBUS_TYPE_INVALID); } /* Handle all bluetooth relative signal */ -static void vc_engine_on_dbus_parsing_bt(void *user_data, DBusMessage * message) +static void vc_engine_on_dbus_parsing_bt(void *user_data, DBusMessage *message) { DBusMessageIter iter; connectivity_bt_ag_param_info_t bt_event_info = { 0, }; @@ -146,14 +143,14 @@ static void vc_engine_on_dbus_parsing_bt(void *user_data, DBusMessage * message) if (dbus_message_iter_next(&iter)) dbus_message_iter_get_basic(&iter, &bt_event_info.param4); - CALL_ENG_DEBUG(ENG_DEBUG,"param1:[%d], param2[%d], param3[%d], param4[%s] \n", + CALL_ENG_DEBUG(ENG_DEBUG, "param1:[%d], param2[%d], param3[%d], param4[%s]", bt_event_info.param1, bt_event_info.param2, bt_event_info.param3, bt_event_info.param4); _vc_bt_handle_bt_events(pcall_core, &bt_event_info); } /* Handle all dbus signal */ -static DBusHandlerResult vc_engine_on_dbus_receive(DBusConnection * connection, DBusMessage * message, void *user_data) +static DBusHandlerResult vc_engine_on_dbus_receive(DBusConnection *connection, DBusMessage *message, void *user_data) { int type; @@ -163,12 +160,12 @@ static DBusHandlerResult vc_engine_on_dbus_receive(DBusConnection * connection, type = dbus_message_get_type(message); if (type != DBUS_MESSAGE_TYPE_SIGNAL) { - /* + /* * INVALID: 0 * METHOD_CALL: 1 * METHOD_CALL_RETURN: 2 * ERROR: 3 - * SIGNAL: 4 + * SIGNAL: 4 */ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } @@ -185,9 +182,9 @@ static DBusHandlerResult vc_engine_on_dbus_receive(DBusConnection * connection, /* Check BT Signal */ if ((strcmp(object_path, DBUS_BT_OBJECT_REQUEST) == 0) && (strcmp(interface_name, DBUS_BT_INTERFACE_REQUEST) == 0)) { - CALL_ENG_DEBUG(ENG_DEBUG, "received DBus BT signal!\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "received DBus BT signal!"); if (strcmp(method_name, DBUS_BT_METHOD_REQUEST) == 0) { - CALL_ENG_DEBUG(ENG_DEBUG, "BT Method :[Request] \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "BT Method :[Request]"); vc_engine_on_dbus_parsing_bt(user_data, message); return DBUS_HANDLER_RESULT_HANDLED; } @@ -202,26 +199,25 @@ int vc_engine_dbus_receiver_setup() DBusError derror; int ret; - // connectio to dbus-daemon. + /*connectio to dbus-daemon.*/ gconnection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error); if (!gconnection) { - printf("Could not get connection: %s\n", error->message); + CALL_ENG_DEBUG(ENG_ERR,"Could not get connection: %s", error->message); return FALSE; } - + dbus_error_init(&derror); dbus_bus_add_match(dbus_g_connection_get_connection(gconnection), DBUS_BT_MATCH_RULE, &derror); - if (dbus_error_is_set(&derror)) // failure - { - CALL_ENG_DEBUG(ENG_DEBUG, "Failed to dbus_bus_add_match(%s): %s\n", DBUS_BT_MATCH_RULE, derror.message); + if (dbus_error_is_set(&derror)) { /*failure*/ + CALL_ENG_DEBUG(ENG_ERR, "Failed to dbus_bus_add_match(%s): %s", DBUS_BT_MATCH_RULE, derror.message); dbus_error_free(&derror); return FALSE; } - // register event filter to handle received dbus-message. + /*register event filter to handle received dbus-message.*/ ret = dbus_connection_add_filter(dbus_g_connection_get_connection(gconnection), vc_engine_on_dbus_receive, NULL, NULL); if (ret != TRUE) { - CALL_ENG_DEBUG(ENG_DEBUG, "Failed to dbus_connection_add_filter"); + CALL_ENG_DEBUG(ENG_ERR, "Failed to dbus_connection_add_filter"); return FALSE; } diff --git a/call-engine/voice-call-device.c b/call-engine/voice-call-device.c index 76d4344..46e08e9 100755 --- a/call-engine/voice-call-device.c +++ b/call-engine/voice-call-device.c @@ -30,11 +30,6 @@ #include #include -static int g_proximity_sensor_handle = -1; -static int g_proximity_sensor_state = -1; - -static gboolean __voicecall_dvc_proximity_sensor_is_request(unsigned int type, sensor_event_data_t *event, void *data); -static void __voicecall_dvc_proximity_sensor_callback_func(unsigned int type, sensor_event_data_t *event, void *data); static gboolean __voicecall_dvc_earjack_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core); static gboolean __voicecall_dvc_earjackkey_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core); @@ -42,57 +37,48 @@ static gboolean __voicecall_dvc_earjackkey_status_cb(keynode_t *node, call_vc_co * This function handles earjack event * * @return Returns TRUE on success or FALSE on failure - * @param[in] node vconf node - * @param[in] pcall_core Handle to voicecall core + * @param[in] node vconf node + * @param[in] pcall_core Handle to voicecall core */ static gboolean __voicecall_dvc_earjack_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core) { - gboolean bRecieverPath = FALSE; int earjack_status; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); earjack_status = vconf_keynode_get_int(node); - CALL_ENG_DEBUG(ENG_DEBUG, "Earjack Status: %d \n", earjack_status); + CALL_ENG_DEBUG(ENG_DEBUG, "Earjack Status: %d", earjack_status); vc_engine_headset_status_type event_data; /*Change path only if outgoing call or connected call exists */ -#ifdef _NEW_SND_ - if ((TRUE == voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine)) + if ((TRUE == voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine)) || (TRUE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine))) { - if (earjack_status == TRUE) { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_EARJACK); + if (earjack_status != FALSE) { + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); voicecall_snd_change_path(pcall_core->papp_snd); memset(&event_data, 0, sizeof(event_data)); event_data.bstatus = earjack_status; - vcall_engine_send_event_to_client(VC_ENGINE_MSG_EARJACK_STATUS_TO_UI, (void *)&event_data); + vcall_engine_send_event_to_client(VC_ENGINE_MSG_EARJACK_STATUS_TO_UI, (void *)&event_data); } else { - if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_EARJACK) { + if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_RECEIVER_EARJACK) { if (_vc_bt_is_bt_connected(pcall_core) == TRUE) { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); /*_vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_HEADSET, -1, NULL);*/ _vc_bt_request_switch_headset_path(pcall_core, TRUE); } else { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER); + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); voicecall_snd_change_path(pcall_core->papp_snd); } memset(&event_data, 0, sizeof(event_data)); event_data.bstatus = earjack_status; - vcall_engine_send_event_to_client(VC_ENGINE_MSG_EARJACK_STATUS_TO_UI, (void *)&event_data); + vcall_engine_send_event_to_client(VC_ENGINE_MSG_EARJACK_STATUS_TO_UI, (void *)&event_data); } else { CALL_ENG_DEBUG(ENG_DEBUG, "No path change"); } } } -#else - if ((TRUE == voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine)) || (TRUE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine))) { - memset(&event_data, 0, sizeof(event_data)); - event_data.bstatus = earjack_status; - vcall_engine_send_event_to_client(VC_ENGINE_MSG_EARJACK_STATUS_TO_UI, (void *)&event_data); - } -#endif return TRUE; } @@ -100,26 +86,24 @@ static gboolean __voicecall_dvc_earjack_status_cb(keynode_t *node, call_vc_core_ * This function handles earjack key event * * @return Returns TRUE on success or FALSE on failure - * @param[in] node vconf node - * @param[in] pcall_core Handle to voicecall core + * @param[in] node vconf node + * @param[in] pcall_core Handle to voicecall core */ static gboolean __voicecall_dvc_earjackkey_status_cb(keynode_t *node, call_vc_core_state_t *pcall_core) { int key_value; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); key_value = vconf_keynode_get_int(node); - CALL_ENG_DEBUG(ENG_DEBUG, "key_value: %d \n", key_value); + CALL_ENG_DEBUG(ENG_DEBUG, "key_value: %d", key_value); if (key_value > 0) { if (voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { voicecall_core_end_all_calls(pcall_core); } else if (voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine)) { -#ifdef _NEW_SND_ - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_EARJACK); -#endif + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); voicecall_core_answer_call(pcall_core, FALSE); } else if (voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine)) { voicecall_core_cancel_call(pcall_core); @@ -133,28 +117,10 @@ static gboolean __voicecall_dvc_earjackkey_status_cb(keynode_t *node, call_vc_co * This function initialize earjack event. * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean _voicecall_dvc_earjack_init(call_vc_core_state_t *pcall_core) { -#ifdef _NEW_SND_ -#else - int earjack_status = -1; - if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack_status)) { - CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]\n", earjack_status); - if (earjack_status == VCONFKEY_SYSMAN_EARJACK_REMOVED) { - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_EARJACK, FALSE); - CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_EARJACK = FALSE **********\n"); - } else { - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_EARJACK, TRUE); - CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_EARJACK = TRUE **********\n"); - } - } else { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..\n"); - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_EARJACK, FALSE); - } -#endif - vconf_notify_key_changed(VCONFKEY_SYSMAN_EARJACK, (void *)__voicecall_dvc_earjack_status_cb, pcall_core); vconf_notify_key_changed(VCONFKEY_SYSMAN_EARJACKKEY, (void *)__voicecall_dvc_earjackkey_status_cb, pcall_core); return TRUE; @@ -164,17 +130,17 @@ void _voicecall_dvc_get_earjack_status(call_vc_core_state_t *pcall_core) { int earjack_status = -1; if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack_status)) { - CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]\n", earjack_status); + CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]", earjack_status); if (earjack_status == VCONFKEY_SYSMAN_EARJACK_REMOVED) { - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_EARJACK, FALSE); - CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_EARJACK = FALSE **********\n"); + voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_RECEIVER_EARJACK, FALSE); + CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_RECEIVER_EARJACK = FALSE **********"); } else { - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_EARJACK, TRUE); - CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_EARJACK = TRUE **********\n"); + voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_RECEIVER_EARJACK, TRUE); + CALL_ENG_DEBUG(ENG_DEBUG, "*****************VOICE_CALL_AUDIO_RECEIVER_EARJACK = TRUE **********"); } } else { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..\n"); - voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_EARJACK, FALSE); + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed.."); + voicecall_snd_set_status(pcall_core->papp_snd, VOICE_CALL_AUDIO_RECEIVER_EARJACK, FALSE); } } @@ -182,21 +148,21 @@ gboolean _voicecall_dvc_get_earjack_connected() { int earjack_status = -1; if (!vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack_status)) { - CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]\n", earjack_status); + CALL_ENG_DEBUG(ENG_DEBUG, "earjack_status:[%d]", earjack_status); if (earjack_status == VCONFKEY_SYSMAN_EARJACK_REMOVED) { return FALSE; } else { return TRUE; } } else { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed..\n"); + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_int failed.."); return FALSE; } } void _voicecall_dvc_control_lcd_state(voicecall_lcd_control_t state) { - CALL_ENG_DEBUG(ENG_DEBUG,"[%d]", state); + CALL_ENG_DEBUG(ENG_DEBUG, "[%d]", state); switch (state) { case VC_LCD_OFF: pm_change_state(LCD_OFF); @@ -218,165 +184,4 @@ void _voicecall_dvc_control_lcd_state(voicecall_lcd_control_t state) break; } } - -gboolean _voicecall_dvc_proximity_sensor_init(void *data) -{ - CALL_ENG_DEBUG(ENG_DEBUG, ".."); - int ret = -1; - int handle = -1; -#ifdef _POLLING_PROXIMITY_SENSOR_ - event_condition_t my_cond; -#endif - call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)data; - sensor_data_t cur_sensor_data; - - if (g_proximity_sensor_handle >= 0) { - CALL_ENG_DEBUG(ENG_WARN, "already initialized"); - return FALSE; - } - - handle = sf_connect(PROXIMITY_SENSOR); - if (handle < 0) { - CALL_ENG_DEBUG(ENG_ERR, "sf_connect failed"); - return FALSE; - } - -#ifdef _POLLING_PROXIMITY_SENSOR_ - my_cond.cond_op = CONDITION_EQUAL; - my_cond.cond_value1 = 200; - ret = sf_register_event(handle, PROXIMITY_EVENT_CHANGE_STATE, &my_cond, __voicecall_dvc_proximity_sensor_callback_func, pcall_core); -#else - ret = sf_register_event(handle, PROXIMITY_EVENT_CHANGE_STATE, NULL, __voicecall_dvc_proximity_sensor_callback_func, pcall_core); -#endif - if (ret < 0) { - CALL_ENG_DEBUG(ENG_ERR, "sf_register_event failed"); - return FALSE; - } - - ret = sf_start(handle, 0); - if (ret < 0) { - CALL_ENG_DEBUG(ENG_ERR, "sensor_start fail"); - return FALSE; - } - - ret = sf_get_data(handle, PROXIMITY_BASE_DATA_SET, &cur_sensor_data); - if (ret < 0) { - CALL_ENG_DEBUG(ENG_ERR, "sf_get_data fail"); - return FALSE; - } - - CALL_ENG_DEBUG(ENG_DEBUG, "proximity_state:[%d]\n", cur_sensor_data.values[0]); - if (cur_sensor_data.values[0] == PROXIMITY_STATE_NEAR) { - if (__voicecall_dvc_proximity_sensor_is_required(pcall_core)) { - CALL_ENG_DEBUG(ENG_DEBUG, "PROXIMITY_STATE_NEAR"); - g_proximity_sensor_state = VCALL_SENSOR_NEAR; - _voicecall_dvc_control_lcd_state(VC_LCD_OFF); - } - } - - g_proximity_sensor_handle = handle; - CALL_ENG_DEBUG(ENG_DEBUG, "_voicecall_dvc_proximity_sensor_init done"); -} - -gboolean __voicecall_dvc_proximity_sensor_is_required(call_vc_core_state_t *pcall_core) -{ - voicecall_engine_t *pcall_engine = NULL; - CALL_ENG_DEBUG(ENG_DEBUG, ""); - - if (pcall_core == NULL) { - CALL_ENG_DEBUG(ENG_ERR, "Wrong pointer for pcall_core"); - return FALSE; - } - - pcall_engine = pcall_core->pcall_engine; - if (pcall_engine == NULL) { - CALL_ENG_DEBUG(ENG_ERR, "Wrong pointer for pcall_engine"); - return FALSE; - } - if (_vc_core_cm_isexists_incoming_call(&(pcall_engine->call_manager)) == TRUE) { - CALL_ENG_DEBUG(ENG_DEBUG, "we'll not excute sensor in case of incoming call"); - return FALSE; - } - - if ((_vc_core_cm_isexists_connected_call(&(pcall_engine->call_manager)) == FALSE) && - (_vc_core_cm_isexits_outgoing_call(&(pcall_engine->call_manager)) == FALSE)) { - CALL_ENG_DEBUG(ENG_DEBUG, "we'll not excute sensor in case of NO call"); - return FALSE; - } - - if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_SPEAKER) { - CALL_ENG_DEBUG(ENG_DEBUG, "we'll not excute sensor in case of speaker mode"); - return FALSE; - } - - return TRUE; -} - -gboolean _voicecall_dvc_proximity_sensor_deinit(void) -{ - CALL_ENG_DEBUG(ENG_DEBUG, ".."); - int ret = -1; - - if (g_proximity_sensor_handle < 0) { - CALL_ENG_DEBUG(ENG_WARN, "not initialized."); - return FALSE; - } - - ret = sf_unregister_event(g_proximity_sensor_handle, PROXIMITY_EVENT_CHANGE_STATE); - if (ret < 0) { - CALL_ENG_DEBUG(ENG_ERR, "sf_unregister_event failed"); - } - ret = sf_stop(g_proximity_sensor_handle); - if (ret < 0) { - CALL_ENG_DEBUG(ENG_ERR, "sf_stop failed"); - } - ret = sf_disconnect(g_proximity_sensor_handle); - if (ret < 0) { - CALL_ENG_DEBUG(ENG_ERR, "sf_disconnect failed"); - } - - g_proximity_sensor_handle = -1; - return TRUE; -} - -static void __voicecall_dvc_proximity_sensor_callback_func(unsigned int type, sensor_event_data_t *event, void *data) -{ - int *proxi_state; - call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)data; - voicecall_engine_t *pcall_engine = NULL; - CALL_ENG_DEBUG(ENG_DEBUG, ""); - - if (__voicecall_dvc_proximity_sensor_is_required(pcall_core) == FALSE) { - CALL_ENG_DEBUG(ENG_DEBUG, "Proximity sensor update is not required"); - return; - } - - if (type != PROXIMITY_EVENT_CHANGE_STATE) { - return; - } - - proxi_state = (int *)(event->event_data); - switch (*proxi_state) { - case PROXIMITY_STATE_FAR: - CALL_ENG_DEBUG(ENG_DEBUG, "PROXIMITY_STATE_FAR"); - g_proximity_sensor_state = VCALL_SENSOR_FAR; - _voicecall_dvc_control_lcd_state(VC_LCD_ON); - break; - case PROXIMITY_STATE_NEAR: - CALL_ENG_DEBUG(ENG_DEBUG, "PROXIMITY_STATE_NEAR"); - g_proximity_sensor_state = VCALL_SENSOR_NEAR; - _voicecall_dvc_control_lcd_state(VC_LCD_OFF); - break; - default: - CALL_ENG_DEBUG(ENG_DEBUG, "wrong data"); - break; - } -} - -int _voicecall_dvc_get_proximity_sensor_state(void) -{ - CALL_ENG_DEBUG(ENG_DEBUG, "g_proximity_sensor_state(%d)", g_proximity_sensor_state); - - return g_proximity_sensor_state; -} diff --git a/call-engine/voice-call-engine.c b/call-engine/voice-call-engine.c index a9b5377..8339e24 100755 --- a/call-engine/voice-call-engine.c +++ b/call-engine/voice-call-engine.c @@ -16,11 +16,14 @@ #include "voice-call-engine.h" -#include "vc-core-util.h" #include "voice-call-core.h" -#include "vc-core-engine-types.h" #include "voice-call-service.h" #include "voice-call-dbus.h" +#include "voice-call-device.h" +#include "vc-core-util.h" +#include "vc-core-engine-types.h" +#include "vc-core-engine-status.h" +#include "vc-core-engine-group.h" typedef struct { void *puser_data; @@ -35,16 +38,16 @@ static app_cb_t *app_client_data = NULL; * This function send events to client. * * @return int API Result Code. - * @param[in] + * @param[in] */ gboolean vcall_engine_send_event_to_client(int event, void *pdata) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); if (app_client_data->cb_func != NULL) { - CALL_ENG_DEBUG(ENG_DEBUG, "Sending Event to APP Client\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Sending Event to APP Client"); app_client_data->cb_func(event, pdata, app_client_data->puser_data); } - CALL_ENG_DEBUG(ENG_ERR, "End..\n"); + CALL_ENG_DEBUG(ENG_ERR, "End.."); return TRUE; } @@ -52,25 +55,18 @@ gboolean vcall_engine_send_event_to_client(int event, void *pdata) * This function initialize voice call engine. * * @return int API Result Code. - * @param[in] + * @param[in] */ int vcall_engine_init(vcall_engine_app_cb pcb_func, void *puser_data) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); - - /* thread system initialization */ - if (!g_thread_supported()) { - CALL_ENG_KPI("g_thread_init start"); - g_thread_init(NULL); - CALL_ENG_KPI("g_thread_init done"); - } + CALL_ENG_DEBUG(ENG_WARN, ".."); global_pcall_core = (call_vc_core_state_t *)calloc(1, sizeof(call_vc_core_state_t)); if (global_pcall_core == NULL) { - CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed\n"); + CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed"); return VCALL_ENGINE_API_FAILED; } - CALL_ENG_DEBUG(ENG_DEBUG, "global_pcall_core alloctated memory:[%d],global_pcall_core(0x%x) \n", sizeof(call_vc_core_state_t), global_pcall_core); + CALL_ENG_DEBUG(ENG_DEBUG, "global_pcall_core alloctated memory:[%d],global_pcall_core(0x%x)", sizeof(call_vc_core_state_t), global_pcall_core); if (FALSE == voicecall_core_init(global_pcall_core)) { CALL_ENG_DEBUG(ENG_DEBUG, "voicecall_core_init() failed"); @@ -79,13 +75,13 @@ int vcall_engine_init(vcall_engine_app_cb pcb_func, void *puser_data) app_client_data = (app_cb_t *) calloc(1, sizeof(app_cb_t)); if (app_client_data == NULL) { - CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed\n"); + CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed"); return VCALL_ENGINE_API_FAILED; } app_client_data->cb_func = pcb_func; app_client_data->puser_data = puser_data; - CALL_ENG_DEBUG(ENG_DEBUG, "Init dbus connection\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Init dbus connection"); vc_engine_dbus_receiver_setup(); return VCALL_ENGINE_API_SUCCESS; @@ -95,11 +91,11 @@ int vcall_engine_init(vcall_engine_app_cb pcb_func, void *puser_data) * This function processes mo nomal call. * * @return int API Result Code. - * @param[in] + * @param[in] */ int vcall_engine_process_normal_call(char *number, int ct_index, gboolean b_download_call) { - CALL_ENG_DEBUG(ENG_DEBUG, " number is (%s)\n", number); + CALL_ENG_DEBUG(ENG_DEBUG, " number is (%s)", number); voicecall_engine_t *pcall_engine = global_pcall_core->pcall_engine; vc_engine_outgoing_type event_data; char number_after_removal[VC_PHONE_NUMBER_LENGTH_MAX] = {"\0",}; @@ -113,7 +109,7 @@ int vcall_engine_process_normal_call(char *number, int ct_index, gboolean b_down /* check the call-engine state before proceeding with call processing */ _vc_core_engine_status_get_engine_iostate(pcall_engine, &io_state); if (io_state != VC_INOUT_STATE_NONE) { - CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call \n", io_state); + CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call", io_state); voicecall_core_set_status(global_pcall_core, CALL_VC_CORE_FLAG_SETUPCALL_FAIL, TRUE); vc_engine_msg_box_type mbox_event_data; @@ -130,12 +126,12 @@ int vcall_engine_process_normal_call(char *number, int ct_index, gboolean b_down memset(&event_data, 0, sizeof(event_data)); _vc_core_util_remove_invalid_chars(number, number_after_removal); - snprintf(global_pcall_core->call_setup_info.source_tel_number, VC_PHONE_NUMBER_LENGTH_MAX, number_after_removal); + snprintf(global_pcall_core->call_setup_info.source_tel_number, VC_PHONE_NUMBER_LENGTH_MAX, "%s", number_after_removal); voicecall_core_extract_phone_number(number_after_removal, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX); - if (strlen(event_data.call_num) > VC_PHONE_NUMBER_LENGTH_MAX) { - CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!! \n"); - memcpy(global_pcall_core->call_setup_info.tel_number, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX); + if (strlen(event_data.call_num) >= VC_PHONE_NUMBER_LENGTH_MAX) { + CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!!"); + memcpy(global_pcall_core->call_setup_info.tel_number, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX-1); } else { memcpy(global_pcall_core->call_setup_info.tel_number, event_data.call_num, strlen(event_data.call_num)); } @@ -145,12 +141,28 @@ int vcall_engine_process_normal_call(char *number, int ct_index, gboolean b_down CALL_ENG_DEBUG(ENG_DEBUG, "global_pcall_core->call_setup_info.tel_number:[%s]", global_pcall_core->call_setup_info.tel_number); CALL_ENG_DEBUG(ENG_DEBUG, "event_data.call_num:[%s]", event_data.call_num); + { + voicecall_contact_info_t ct_info; + memset(&ct_info, 0, sizeof(ct_info)); + + ct_info.ct_index = ct_index; + + voicecall_service_contact_info_by_number(event_data.call_num, &ct_info); + event_data.contact_index = ct_info.ct_index; + event_data.phone_type = ct_info.phone_type; + event_data.bday_remaining_days = ct_info.bday_remaining_days; + + _vc_core_util_strcpy(event_data.call_name, sizeof(event_data.call_name), ct_info.display_name); + _vc_core_util_strcpy(event_data.call_file_path, sizeof(event_data.call_file_path), ct_info.caller_id_path); + _vc_core_util_strcpy(event_data.call_full_file_path, sizeof(event_data.call_full_file_path), ct_info.caller_full_id_path); + CALL_ENG_DEBUG(ENG_DEBUG, " contact copy ended!!"); + } vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_TO_UI, (void *)&event_data); if (voicecall_core_setup_call(global_pcall_core, FALSE)) { - CALL_ENG_DEBUG(ENG_DEBUG, " success!! \n"); + CALL_ENG_DEBUG(ENG_DEBUG, " success!!"); } else { - CALL_ENG_DEBUG(ENG_DEBUG, " failed!! \n"); + CALL_ENG_DEBUG(ENG_DEBUG, " failed!!"); } return VCALL_ENGINE_API_SUCCESS; @@ -160,11 +172,11 @@ int vcall_engine_process_normal_call(char *number, int ct_index, gboolean b_down * This function processes mo emergency call. * * @return int API Result Code. - * @param[in] + * @param[in] */ int vcall_engine_process_emergency_call(char *number) { - CALL_ENG_DEBUG(ENG_DEBUG, " number is : [%s] \n", number); + CALL_ENG_DEBUG(ENG_DEBUG, " number is : [%s]", number); voicecall_engine_t *pcall_engine = global_pcall_core->pcall_engine; gboolean bDefaultNumber = FALSE; vc_engine_outgoing_type event_data; @@ -173,7 +185,7 @@ int vcall_engine_process_emergency_call(char *number) /* check the call-engine state before proceeding with emergency call processing */ _vc_core_engine_status_get_engine_iostate(pcall_engine, &io_state); if (io_state != VC_INOUT_STATE_NONE) { - CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call \n", io_state); + CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call", io_state); voicecall_core_set_status(global_pcall_core, CALL_VC_CORE_FLAG_SETUPCALL_FAIL, TRUE); vc_engine_msg_box_type mbox_event_data; @@ -200,7 +212,7 @@ int vcall_engine_process_emergency_call(char *number) global_pcall_core->call_setup_info.call_type = VC_CALL_ORIG_TYPE_PINLOCK; voicecall_core_extract_phone_number(number, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX); if (strlen(number) > VC_PHONE_NUMBER_LENGTH_MAX) { - CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!! \n"); + CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!!"); memcpy(global_pcall_core->call_setup_info.source_tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX); memcpy(global_pcall_core->call_setup_info.tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX); } else { @@ -211,20 +223,27 @@ int vcall_engine_process_emergency_call(char *number) event_data.contact_index = -1; event_data.phone_type = -1; + event_data.bday_remaining_days = -1; vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_TO_UI, (void *)&event_data); if (voicecall_core_setup_call(global_pcall_core, TRUE)) { - CALL_ENG_DEBUG(ENG_DEBUG, " success!! \n"); + CALL_ENG_DEBUG(ENG_DEBUG, " success!!"); } else { - CALL_ENG_DEBUG(ENG_DEBUG, " failed!! \n"); + CALL_ENG_DEBUG(ENG_DEBUG, " failed!!"); } return VCALL_ENGINE_API_SUCCESS; } +/** + * This function processes emergency call for testing purpose. + * + * @return int API Result Code. + * @param[in] +*/ int vcall_engine_process_emergency_call_test(char *number) { - CALL_ENG_DEBUG(ENG_DEBUG, " number is : [%s] \n", number); + CALL_ENG_DEBUG(ENG_DEBUG, " number is : [%s]", number); voicecall_engine_t *pcall_engine = global_pcall_core->pcall_engine; gboolean bDefaultNumber = FALSE; vc_engine_outgoing_type event_data; @@ -233,7 +252,7 @@ int vcall_engine_process_emergency_call_test(char *number) /* check the call-engine state before proceeding with emergency call processing */ _vc_core_engine_status_get_engine_iostate(pcall_engine, &io_state); if (io_state != VC_INOUT_STATE_NONE) { - CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call \n", io_state); + CALL_ENG_DEBUG(ENG_DEBUG, "IO State [%d] not NONE, cannot proceed with the call", io_state); voicecall_core_set_status(global_pcall_core, CALL_VC_CORE_FLAG_SETUPCALL_FAIL, TRUE); vc_engine_msg_box_type mbox_event_data; @@ -260,7 +279,7 @@ int vcall_engine_process_emergency_call_test(char *number) global_pcall_core->call_setup_info.call_type = VC_CALL_ORIG_TYPE_PINLOCK; voicecall_core_extract_phone_number(number, event_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX); if (strlen(number) > VC_PHONE_NUMBER_LENGTH_MAX) { - CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!! \n"); + CALL_ENG_DEBUG(ENG_ERR, " WARNING!! number is larger than max num length!!"); memcpy(global_pcall_core->call_setup_info.source_tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX); memcpy(global_pcall_core->call_setup_info.tel_number, number, VC_PHONE_NUMBER_LENGTH_MAX); } else { @@ -271,19 +290,19 @@ int vcall_engine_process_emergency_call_test(char *number) event_data.contact_index = -1; event_data.phone_type = -1; + event_data.bday_remaining_days = -1; vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_TO_UI, (void *)&event_data); { int call_handle = 1; vc_engine_outgoing_orig_type orig_event_data; - call_vc_call_objectinfo_t callobject_info; memset(&orig_event_data, 0, sizeof(orig_event_data)); orig_event_data.call_handle = call_handle; orig_event_data.bemergency = TRUE; - CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d, bemergency:[%d] \n", orig_event_data.call_handle, orig_event_data.bemergency); + CALL_ENG_DEBUG(ENG_DEBUG, "Call Handle = %d, bemergency:[%d]", orig_event_data.call_handle, orig_event_data.bemergency); vcall_engine_send_event_to_client(VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI_TEST, (void *)&orig_event_data); } @@ -294,11 +313,11 @@ int vcall_engine_process_emergency_call_test(char *number) * This function processes sat setup call. * * @return int API Result Code. - * @param[in] + * @param[in] */ int vcall_engine_process_sat_setup_call(vcall_engine_sat_setup_call_info_t *sat_setup_call_info) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); voicecall_core_process_sat_setup_call(sat_setup_call_info); return VCALL_ENGINE_API_SUCCESS; } @@ -307,13 +326,13 @@ int vcall_engine_process_sat_setup_call(vcall_engine_sat_setup_call_info_t *sat_ * This function processes incoming call. * * @return int API Result Code. - * @param[in] + * @param[in] */ int vcall_engine_process_incoming_call(vcall_engine_incoming_info_t *incoming_call_info) { call_vc_core_incoming_info_t tmp_incom_info = { 0, }; - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); tmp_incom_info.call_handle = incoming_call_info->call_handle; tmp_incom_info.call_type = incoming_call_info->call_type; @@ -339,11 +358,11 @@ int vcall_engine_process_incoming_call(vcall_engine_incoming_info_t *incoming_ca */ int vcall_engine_answer_call(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = VCALL_ENGINE_API_FAILED; ret = voicecall_core_answer_call(global_pcall_core, FALSE); - CALL_ENG_DEBUG(ENG_DEBUG, " ret:[%d] \n", ret); + CALL_ENG_DEBUG(ENG_DEBUG, " ret:[%d]", ret); return ret; } @@ -355,8 +374,8 @@ int vcall_engine_answer_call(void) */ int vcall_engine_answer_call_by_type(vcall_engine_answer_type_t answer_type) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); - CALL_ENG_DEBUG(ENG_DEBUG, "answer_type:[%d]\n", answer_type); + CALL_ENG_DEBUG(ENG_WARN, ".."); + CALL_ENG_DEBUG(ENG_DEBUG, "answer_type:[%d]", answer_type); if (TRUE == voicecall_core_answer_call_bytype(global_pcall_core, answer_type)) { return VCALL_ENGINE_API_SUCCESS; @@ -374,7 +393,7 @@ int vcall_engine_answer_call_by_type(vcall_engine_answer_type_t answer_type) */ int vcall_engine_cancel_call(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); if (TRUE == voicecall_core_cancel_call(global_pcall_core)) { return VCALL_ENGINE_API_SUCCESS; @@ -391,7 +410,7 @@ int vcall_engine_cancel_call(void) */ int vcall_engine_reject_call(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); if (TRUE == voicecall_core_reject_mt(global_pcall_core, TRUE)) { return VCALL_ENGINE_API_SUCCESS; @@ -408,7 +427,7 @@ int vcall_engine_reject_call(void) */ int vcall_engine_release_call(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); if (TRUE == voicecall_core_end_call(global_pcall_core)) { return VCALL_ENGINE_API_SUCCESS; @@ -425,8 +444,8 @@ int vcall_engine_release_call(void) */ int vcall_engine_release_call_by_handle(int call_handle) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); - CALL_ENG_DEBUG(ENG_DEBUG, "call_handle:[%d]\n", call_handle); + CALL_ENG_DEBUG(ENG_WARN, ".."); + CALL_ENG_DEBUG(ENG_DEBUG, "call_handle:[%d]", call_handle); if (TRUE == voicecall_core_end_call_by_handle(global_pcall_core, call_handle)) { return VCALL_ENGINE_API_SUCCESS; @@ -443,10 +462,10 @@ int vcall_engine_release_call_by_handle(int call_handle) */ int vcall_engine_release_call_by_type(vcall_engine_release_type_t release_type) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, " release_type : [%d]\n", release_type); + CALL_ENG_DEBUG(ENG_DEBUG, " release_type : [%d]", release_type); switch (release_type) { case VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS: { @@ -467,7 +486,7 @@ int vcall_engine_release_call_by_type(vcall_engine_release_type_t release_type) break; default: - CALL_ENG_DEBUG(ENG_DEBUG, " Unknown release_type : [%d]\n", release_type); + CALL_ENG_DEBUG(ENG_DEBUG, " Unknown release_type : [%d]", release_type); break; } @@ -487,7 +506,7 @@ int vcall_engine_release_call_by_type(vcall_engine_release_type_t release_type) */ int vcall_engine_process_hold_call(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_process_hold_call(global_pcall_core); @@ -506,7 +525,7 @@ int vcall_engine_process_hold_call(void) */ void vcall_engine_process_incall_ss(char *number) { - CALL_ENG_DEBUG(ENG_WARN, "number(%s)\n"); + CALL_ENG_DEBUG(ENG_WARN, "number(%s)"); voicecall_core_process_incall_ss(global_pcall_core, number); } @@ -519,7 +538,7 @@ void vcall_engine_process_incall_ss(char *number) */ int vcall_engine_join_call(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_setup_conference(global_pcall_core); @@ -538,7 +557,7 @@ int vcall_engine_join_call(void) */ int vcall_engine_split_call(int call_handle) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_make_private_call(global_pcall_core, call_handle); @@ -557,7 +576,7 @@ int vcall_engine_split_call(int call_handle) */ int vcall_engine_transfer_call(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_transfer_calls(global_pcall_core); @@ -576,10 +595,10 @@ int vcall_engine_transfer_call(void) */ int vcall_engine_process_loudspeaker(int bstatus) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]\n", bstatus); + CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]", bstatus); if (bstatus) { ret = voicecall_service_loudspeaker_on(global_pcall_core); } else { @@ -601,10 +620,10 @@ int vcall_engine_process_loudspeaker(int bstatus) */ int vcall_engine_process_voice_mute(int bstatus) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]\n", bstatus); + CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]", bstatus); if (bstatus) { ret = voicecall_service_mute_status_on(global_pcall_core); } else { @@ -627,9 +646,10 @@ int vcall_engine_process_voice_mute(int bstatus) */ int vcall_engine_get_volume_level(vcall_engine_vol_type_t vol_type) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); - CALL_ENG_DEBUG(ENG_DEBUG, " vol_type : [%d]\n", vol_type); + CALL_ENG_DEBUG(ENG_DEBUG, " vol_type : [%d]", vol_type); + /* jspark 201007 decide to sync or async. */ return voicecall_snd_get_volume(global_pcall_core->papp_snd, vol_type); @@ -644,10 +664,10 @@ int vcall_engine_get_volume_level(vcall_engine_vol_type_t vol_type) */ int vcall_engine_set_volume_level(vcall_engine_vol_type_t vol_type, int vol_level) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, " vol_type : [%d], vol_level:[%d]\n", vol_type, vol_level); + CALL_ENG_DEBUG(ENG_DEBUG, " vol_type : [%d], vol_level:[%d]", vol_type, vol_level); ret = voicecall_service_set_volume(global_pcall_core, vol_type, vol_level); if (ret == TRUE) { return VCALL_ENGINE_API_SUCCESS; @@ -664,7 +684,7 @@ int vcall_engine_set_volume_level(vcall_engine_vol_type_t vol_type, int vol_leve */ int vcall_engine_stop_alert(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_stop_alert(global_pcall_core); @@ -683,7 +703,7 @@ int vcall_engine_stop_alert(void) */ int vcall_engine_mute_alert(void) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_snd_mute_alert(global_pcall_core->papp_snd); @@ -702,10 +722,10 @@ int vcall_engine_mute_alert(void) */ int vcall_engine_process_auto_redial(int bstatus) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]\n", bstatus); + CALL_ENG_DEBUG(ENG_DEBUG, " bstatus : [%d]", bstatus); if (bstatus) { ret = voicecall_core_start_redial(global_pcall_core, TRUE); } else { @@ -726,7 +746,7 @@ int vcall_engine_process_auto_redial(int bstatus) */ int vcall_engine_send_dtmf_number(char *dtmf_number) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_send_dtmf(global_pcall_core, dtmf_number); @@ -746,7 +766,7 @@ int vcall_engine_send_dtmf_number(char *dtmf_number) */ int vcall_engine_change_sound_path(vcall_engine_audio_type_t sound_path) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_change_sound_path(global_pcall_core, sound_path); @@ -766,7 +786,7 @@ int vcall_engine_change_sound_path(vcall_engine_audio_type_t sound_path) */ int vcall_engine_get_sound_path(int *sound_path) { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; int snd_path = 0; @@ -774,14 +794,12 @@ int vcall_engine_get_sound_path(int *sound_path) if (snd_path == VOICE_CALL_AUDIO_SPEAKER) { *sound_path = VCALL_ENGINE_AUDIO_SPEAKER; - } else if (snd_path == VOICE_CALL_AUDIO_RECEIVER) { - *sound_path = VCALL_ENGINE_AUDIO_RECEIVER; } else if (snd_path == VOICE_CALL_AUDIO_HEADSET) { *sound_path = VCALL_ENGINE_AUDIO_HEADSET; - } else if (snd_path == VOICE_CALL_AUDIO_EARJACK) { - *sound_path = VCALL_ENGINE_AUDIO_EARJACK; + } else if (snd_path == VOICE_CALL_AUDIO_RECEIVER_EARJACK) { + *sound_path = VCALL_ENGINE_AUDIO_RECEIVER_EARJACK; } else { - *sound_path = VCALL_ENGINE_AUDIO_RECEIVER; + *sound_path = VCALL_ENGINE_AUDIO_RECEIVER_EARJACK; } if (ret == TRUE) { @@ -795,11 +813,11 @@ int vcall_engine_get_sound_path(int *sound_path) * This function set call engine to default * * @return int API Result Code. - * @param[in] + * @param[in] */ int vcall_engine_set_to_default() { - CALL_ENG_DEBUG(ENG_WARN, "..\n"); + CALL_ENG_DEBUG(ENG_WARN, ".."); int ret = FALSE; ret = voicecall_core_set_to_default(global_pcall_core); @@ -826,7 +844,6 @@ gpointer vcall_engine_get_core_state(void) */ gboolean vcall_engine_util_strcpy(char *pbuffer, int buf_count, const char *pstring) { - CALL_ENG_DEBUG(ENG_DEBUG, ".."); return _vc_core_util_strcpy(pbuffer, buf_count, pstring); } @@ -870,3 +887,54 @@ void vcall_engine_force_reset(void) voicecall_core_end_all_calls(global_pcall_core); } + +/** + * This function will process the dtmf send request from UI + * It is executed when wait(w/W/;) is finished while sending a dtmf string + * + * @return void + * @param[in] void + */ +void vcall_engine_send_dtmf(gboolean bsuccess) +{ + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + + voicecall_core_process_dtmf_send_status(global_pcall_core, bsuccess); +} + +/** + * This function is interface to call-utility to check for ss string + * + * @return TRUE or FALSE if success/failure + * @param[in] call_number pointer to the number + */ +gboolean vcall_engine_check_incall_ss_string(char *call_number) +{ + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + return _vc_core_util_check_incall_ss_string(call_number); +} + +/** + * This function checks whether a given number is a SS string or not + * + * @return TRUE or FALSE if success/failure + * @param[in] call_number pointer to the number + */ +gboolean vcall_engine_check_ss_string(char *call_number) +{ + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + return _vc_core_util_check_ss_string(call_number); +} + +/** + * This function controls the lcd state + * + * @return void + * @param[in] lcd_state state of the lcd control + */ +void vcall_engine_device_control_lcd_state(voicecall_lcd_control_t lcd_state) +{ + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + _voicecall_dvc_control_lcd_state(lcd_state); +} + diff --git a/call-engine/voice-call-service.c b/call-engine/voice-call-service.c index f48e808..f8cf736 100755 --- a/call-engine/voice-call-service.c +++ b/call-engine/voice-call-service.c @@ -22,33 +22,257 @@ #include "voice-call-sound.h" #include "voice-call-bt.h" +/* + * If the birthday is Today then it will return 0 + * If the birthday is within 1 week gap then it will return between 1 to 7 + * In all other cases it will return -1 + */ +static int __voicecall_service_get_bday_remaining_days(CTSstruct *contact) +{ + int diff = -1; + GSList *event_list = NULL; + GSList *cursor = NULL; + + contacts_svc_struct_get_list(contact, CTS_CF_EVENT_LIST, &event_list); + for (cursor = event_list; cursor; cursor = cursor->next) { + if (CTS_EVENT_TYPE_BIRTH == contacts_svc_value_get_int(cursor->data, CTS_EVENT_VAL_TYPE_INT)) { + int bday_date; + time_t t_now; + time_t t_bday; + struct tm *timeinfo; + bday_date = contacts_svc_value_get_int(cursor->data, CTS_EVENT_VAL_DATE_INT); + time(&t_now); + timeinfo = localtime(&t_now); + timeinfo->tm_sec = timeinfo->tm_min = 59; + timeinfo->tm_hour = 23; + timeinfo->tm_mday = bday_date % 100; + timeinfo->tm_mon = (bday_date%10000)/100 - 1; + CALL_ENG_DEBUG(ENG_DEBUG, "bday date = %d, month = %d", timeinfo->tm_mday, timeinfo->tm_mon); + t_bday = mktime(timeinfo); + if (t_now < t_bday) { + diff = (int)((t_bday - t_now) / (24 * 60 * 60)); + if (diff < 0 || diff > 7) { + diff = -1; /* All the other days which dont fall in one week gap is invalid */ + } + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "No need to show bday icon, becauae bday is not falling in 1 week gap"); + } + + break; + } + } + + CALL_ENG_DEBUG(ENG_DEBUG, "diff = %d", diff); + return diff; +} + +/** + * This function gets contact info from phone number + * + * @return gboolean + * @param[in] phonenumber phone number + * @param[out] ct_info contact info + */ +gboolean voicecall_service_contact_info_by_number(char *phonenumber, voicecall_contact_info_t * ct_info) +{ + CALL_ENG_KPI("voicecall_service_contact_info_by_number start"); + int index = 0; + int ret = -1; + CTSstruct *contact = NULL; + CTSvalue *name = NULL, *base = NULL; + const char *first = NULL, *last = NULL, *display = NULL; + GSList *get_list, *cursor; + + VOICECALL_RETURN_FALSE_IF_FAIL(phonenumber != NULL); + VOICECALL_RETURN_FALSE_IF_FAIL(ct_info != NULL); + + CALL_ENG_DEBUG(ENG_DEBUG, "num:[%s],index:[%d]..", phonenumber, ct_info->ct_index); + + contacts_svc_connect(); + + if (ct_info->ct_index == -1) { + index = contacts_svc_find_contact_by(CTS_FIND_BY_NUMBER, phonenumber); + if (index < CTS_SUCCESS) { + CALL_ENG_DEBUG(ENG_DEBUG, "ret:[%d]..No found record", ret); + ct_info->ct_index = -1; + ct_info->phone_type = -1; + ct_info->bday_remaining_days = -1; + return FALSE; + } else + ct_info->ct_index = index; + } + + ret = contacts_svc_get_contact(ct_info->ct_index, &contact); + + if (ret < 0) { + CALL_ENG_DEBUG(ENG_DEBUG, "ret:[%d]..No found record", ret); + ct_info->ct_index = -1; + ct_info->phone_type = -1; + return FALSE; + } + /* If it comes to here, it means we have found a contact. */ + contacts_svc_struct_get_value(contact, CTS_CF_NAME_VALUE, &name); + 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 = contacts_svc_value_get_str(name, CTS_NAME_VAL_DISPLAY_STR); + + if (display != NULL) { + snprintf(ct_info->display_name, sizeof(ct_info->display_name), "%s", display); + } else { + if (first != NULL && last != NULL) { + if (CTS_ORDER_NAME_FIRSTLAST == contacts_svc_get_order(CTS_ORDER_OF_DISPLAY)) + snprintf(ct_info->display_name, sizeof(ct_info->display_name), "%s %s", first, last); + else + snprintf(ct_info->display_name, sizeof(ct_info->display_name), "%s %s", last, first); + } else if (first == NULL && last != NULL) { + snprintf(ct_info->display_name, sizeof(ct_info->display_name), "%s", last); + } else if (first != NULL && last == NULL) { + snprintf(ct_info->display_name, sizeof(ct_info->display_name), "%s", first); + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "Error!. first & last name is NULL!!"); + snprintf(ct_info->display_name, sizeof(ct_info->display_name), "%s", "no name"); + } + } + get_list = NULL; + contacts_svc_struct_get_list(contact, CTS_CF_NUMBER_LIST, &get_list); + cursor = get_list; + while (cursor) { + if (strcmp(contacts_svc_value_get_str(cursor->data, CTS_NUM_VAL_NUMBER_STR), phonenumber) == 0) { + ct_info->phone_type = contacts_svc_value_get_int(cursor->data, CTS_NUM_VAL_TYPE_INT); + } + cursor = cursor->next; + if (cursor == NULL) + break; + } + + contacts_svc_struct_get_value(contact, CTS_CF_BASE_INFO_VALUE, &base); + + _vc_core_util_strcpy(ct_info->caller_id_path, sizeof(ct_info->caller_id_path), contacts_svc_value_get_str(base, CTS_BASE_VAL_IMG_PATH_STR)); + + char *full_path = NULL; + contacts_svc_get_image(CTS_IMG_FULL, ct_info->ct_index, &full_path); + if (full_path != NULL) { + _vc_core_util_strcpy(ct_info->caller_full_id_path, sizeof(ct_info->caller_full_id_path), full_path); + } + free(full_path); + + _vc_core_util_strcpy(ct_info->ring_tone, sizeof(ct_info->ring_tone), contacts_svc_value_get_str(base, CTS_BASE_VAL_RINGTONE_PATH_STR)); + + ct_info->bday_remaining_days = __voicecall_service_get_bday_remaining_days(contact); + + CALL_ENG_DEBUG(ENG_DEBUG, "contact index:[%d]", ct_info->ct_index); + CALL_ENG_DEBUG(ENG_DEBUG, "phone_type:[%d]", ct_info->phone_type); + CALL_ENG_DEBUG(ENG_DEBUG, "bday_remaining_days :[%d]", ct_info->bday_remaining_days); + CALL_ENG_DEBUG(ENG_DEBUG, "display name:[%s]", ct_info->display_name); + CALL_ENG_DEBUG(ENG_DEBUG, "img path:[%s]", ct_info->caller_id_path); + CALL_ENG_DEBUG(ENG_DEBUG, "full img path:[%s]", ct_info->caller_full_id_path); + CALL_ENG_DEBUG(ENG_DEBUG, "ringtone path:[%s]", ct_info->ring_tone); + + contacts_svc_struct_free(contact); + contacts_svc_disconnect(); + CALL_ENG_DEBUG(ENG_DEBUG, "Ended!!"); + CALL_ENG_KPI("voicecall_service_contact_info_by_number done"); + return TRUE; +} + +/** + * This function gets contact info from contact id + * + * @return gboolean + * @param[in] phonenumber phone number + * @param[in] contact_id contact id + * @param[in] storage_type storage type + * @param[out] ct_info contact info + */ +gboolean voicecall_service_contact_info_by_contact_id(char *phonenumber, int contact_id, voicecall_contact_info_t * ct_info) +{ +#ifdef _CT_SEARCH_BY_ID_ + VOICECALL_RETURN_FALSE_IF_FAIL(phonenumber != NULL); + VOICECALL_RETURN_FALSE_IF_FAIL(ct_info != NULL); + + int bfound = FALSE; + int ret; + contact_t record; + int index = 0; + + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + + memset(&record, 0, sizeof(contact_t)); + + if (contact_db_service_connect() != CONTACT_OPERATION_SUCCESS) { + CALL_ENG_DEBUG(ENG_DEBUG, "contact_db_service_connect error"); + return FALSE; + } + + ret = contact_db_service_contact_get(CONTACT_DB_GET_RECORD_BY_KEY, contact_id, storage_type, &record); + + if (ret == CONTACT_OPERATION_SUCCESS) { + bfound = TRUE; + } else { + bfound = FALSE; + } + + CALL_ENG_DEBUG(ENG_DEBUG, " bfound = [%d]", bfound); + if (bfound) { + if (record.contact.display_name != NULL) + _vc_core_util_strcpy(ct_info->display_name, sizeof(ct_info->display_name), record.contact.display_name); + if (record.contact.media_data.ringtone_path != NULL) + _vc_core_util_strcpy(ct_info->ring_tone, sizeof(ct_info->ring_tone), record.contact.media_data.ringtone_path); + + ct_info->ct_index = contact_id; + ct_info->storage_type = storage_type; + + CALL_ENG_DEBUG(ENG_DEBUG, "phone count:[%d]", record.phone_count); + for (index = 0; index < record.phone_count; index++) { + if (strcmp(record.phone_info[index].number, phonenumber) == 0) { + ct_info->phone_type = record.phone_info[index].type; + } + } + CALL_ENG_DEBUG(ENG_DEBUG, "*** found ***"); + CALL_ENG_DEBUG(ENG_DEBUG, "name:[%s] vs [%s]", ct_info->display_name, record.contact.display_name); + CALL_ENG_DEBUG(ENG_DEBUG, "ringtone path:[%s] vs [%s]", ct_info->ring_tone, record.contact.media_data.ringtone_path); + } else { + ct_info->ct_index = contact_id; + ct_info->storage_type = storage_type; + ct_info->phone_type = -1; + + CALL_ENG_DEBUG(ENG_DEBUG, "not found. name:[%s], path:[%s]", ct_info->display_name, ct_info->caller_id_path); + } + + contact_db_service_contact_free(&record); + if (contact_db_service_disconnect() != CONTACT_OPERATION_SUCCESS) { + CALL_ENG_DEBUG(ENG_DEBUG, "contact_db_service_disconnect error"); + return FALSE; + } +#endif + return TRUE; +} + /** * This function on the loud speaker state * * @return gboolean - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_service_loudspeaker_on(call_vc_core_state_t *pcall_core) { VOICECALL_RETURN_FALSE_IF_FAIL(pcall_core != NULL); - - gboolean bloud_speaker = FALSE; + voicecall_snd_mgr_t *papp_snd = pcall_core->papp_snd; gboolean ret = FALSE; int total_call_member = -1; - CALL_ENG_DEBUG(ENG_DEBUG, "\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ""); voicecall_core_get_total_call_member(pcall_core->pcall_engine, &total_call_member); if (total_call_member == 0) { - CALL_ENG_DEBUG(ENG_DEBUG, "There are not active calls hence it should not work \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "There are not active calls hence it should not work"); return FALSE; } /* Toggle the LoudSpeaker Status */ -#ifdef _NEW_SND_ if (voicecall_snd_get_path_status(pcall_core->papp_snd) != VOICE_CALL_SND_PATH_SPEAKER) { - if (TRUE == _vc_bt_is_bt_connected(pcall_core) && + if (TRUE == _vc_bt_is_bt_connected(pcall_core) && (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_BT)) { voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_SPEAKER); /* _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_PHONE, -1, NULL);*/ @@ -58,34 +282,9 @@ gboolean voicecall_service_loudspeaker_on(call_vc_core_state_t *pcall_core) voicecall_snd_change_path(papp_snd); } } else { - CALL_ENG_DEBUG(ENG_DEBUG, "loudspeacker is already on.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "loudspeacker is already on."); ret = FALSE; } -#else - bloud_speaker = voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER); - if (bloud_speaker == FALSE) { - CALL_ENG_DEBUG(ENG_DEBUG, "Change to Speaker On. \n"); - - /*If current Path is Set to BT Headset, Change Path from Headset to Phone */ - if (TRUE == _vc_bt_is_bt_connected(pcall_core)) { - if (TRUE == voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_HEADSET)) { - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_HEADSET, FALSE); -/* _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_PHONE, -1, NULL);*/ - _vc_bt_request_switch_headset_path(pcall_core, FALSE); - voicecall_snd_change_path(papp_snd); - } - } - - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER, TRUE); - - /* Change Audio Path according to the current status */ - voicecall_snd_change_path(papp_snd); - ret = TRUE; - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "loudspeacker is already on.\n"); - ret = FALSE; - } -#endif return ret; } @@ -93,57 +292,37 @@ gboolean voicecall_service_loudspeaker_on(call_vc_core_state_t *pcall_core) * This function off the loud speaker state * * @return gboolean - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_service_loudspeaker_off(call_vc_core_state_t *pcall_core) { VOICECALL_RETURN_FALSE_IF_FAIL(pcall_core != NULL); - gboolean bloud_speaker = FALSE; gboolean ret = FALSE; voicecall_snd_mgr_t *papp_snd = pcall_core->papp_snd; int total_call_member = -1; voicecall_core_get_total_call_member(pcall_core->pcall_engine, &total_call_member); if (total_call_member == 0) { - CALL_ENG_DEBUG(ENG_DEBUG, "There are not active calls hence it should not work \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "There are not active calls hence it should not work"); return FALSE; } - CALL_ENG_DEBUG(ENG_DEBUG, "\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ""); -#ifdef _NEW_SND_ if (voicecall_snd_get_path_status(pcall_core->papp_snd) == VOICE_CALL_SND_PATH_SPEAKER) { if (TRUE == _vc_bt_is_bt_connected(pcall_core)) { voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_BT); /*_vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SWITCH_TO_HEADSET, -1, NULL);*/ _vc_bt_request_switch_headset_path(pcall_core, TRUE); } else { - voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER); + CALL_ENG_DEBUG(ENG_DEBUG, "Set VOICE_CALL_SND_PATH_RECEIVER_EARJACK"); + voicecall_snd_set_path_status(pcall_core->papp_snd, VOICE_CALL_SND_PATH_RECEIVER_EARJACK); voicecall_snd_change_path(papp_snd); } } else { - CALL_ENG_DEBUG(ENG_DEBUG, "loudspeacker is already on.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "loudspeacker is already on."); ret = FALSE; } -#else - - /* Toggle the LoudSpeaker Status */ - bloud_speaker = voicecall_snd_get_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER); - if (bloud_speaker == TRUE) { - CALL_ENG_DEBUG(ENG_DEBUG, "Change to Speaker Off. \n"); - - voicecall_snd_set_status(papp_snd, VOICE_CALL_AUDIO_SPEAKER, FALSE); - - /* Change Audio Path according to the current status */ - voicecall_snd_change_path(papp_snd); - - ret = TRUE; - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "loudspeacker is already off.\n"); - ret = FALSE; - } -#endif - return ret; } @@ -151,7 +330,7 @@ gboolean voicecall_service_loudspeaker_off(call_vc_core_state_t *pcall_core) * This function is mute on * * @return void - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_service_mute_status_on(call_vc_core_state_t *pcall_core) @@ -164,23 +343,23 @@ gboolean voicecall_service_mute_status_on(call_vc_core_state_t *pcall_core) voicecall_snd_mgr_t *papp_snd = pcall_core->papp_snd; voicecall_engine_t *pcall_engine = pcall_core->pcall_engine; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); voicecall_core_is_call_exists(pcall_engine, &bactive_calls, &bheld_calls); if (FALSE == bactive_calls && TRUE == bheld_calls) { - CALL_ENG_DEBUG(ENG_DEBUG, "nothing to do.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "nothing to do."); /*Mute button should not be handled if only held calls exists */ return TRUE; } if (FALSE == papp_snd->bmute_status) { - CALL_ENG_DEBUG(ENG_DEBUG, "Setting Voice Audio Mute Status On. \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Setting Voice Audio Mute Status On."); voicecall_core_set_audio_mute_status(pcall_engine, TRUE); papp_snd->bmute_status = TRUE; return TRUE; } else { - CALL_ENG_DEBUG(ENG_DEBUG, "mute status is already on.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "mute status is already on."); return FALSE; } @@ -190,7 +369,7 @@ gboolean voicecall_service_mute_status_on(call_vc_core_state_t *pcall_core) * This function is mute off * * @return void - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core */ gboolean voicecall_service_mute_status_off(call_vc_core_state_t *pcall_core) { @@ -202,23 +381,23 @@ gboolean voicecall_service_mute_status_off(call_vc_core_state_t *pcall_core) voicecall_snd_mgr_t *papp_snd = pcall_core->papp_snd; voicecall_engine_t *pcall_engine = pcall_core->pcall_engine; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); voicecall_core_is_call_exists(pcall_engine, &bactive_calls, &bheld_calls); if (FALSE == bactive_calls && TRUE == bheld_calls) { - CALL_ENG_DEBUG(ENG_DEBUG, "nothing to do.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "nothing to do."); /*Mute button should not be handled if only held calls exists */ return TRUE; } if (TRUE == papp_snd->bmute_status) { - CALL_ENG_DEBUG(ENG_DEBUG, "Setting Voice Audio Mute Status Off. \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Setting Voice Audio Mute Status Off."); voicecall_core_set_audio_mute_status(pcall_engine, FALSE); papp_snd->bmute_status = FALSE; return TRUE; } else { - CALL_ENG_DEBUG(ENG_DEBUG, "mute status is already off.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "mute status is already off."); return FALSE; } @@ -228,7 +407,7 @@ gboolean voicecall_service_mute_status_off(call_vc_core_state_t *pcall_core) * This function set volume level. * * @return Returns TRUE on success or FALSE on failure - * @param[in] pcall_core Handle to voicecall core + * @param[in] pcall_core Handle to voicecall core * @param[in] vol_alert_type volume alert type * @param[in] volume_level volume level to be set */ @@ -242,3 +421,4 @@ gboolean voicecall_service_set_volume(call_vc_core_state_t *pcall_core, voicecal return TRUE; } + diff --git a/call-engine/voice-call-sound.c b/call-engine/voice-call-sound.c index fa24390..f88f882 100755 --- a/call-engine/voice-call-sound.c +++ b/call-engine/voice-call-sound.c @@ -21,12 +21,13 @@ #include "voice-call-core.h" #include "voice-call-bt.h" #include "voice-call-service.h" +#include "voice-call-device.h" #include #include #include #include -#include +#include #include #include #include @@ -56,11 +57,6 @@ #define VOICE_CALL_SND_NW_CONGESTION_SIGNAL_PATH MEDIADIR"/Call_NwCongestionTone.wav" #define VOICE_CALL_SND_ERROR_SIGNAL_PATH MEDIADIR"/Call_ErrorTone.wav" -#ifdef VOICE_CALL_RINGTONE_ELEVATOR -#define VOICE_CALL_SND_INITIAL_VOL_LEVEL 1 -#define VOICE_CALL_SND_RING_ELEVATOR_TIME_VAL 2000 /*3 Seconds Approx. */ -#endif - /** * Enumeration for volume level of 10 levels */ @@ -120,14 +116,6 @@ static void __voicecall_snd_start_vibration(voicecall_snd_mgr_t *papp_snd); */ static void __voicecall_snd_stop_vibration(voicecall_snd_mgr_t *papp_snd); -/** -* This function serves as the callback for vibration then melody timer -* -* @return Returns TRUE on success or FALSE on failure -* @param[in] data Local data set by the caller -*/ -static gboolean __voicecall_snd_vib_then_melody_cb(void *data); - /** * This function serves as the callbback for the MM Player * @@ -158,6 +146,15 @@ static gboolean __voicecall_snd_increasing_melody_cb(void *data); static gboolean __voicecall_snd_play_melody(voicecall_snd_mgr_t *papp_snd, gboolean bis_increasing); /** +* This function sets the mm player volume according to the settings volume level +* +* @return void +* @param[in] papp_snd Handle to the Sound Manager +* @param[in] bis_increasing TRUE if incremntal melody type, FALSE otherwise +*/ +static void __voicecall_snd_set_mm_volume(voicecall_snd_mgr_t *papp_snd, int bis_increasing); + +/** * This function retreives the tapi sound path to be used according to the current status * * @return void @@ -166,13 +163,6 @@ static gboolean __voicecall_snd_play_melody(voicecall_snd_mgr_t *papp_snd, gbool */ static void __voicecall_snd_get_voice_path(voicecall_snd_mgr_t *papp_snd, int *voice_snd_path); -#ifdef VOICE_CALL_RINGTONE_ELEVATOR - -static gboolean __voicecall_and_start_ring_elevator_cb(gpointer pdata); -static void __voicecall_snd_start_ring_elevator(voicecall_snd_mgr_t *papp_snd); -static void __voicecall_snd_cancel_ring_elevator(voicecall_snd_mgr_t *papp_snd); -#endif - /*Function Defintions*/ /** * This function initializes the sound functionalties required by the Application @@ -185,23 +175,20 @@ gboolean voicecall_snd_init(void *pcall_core, voicecall_snd_mgr_t **papp_snd) { voicecall_snd_mgr_t *psnd_mgr = NULL; - CALL_ENG_DEBUG(ENG_DEBUG, "Sound CM Test\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Sound CM Test"); psnd_mgr = (voicecall_snd_mgr_t *)calloc(1, sizeof(voicecall_snd_mgr_t)); if (psnd_mgr == NULL) { - CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed\n"); + CALL_ENG_DEBUG(ENG_ERR, "Memory Allocation Failed"); return FALSE; } - CALL_ENG_DEBUG(ENG_DEBUG, "psnd_mgr alloctated memory:[%d]\n", sizeof(voicecall_snd_mgr_t)); + CALL_ENG_DEBUG(ENG_DEBUG, "psnd_mgr alloctated memory:[%d]", sizeof(voicecall_snd_mgr_t)); /*Store voice call Handle */ psnd_mgr->pcall_core = pcall_core; -#ifdef _NEW_SND_ - psnd_mgr->current_snd_path = VOICE_CALL_SND_PATH_RECEIVER; + psnd_mgr->current_snd_path = VOICE_CALL_SND_PATH_RECEIVER_EARJACK; psnd_mgr->old_snd_path = VOICE_CALL_SND_PATH_NONE; -#endif - psnd_mgr->bsound_cm_state = FALSE; psnd_mgr->pmm_player = VOICE_CALL_SND_INVALID_PLAYER_HANDLE; @@ -228,15 +215,15 @@ gboolean __voicecall_snd_alternate_sound_idle_cb(void *puser_data) voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)puser_data; call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); if (TRUE == papp_snd->balternate_play) { if ((FALSE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) && (TRUE == voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine))) { /* case : during 2nd incoming call, connected call is cleared. so, just 1 incoming call case... */ - CALL_ENG_DEBUG(ENG_DEBUG, "2nd incoming -> just single incoming call.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "2nd incoming -> just single incoming call."); voicecall_snd_prepare_alert(papp_snd, papp_snd->incoming_call_handle); - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_RING_TONE); + sound_manager_call_session_set_mode(papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_RINGTONE); voicecall_snd_play_alert(papp_snd); } else { __voicecall_snd_play_alternate_sound(papp_snd); @@ -250,7 +237,7 @@ gboolean __voicecall_snd_alternate_play_timeout_cb(gpointer pdata) { voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)pdata; - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); if (papp_snd->balternate_play == TRUE) { __voicecall_snd_play_alternate_sound(papp_snd); } @@ -260,38 +247,38 @@ gboolean __voicecall_snd_alternate_play_timeout_cb(gpointer pdata) void __voicecall_snd_play_alternate_sound(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; if (TRUE == voicecall_core_is_incoming_call_exists(pcall_core->pcall_engine)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call is there!Play Alternate Sound \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Incoming call is there!Play Alternate Sound"); int mmf_error = -1; char ring_tone[VOICE_CALL_SND_RINGTONE_PATH_LEN]; snprintf(ring_tone, sizeof(ring_tone), "file://%s", VOICE_CALL_SND_SECOND_RINGTONE_PATH); - voicecall_snd_change_mm_path(pcall_core->papp_snd, VOICE_CALL_MM_SECOND_CALL_TONE); + sound_manager_call_session_set_mode(pcall_core->papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_MEDIA); - CALL_ENG_DEBUG(ENG_DEBUG, "Call mm_sound_play_sound to play alternate ringtonen\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Call mm_sound_play_sound to play alternate ringtonen"); mmf_error = mm_sound_play_sound(VOICE_CALL_SND_SECOND_RINGTONE_PATH, VOLUME_TYPE_CALL, __voicecall_snd_alternate_sound_cb, papp_snd, &papp_snd->mmfalternateplay_handle); if (MM_ERROR_NONE == mmf_error) { papp_snd->balternate_play = TRUE; papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_PLAY; - CALL_ENG_DEBUG(ENG_DEBUG, "Alternate Sound Play Called,papp_snd->balternate_play=%d \n", papp_snd->balternate_play); + CALL_ENG_DEBUG(ENG_DEBUG, "Alternate Sound Play Called,papp_snd->balternate_play=%d", papp_snd->balternate_play); } else { papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_STOP; papp_snd->balternate_play = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, "mmf_error = [0x%x] \n", mmf_error); + CALL_ENG_DEBUG(ENG_DEBUG, "mmf_error = [0x%x]", mmf_error); } - CALL_ENG_DEBUG(ENG_DEBUG, "End of Alternate Sound!\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "End of Alternate Sound!"); } } gboolean __voicecall_snd_stop_alternate_sound(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, " papp_snd->balternate_play = %d\n", papp_snd->balternate_play); + CALL_ENG_DEBUG(ENG_DEBUG, " papp_snd->balternate_play = %d", papp_snd->balternate_play); if (TRUE == papp_snd->balternate_play) { /*Only Stop if it is in Play State */ if (VOICE_CALL_SND_STATUS_PLAY == papp_snd->ringtone_sound_status) { @@ -299,7 +286,7 @@ gboolean __voicecall_snd_stop_alternate_sound(voicecall_snd_mgr_t *papp_snd) error = mm_sound_stop_sound(papp_snd->mmfalternateplay_handle); papp_snd->mmfalternateplay_handle = -1; papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_STOP; - CALL_ENG_DEBUG(ENG_ERR, "Alternate Ringtone Stopeed,Error Code: [0x%x] \n", error); + CALL_ENG_DEBUG(ENG_ERR, "Alternate Ringtone Stopeed,Error Code: [0x%x]", error); } papp_snd->balternate_play = FALSE; return TRUE; @@ -312,7 +299,7 @@ void __voicecall_snd_alternate_sound_cb(void *puser_data) voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)puser_data; call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; - CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->balternate_play= %d\n", papp_snd->balternate_play); + CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->balternate_play= %d", papp_snd->balternate_play); papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_STOPPED; @@ -327,15 +314,23 @@ void __voicecall_snd_alternate_sound_cb(void *puser_data) void voicecall_snd_prepare_alert(voicecall_snd_mgr_t *papp_snd, int call_handle) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; int err_code = -1; papp_snd->incoming_call_handle = call_handle; + /* Save the original volume level to reset */ + err_code = mm_sound_volume_get_value(VOLUME_TYPE_RINGTONE, (unsigned int *) &(papp_snd->org_ringtone_value)); + + if (MM_ERROR_NONE != err_code) { + CALL_ENG_DEBUG(ENG_ERR, "Get Volume Error: [0x%x]", err_code); + return; + } + if (TRUE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Alternate Sound Needs to be played \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Alternate Sound Needs to be played"); papp_snd->ringtone_sound_status = VOICE_CALL_AND_STATUS_ALTERNATE_PLAY; return; } @@ -352,117 +347,63 @@ void voicecall_snd_prepare_alert(voicecall_snd_mgr_t *papp_snd, int call_handle) papp_snd->settings_vib_status = FALSE; err_code = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &papp_snd->settings_sound_status); - CALL_ENG_DEBUG(ENG_DEBUG, "cur_sound_status = %d, error_code = %d\n", papp_snd->settings_sound_status, err_code); + CALL_ENG_DEBUG(ENG_DEBUG, "cur_sound_status = %d, error_code = %d", papp_snd->settings_sound_status, err_code); err_code = vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &papp_snd->settings_vib_status); - CALL_ENG_DEBUG(ENG_DEBUG, "cur_vib_status = %d, error_code = %d\n", papp_snd->settings_vib_status, err_code); + CALL_ENG_DEBUG(ENG_DEBUG, "cur_vib_status = %d, error_code = %d", papp_snd->settings_vib_status, err_code); if (papp_snd->settings_sound_status == FALSE) papp_snd->bmute_play = TRUE; __voicecall_snd_start_melody(papp_snd, FALSE, call_handle); - } void voicecall_snd_play_alert(voicecall_snd_mgr_t *papp_snd) { call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; - CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->ringtone_sound_status=%d \n ", papp_snd->ringtone_sound_status); + CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->ringtone_sound_status=%d", papp_snd->ringtone_sound_status); if (VOICE_CALL_AND_STATUS_ALTERNATE_PLAY == papp_snd->ringtone_sound_status) { if (TRUE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Starting Alternate Sound \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Starting Alternate Sound"); papp_snd->balternate_play_count = 0; __voicecall_snd_play_alternate_sound(papp_snd); } } if (VOICE_CALL_SND_STATUS_READY != papp_snd->ringtone_sound_status) { - CALL_ENG_DEBUG(ENG_DEBUG, " Invalid ringtone_sound_status: %d \n ", papp_snd->ringtone_sound_status); + CALL_ENG_DEBUG(ENG_DEBUG, " Invalid ringtone_sound_status: %d", papp_snd->ringtone_sound_status); return; } papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_PROCESSED; - CALL_ENG_DEBUG(ENG_DEBUG, " [##### papp_snd->settings_sound_status #####] : %d \n ", papp_snd->settings_sound_status); - CALL_ENG_DEBUG(ENG_DEBUG, " [##### papp_snd->settings_vib_status #####] : %d \n ", papp_snd->settings_vib_status); + CALL_ENG_DEBUG(ENG_DEBUG, " [##### papp_snd->settings_sound_status #####] : %d", papp_snd->settings_sound_status); + CALL_ENG_DEBUG(ENG_DEBUG, " [##### papp_snd->settings_vib_status #####] : %d", papp_snd->settings_vib_status); + + sound_manager_call_session_set_mode(papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_RINGTONE); + __voicecall_snd_play_melody(papp_snd, FALSE); - if (papp_snd->settings_sound_status) { - __voicecall_snd_play_melody(papp_snd, FALSE); - } else if (papp_snd->bmute_play) { - /*Change the path to the earjack headset and play the ringtone */ - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_MUTE_PLAY); - __voicecall_snd_play_melody(papp_snd, FALSE); - } if (papp_snd->settings_vib_status) { __voicecall_snd_start_vibration(papp_snd); } } -#ifdef VOICE_CALL_RINGTONE_ELEVATOR - -gboolean __voicecall_and_start_ring_elevator_cb(gpointer pdata) -{ - voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)pdata; - int volume_level = VOICE_CALL_VOL_LEVEL_1; - int ret_value = -1; - - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); - - /*Get the settings current ringtone volume level and set to media player */ - ret_value = vconf_get_int(VCONFKEY_SETAPPL_PROFILE_CURRENT_CALL_VOLUME_INT, &volume_level); - if (ret_value != 0) { - CALL_ENG_DEBUG(ENG_ERR, "settings read failed Error: %d\n", ret_value); - } - CALL_ENG_DEBUG(ENG_DEBUG, "Settings Volume Level = %d\n", volume_level); - - if (papp_snd->pmm_player != VOICE_CALL_SND_INVALID_PLAYER_HANDLE) { - ret_value = mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, volume_level); - if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "Set Volume Error: [0x%x]\n", ret_value); - } - } else { - CALL_ENG_DEBUG(ENG_ERR, "Invalid MM Plauer %d\n", papp_snd->pmm_player); - } - - return FALSE; -} - -void __voicecall_snd_start_ring_elevator(voicecall_snd_mgr_t *papp_snd) -{ - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); - - papp_snd->ring_elvator_timerid = g_timeout_add(VOICE_CALL_SND_RING_ELEVATOR_TIME_VAL, __voicecall_and_start_ring_elevator_cb, papp_snd); -} - -void __voicecall_snd_cancel_ring_elevator(voicecall_snd_mgr_t *papp_snd) -{ - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); - if (papp_snd->ring_elvator_timerid > 0) { - g_source_remove(papp_snd->ring_elvator_timerid); - papp_snd->ring_elvator_timerid = 0; - } -} -#endif - gboolean voicecall_snd_mute_alert(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); if (papp_snd->pmm_player != VOICE_CALL_SND_INVALID_PLAYER_HANDLE) { int ret_value = 0; ret_value = mm_player_set_mute(papp_snd->pmm_player, TRUE); - CALL_ENG_DEBUG(ENG_DEBUG, "MM Set Mute Error code: [0x%x] \n", ret_value); + CALL_ENG_DEBUG(ENG_DEBUG, "MM Set Mute Error code: [0x%x]", ret_value); } if (TRUE == papp_snd->bvibration) { - CALL_ENG_DEBUG(ENG_DEBUG, "Vibration is playing, stopping vibration \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Vibration is playing, stopping vibration"); __voicecall_snd_stop_vibration(papp_snd); } -#ifdef VOICE_CALL_RINGTONE_ELEVATOR - __voicecall_snd_cancel_ring_elevator(papp_snd); -#endif /*Make Vibration than melody flag to FALSE, so melody will not be played when it is muted */ papp_snd->bvibration_then_melody = FALSE; @@ -481,21 +422,16 @@ gboolean voicecall_snd_mute_alert(voicecall_snd_mgr_t *papp_snd) */ void voicecall_snd_stop_alert(voicecall_snd_mgr_t *papp_snd) { - - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); __voicecall_snd_stop_vibration(papp_snd); if (TRUE == __voicecall_snd_stop_alternate_sound(papp_snd)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Alternate sound stopped \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Alternate sound stopped"); return; } -#ifdef VOICE_CALL_RINGTONE_ELEVATOR - /*Stop Ring Elevator */ - __voicecall_snd_cancel_ring_elevator(papp_snd); -#endif - CALL_ENG_DEBUG(ENG_DEBUG, "pmm_player = %d \n", papp_snd->pmm_player); + CALL_ENG_DEBUG(ENG_DEBUG, "pmm_player = %d", papp_snd->pmm_player); if (papp_snd->pmm_player != VOICE_CALL_SND_INVALID_PLAYER_HANDLE) { int ret_value = 0; MMPlayerStateType mmplayer_state = MM_PLAYER_STATE_NONE; @@ -505,28 +441,34 @@ void voicecall_snd_stop_alert(voicecall_snd_mgr_t *papp_snd) mm_player_get_state(papp_snd->pmm_player, &mmplayer_state); - CALL_ENG_DEBUG(ENG_DEBUG, "Callling mmplayer_stop, current mm state = %d, Player = %d\n", mmplayer_state, papp_snd->pmm_player); + CALL_ENG_DEBUG(ENG_DEBUG, "Callling mmplayer_stop, current mm state = %d, Player = %d", mmplayer_state, papp_snd->pmm_player); if (MM_PLAYER_STATE_PLAYING == mmplayer_state || MM_PLAYER_STATE_PAUSED == mmplayer_state) { ret_value = mm_player_stop(papp_snd->pmm_player); if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "mmplayer_stop failed: [0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mmplayer_stop failed: [0x%x]", ret_value); } } - CALL_ENG_DEBUG(ENG_DEBUG, "Callling mmplayer_unrealize, Player = %d\n", papp_snd->pmm_player); + CALL_ENG_DEBUG(ENG_DEBUG, "Callling mmplayer_unrealize, Player = %d", papp_snd->pmm_player); ret_value = mm_player_unrealize(papp_snd->pmm_player); if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "mmplayer_unrealize failed: [0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mmplayer_unrealize failed: [0x%x]", ret_value); } - CALL_ENG_DEBUG(ENG_DEBUG, "Callling mmplayer_destroy, Player = %d\n", papp_snd->pmm_player); + CALL_ENG_DEBUG(ENG_DEBUG, "Callling mmplayer_destroy, Player = %d", papp_snd->pmm_player); ret_value = mm_player_destroy(papp_snd->pmm_player); if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "mmplayer_destroy failed: [0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mmplayer_destroy failed: [0x%x]", ret_value); } papp_snd->pmm_player = VOICE_CALL_SND_INVALID_PLAYER_HANDLE; papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_STOPPED; + + ret_value = mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, papp_snd->org_ringtone_value); + + if (MM_ERROR_NONE != ret_value) { + CALL_ENG_DEBUG(ENG_ERR, "Set Volume Error: [0x%x]", ret_value); + } } /* Stop All periodic Timers */ @@ -537,14 +479,15 @@ void voicecall_snd_stop_alert(voicecall_snd_mgr_t *papp_snd) papp_snd->current_playing_call_handle = -1; papp_snd->bmute_play = FALSE; + } gboolean voicecall_snd_set_play_end_callback(voicecall_snd_mgr_t *papp_snd, voicecall_snd_callback psignal_play_end_cb, gpointer psignal_play_end_cb_data) { - CALL_ENG_DEBUG(ENG_DEBUG, "signal_type = %d\n", papp_snd->signal_type); + CALL_ENG_DEBUG(ENG_DEBUG, "signal_type = %d", papp_snd->signal_type); if (VOICE_CALL_SND_STATUS_NONE == papp_snd->signal_sound_status) { - CALL_ENG_DEBUG(ENG_DEBUG, "No Signal Being Played\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "No Signal Being Played"); return FALSE; } @@ -562,13 +505,13 @@ gboolean voicecall_snd_set_play_end_callback(voicecall_snd_mgr_t *papp_snd, voic */ gboolean voicecall_snd_is_signal_playing(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "Signal Sound Status : [%d] \n", papp_snd->signal_sound_status); + CALL_ENG_DEBUG(ENG_DEBUG, "Signal Sound Status : [%d]", papp_snd->signal_sound_status); if ((papp_snd->pmm_signal_player != VOICE_CALL_SND_INVALID_SND_HANDLE) && (VOICE_CALL_SND_STATUS_PLAY == papp_snd->signal_sound_status)) { - CALL_ENG_DEBUG(ENG_DEBUG, "Signal is playing \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Signal is playing"); return TRUE; } - CALL_ENG_DEBUG(ENG_DEBUG, "Signal is not playing \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Signal is not playing"); return FALSE; } @@ -576,10 +519,10 @@ gboolean voicecall_snd_play_signal(voicecall_snd_mgr_t *papp_snd, voicecall_snd_ { int ret_value = 0; - CALL_ENG_DEBUG(ENG_DEBUG, "signal_type = %d\n", papp_snd->signal_type); + CALL_ENG_DEBUG(ENG_DEBUG, "signal_type = %d", papp_snd->signal_type); if (VOICE_CALL_SIGNAL_NONE == papp_snd->signal_type) { - CALL_ENG_DEBUG(ENG_DEBUG, "No Signal Type Assinged\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "No Signal Type Assinged"); return FALSE; } @@ -591,30 +534,30 @@ gboolean voicecall_snd_play_signal(voicecall_snd_mgr_t *papp_snd, voicecall_snd_ /*Set status, the signal play is being prepared */ papp_snd->signal_sound_status = VOICE_CALL_SND_STATUS_READY; - CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->signal_sound_status = %d\n", papp_snd->signal_sound_status); + CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->signal_sound_status = %d", papp_snd->signal_sound_status); papp_snd->psignal_play_end_cb = psignal_play_end_cb; papp_snd->psignal_play_end_cb_data = psignal_play_end_cb_data; if (TRUE == voicecall_snd_is_effect_playing(papp_snd)) { - CALL_ENG_DEBUG(ENG_ERR, "Stopping effect tone to play signal \n "); + CALL_ENG_DEBUG(ENG_ERR, "Stopping effect tone to play signal"); voicecall_snd_stop_effect_tone(papp_snd); } - CALL_ENG_DEBUG(ENG_ERR, "Changing path to play signal\n "); - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_SIGNAL_TONE); - CALL_ENG_DEBUG(ENG_ERR, "Changing path to play signal Over\n "); + CALL_ENG_DEBUG(ENG_ERR, "Changing path to play signal"); + sound_manager_call_session_set_mode(papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_MEDIA); + CALL_ENG_DEBUG(ENG_ERR, "Changing path to play signal Over"); - CALL_ENG_DEBUG(ENG_DEBUG, "signal_tone = %s\n", papp_snd->signal_tone); + CALL_ENG_DEBUG(ENG_DEBUG, "signal_tone = %s", papp_snd->signal_tone); ret_value = mm_sound_play_sound(papp_snd->signal_tone, VOLUME_TYPE_CALL, __voicecall_snd_mmplayer_signal_cb, papp_snd, &papp_snd->pmm_signal_player); if (MM_ERROR_NONE != ret_value) { papp_snd->signal_sound_status = VOICE_CALL_SND_STATUS_NONE; - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_play_sound failed,Error: [0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mm_sound_play_sound failed,Error: [0x%x]", ret_value); } else { - CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->pmm_signal_player[%d]\n", papp_snd->pmm_signal_player); + CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->pmm_signal_player[%d]", papp_snd->pmm_signal_player); papp_snd->signal_sound_status = VOICE_CALL_SND_STATUS_PLAY; } - CALL_ENG_DEBUG(ENG_DEBUG, "Signal Play Started, Sound Status is: %d\n", papp_snd->signal_sound_status); + CALL_ENG_DEBUG(ENG_DEBUG, "Signal Play Started, Sound Status is: %d", papp_snd->signal_sound_status); return TRUE; } @@ -629,18 +572,18 @@ void voicecall_snd_stop_signal(voicecall_snd_mgr_t *papp_snd) { int ret_value = 0; - CALL_ENG_DEBUG(ENG_DEBUG, "Sound Status: %d, papp_snd->pmm_signal_player(%d)\n", papp_snd->signal_sound_status, papp_snd->pmm_signal_player); + CALL_ENG_DEBUG(ENG_DEBUG, "Sound Status: %d, papp_snd->pmm_signal_player(%d)", papp_snd->signal_sound_status, papp_snd->pmm_signal_player); if (papp_snd->pmm_signal_player != VOICE_CALL_SND_INVALID_SND_HANDLE) { if (VOICE_CALL_SND_STATUS_PLAY == papp_snd->signal_sound_status) { papp_snd->signal_sound_status = VOICE_CALL_SND_STATUS_STOPPED; - CALL_ENG_DEBUG(ENG_DEBUG, "Stopping Signal Sound \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Stopping Signal Sound"); ret_value = mm_sound_stop_sound(papp_snd->pmm_signal_player); if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_stop_sound failed: [0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mm_sound_stop_sound failed: [0x%x]", ret_value); } } else { - CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play Over / Already Stopped \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play Over / Already Stopped"); } papp_snd->pmm_signal_player = VOICE_CALL_SND_INVALID_SND_HANDLE; } @@ -650,7 +593,7 @@ void voicecall_snd_stop_signal(voicecall_snd_mgr_t *papp_snd) papp_snd->psignal_play_end_cb_data = NULL; } - CALL_ENG_DEBUG(ENG_DEBUG, "Application Sound Status:%d \n", papp_snd->signal_sound_status); + CALL_ENG_DEBUG(ENG_DEBUG, "Application Sound Status:%d", papp_snd->signal_sound_status); } /** @@ -664,7 +607,7 @@ void voicecall_snd_set_signal_type(voicecall_snd_mgr_t *papp_snd, voicecall_snd_ { char signal_tone[VOICE_CALL_SND_RINGTONE_PATH_LEN]; - CALL_ENG_DEBUG(ENG_DEBUG, "Signal Type: %d\n", signal_type); + CALL_ENG_DEBUG(ENG_DEBUG, "Signal Type: %d", signal_type); memset(signal_tone, 0, sizeof(signal_tone)); @@ -687,7 +630,7 @@ void voicecall_snd_set_signal_type(voicecall_snd_mgr_t *papp_snd, voicecall_snd_ } break; default: - CALL_ENG_DEBUG(ENG_ERR, "Invalid Signal Type \n"); + CALL_ENG_DEBUG(ENG_ERR, "Invalid Signal Type"); break; } @@ -699,9 +642,8 @@ static void __voicecall_snd_get_voice_path(voicecall_snd_mgr_t *papp_snd, int *v { voicecall_audio_path_t tmp_audio_path; -#ifdef _NEW_SND_ - CALL_ENG_DEBUG(ENG_DEBUG, "current path = %d\n", voicecall_snd_get_path_status(papp_snd)); - + CALL_ENG_DEBUG(ENG_DEBUG, "current path = %d", voicecall_snd_get_path_status(papp_snd)); + switch (voicecall_snd_get_path_status(papp_snd)) { case VOICE_CALL_SND_PATH_BT: { @@ -713,181 +655,69 @@ static void __voicecall_snd_get_voice_path(voicecall_snd_mgr_t *papp_snd, int *v tmp_audio_path = VC_AUDIO_PATH_SPK_PHONE; } break; - case VOICE_CALL_SND_PATH_EARJACK: - { - tmp_audio_path = VC_AUDIO_PATH_HEADSET; - } - break; - case VOICE_CALL_SND_PATH_RECEIVER: + case VOICE_CALL_SND_PATH_RECEIVER_EARJACK: default: { - tmp_audio_path = VC_AUDIO_PATH_HANDSET; + if (_voicecall_dvc_get_earjack_connected() == TRUE) + tmp_audio_path = VC_AUDIO_PATH_HEADSET; + else + tmp_audio_path = VC_AUDIO_PATH_HANDSET; } } -#else - CALL_ENG_DEBUG(ENG_DEBUG, "Headset Status = %d\n", papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_HEADSET]); - CALL_ENG_DEBUG(ENG_DEBUG, "Loud Speaker Status = %d\n", papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_SPEAKER]); - - /*Priority is given to Headset, incase both loudspeaker and headset is enabled */ - if (TRUE == papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_HEADSET]) { - tmp_audio_path = VC_AUDIO_PATH_BLUETOOTH; - } else if (TRUE == papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_SPEAKER]) { - tmp_audio_path = VC_AUDIO_PATH_SPK_PHONE; - } else if (TRUE == papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_EARJACK]) { - tmp_audio_path = VC_AUDIO_PATH_HEADSET; - } else { - tmp_audio_path = VC_AUDIO_PATH_HANDSET; - } -#endif *voice_snd_path = tmp_audio_path; - CALL_ENG_DEBUG(ENG_DEBUG, "voice_snd_path = %d\n", *voice_snd_path); + CALL_ENG_DEBUG(ENG_DEBUG, "voice_snd_path = %d", *voice_snd_path); } -void voicecall_snd_change_mm_path(voicecall_snd_mgr_t *papp_snd, voicecall_snd_mm_path_type_t mm_path_type) +void voicecall_snd_change_mm_path(voicecall_snd_mgr_t *papp_snd) { - call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; - voicecall_engine_t *pcall_engine = pcall_core->pcall_engine; - int in_path = 0; - int out_path = 0; - int gain_type = 0; - int mm_error = 0; - int option_field = MM_SOUND_PATH_OPTION_AUTO_HEADSET_CONTROL; + sound_route_e route = 0; - CALL_ENG_DEBUG(ENG_DEBUG, "mm_path_type = %d\n", mm_path_type); - CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->current_path_type = %d\n", papp_snd->current_path_type); + CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->current_path_type = %d", papp_snd->current_path_type); -#ifdef _NEW_SND_ switch (voicecall_snd_get_path_status(papp_snd)) { case VOICE_CALL_SND_PATH_BT: - { - out_path = MM_SOUND_PATH_BTHEADSET; - in_path = MM_SOUND_PATH_BTMIC; - } + CALL_ENG_DEBUG(ENG_DEBUG, "route path : SOUND_ROUTE_INOUT_BLUETOOTH"); + route = SOUND_ROUTE_INOUT_BLUETOOTH; break; + case VOICE_CALL_SND_PATH_SPEAKER: - { - out_path = MM_SOUND_PATH_SPK; - in_path = MM_SOUND_PATH_MIC; - option_field = MM_SOUND_PATH_OPTION_NONE; - } + CALL_ENG_DEBUG(ENG_DEBUG, "route path : SOUND_ROUTE_IN_MIC_OUT_SPEAKER"); + route = SOUND_ROUTE_IN_MIC_OUT_SPEAKER; break; - case VOICE_CALL_SND_PATH_EARJACK: - case VOICE_CALL_SND_PATH_RECEIVER: - default: - { - out_path = MM_SOUND_PATH_RECV; - in_path = MM_SOUND_PATH_MIC; - } - break; - } - -#else - /*Define OutPath */ - if (TRUE == papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_HEADSET]) { - out_path = MM_SOUND_PATH_BTHEADSET; - } else if (TRUE == papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_SPEAKER]) { - out_path = MM_SOUND_PATH_SPK; - option_field = MM_SOUND_PATH_OPTION_NONE; - } else { /*Normal Phone Reciever */ - - out_path = MM_SOUND_PATH_RECV; - } - if (TRUE == papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_HEADSET]) { - in_path = MM_SOUND_PATH_BTMIC; - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "Don't off the MIC. Mute only modem\n"); - in_path = MM_SOUND_PATH_MIC; - } -#endif - - CALL_ENG_DEBUG(ENG_DEBUG, "Out Path = %d, In Path = %d \n", out_path, in_path); - - /* This patch is required : if voice path is not reset, - * the volume played for ringtone and signal tone will not be audible enough to hear - */ - if ((VOICE_CALL_MM_VOICE == papp_snd->current_path_type) && ((VOICE_CALL_MM_RING_TONE == mm_path_type) || (VOICE_CALL_MM_SIGNAL_TONE == mm_path_type))) { - CALL_ENG_DEBUG(ENG_DEBUG, "Resetting Voice Path before changing to some other path \n"); - } - - /*Define Gain Type */ - switch (mm_path_type) { - case VOICE_CALL_MM_ALERT_TONE: - { - gain_type = MM_SOUND_GAIN_CALLTONE; - in_path = MM_SOUND_PATH_NONE; - } - break; - case VOICE_CALL_MM_SECOND_CALL_TONE: - { - /* MMFW sound request. always set it. */ - gain_type = MM_SOUND_GAIN_KEYTONE; /* In case of earjack inserting, during second call */ - in_path = MM_SOUND_PATH_NONE; - } - break; - case VOICE_CALL_MM_RING_TONE: + case VOICE_CALL_SND_PATH_RECEIVER_EARJACK: + default: { - int io_state = VC_INOUT_STATE_NONE; - - gain_type = MM_SOUND_GAIN_RINGTONE; - in_path = MM_SOUND_PATH_NONE; - option_field = MM_SOUND_PATH_OPTION_SPEAKER_WITH_HEADSET; - - voicecall_core_get_engine_state(pcall_engine, &io_state); - if ((voicecall_core_is_incoming_call_exists(pcall_engine)) && (io_state != VC_INOUT_STATE_INCOME_END)) { - out_path = MM_SOUND_PATH_SPK; + if (_voicecall_dvc_get_earjack_connected() == TRUE) { + if (sound_manager_is_route_available (MM_SOUND_ROUTE_INOUT_HEADSET)) { + CALL_ENG_DEBUG(ENG_DEBUG, "route path : MM_SOUND_ROUTE_INOUT_HEADSET"); + route = MM_SOUND_ROUTE_INOUT_HEADSET; + } else if (sound_manager_is_route_available (SOUND_ROUTE_IN_MIC_OUT_HEADPHONE)) { + route = SOUND_ROUTE_IN_MIC_OUT_HEADPHONE; + CALL_ENG_DEBUG(ENG_DEBUG, "route path : SOUND_ROUTE_IN_MIC_OUT_HEADPHONE"); + } else { + route = SOUND_ROUTE_IN_MIC_OUT_RECEIVER; + } + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "route path : SOUND_ROUTE_IN_MIC_OUT_RECEIVER"); + route = SOUND_ROUTE_IN_MIC_OUT_RECEIVER; } } break; - case VOICE_CALL_MM_MUTE_PLAY: - { - gain_type = MM_SOUND_GAIN_RINGTONE; - in_path = MM_SOUND_PATH_NONE; - out_path = MM_SOUND_PATH_HEADSET; - } - break; - case VOICE_CALL_MM_RESET: - { - gain_type = MM_SOUND_GAIN_VOICECALL; - in_path = MM_SOUND_PATH_NONE; - out_path = MM_SOUND_PATH_NONE; - } - break; - case VOICE_CALL_MM_SIGNAL_TONE: - { - gain_type = MM_SOUND_GAIN_CALLTONE; - in_path = MM_SOUND_PATH_NONE; - } - break; - case VOICE_CALL_MM_RECORD: - { - gain_type = MM_SOUND_GAIN_VOICECALL; - } - break; - case VOICE_CALL_MM_VOICE: - { - gain_type = MM_SOUND_GAIN_VOICECALL; - } - break; - default: - CALL_ENG_DEBUG(ENG_DEBUG, "Invalid MM Path Type: %d\n", mm_path_type); } + CALL_ENG_DEBUG(ENG_ERR, "route = 0x04X", route); if (papp_snd->bsound_cm_state == TRUE) { - CALL_ENG_DEBUG(ENG_DEBUG, "mm_sound_set_path- Gain:[%d],OutPath:[%d],InPath:[%d],option:[%d] \n", gain_type, out_path, in_path, option_field); - CALL_ENG_KPI("mm_sound_set_path start"); - mm_error = mm_sound_set_path(gain_type, out_path, in_path, option_field); + CALL_ENG_DEBUG(ENG_ERR, "sound_manager_set_active_route [0x%X]", route); + sound_manager_set_active_route(route); + CALL_ENG_KPI("mm_sound_set_path done"); - if (mm_error != MM_ERROR_NONE) { - CALL_ENG_DEBUG(ENG_ERR, "MM Path Change Failed,mm_error = [0x%x]\n", mm_error); - } - papp_snd->current_path_type = mm_path_type; + papp_snd->current_path_type = VOICE_CALL_MM_VOICE; } else { - CALL_ENG_DEBUG(ENG_ERR, "** we can't change mm path. check it. **** \n"); + CALL_ENG_DEBUG(ENG_ERR, "** we can't change mm path. check it. ****"); } - } /** @@ -898,11 +728,10 @@ void voicecall_snd_change_mm_path(voicecall_snd_mgr_t *papp_snd, voicecall_snd_m */ void voicecall_snd_change_path(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); CALL_ENG_KPI("voicecall_snd_change_path start"); call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; -#ifdef _NEW_SND_ if (voicecall_snd_get_path_status(papp_snd) == VOICE_CALL_SND_PATH_BT) { int bt_sco_status = 0; @@ -910,19 +739,19 @@ void voicecall_snd_change_path(voicecall_snd_mgr_t *papp_snd) if (FALSE == bt_sco_status) { gboolean bevent_wait = FALSE; - CALL_ENG_DEBUG(ENG_ERR, "BT Sco is OFF, request BT for path change\n"); + CALL_ENG_DEBUG(ENG_ERR, "BT Sco is OFF, request BT for path change"); bevent_wait = voicecall_core_get_status(pcall_core, CALL_VC_CORE_FLAG_BT_EVENT_WAITING); if (FALSE == bevent_wait) { /*Request BT for change path to headset */ _vc_bt_request_switch_headset_path(pcall_core, TRUE); } else { - CALL_ENG_DEBUG(ENG_ERR, "bevent_wait = %d, waiting for BT Event \n", bevent_wait); + CALL_ENG_DEBUG(ENG_ERR, "bevent_wait = %d, waiting for BT Event", bevent_wait); } } else { - CALL_ENG_DEBUG(ENG_DEBUG, "BT SCO is open, Change the path to sync with BT Path\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "BT SCO is open, Change the path to sync with BT Path"); voicecall_snd_change_path_real(papp_snd); } - }else { + } else { CALL_ENG_DEBUG(ENG_DEBUG, "new PATH is not BT."); gboolean bevent_wait = FALSE; @@ -931,57 +760,33 @@ void voicecall_snd_change_path(voicecall_snd_mgr_t *papp_snd) /*Request BT for change path to headset */ voicecall_snd_change_path_real(papp_snd); } else { - CALL_ENG_DEBUG(ENG_ERR, "bevent_wait = %d, waiting for BT Event \n", bevent_wait); + CALL_ENG_DEBUG(ENG_ERR, "bevent_wait = %d, waiting for BT Event", bevent_wait); } } -#else - if ((TRUE == _vc_bt_is_bt_connected(pcall_core)) - && (TRUE == papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_HEADSET])) { - - int bt_sco_status = 0; - - bt_sco_status = _vc_bt_get_bt_sco_status(); - if (FALSE == bt_sco_status) { - gboolean bevent_wait = FALSE; - - CALL_ENG_DEBUG(ENG_ERR, "BT Sco is OFF, request BT for path change\n"); - bevent_wait = voicecall_core_get_status(pcall_core, CALL_VC_CORE_FLAG_BT_EVENT_WAITING); - if (FALSE == bevent_wait) { - /*Request BT for change path to headset */ - _vc_bt_request_switch_headset_path(pcall_core, TRUE); - } else { - CALL_ENG_DEBUG(ENG_ERR, "bevent_wait = %d, waiting for BT Event \n", bevent_wait); - } - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "BT SCO is open, Change the path to sync with BT Path\n"); - voicecall_snd_change_path_real(papp_snd); - } - } else if ((TRUE == _vc_bt_is_bt_connected(pcall_core)) && (TRUE == voicecall_core_get_status(pcall_core, CALL_VC_CORE_FLAG_ACCEPT_BY_BT))) { - /*Request BT for change path to headset, actual voice path will be changed in the response from BT */ - CALL_ENG_DEBUG(ENG_ERR, "Headset Connected Call is accepted by BT, requesting BT to change path\n"); - _vc_bt_request_switch_headset_path(pcall_core, TRUE); - } else { - CALL_ENG_DEBUG(ENG_DEBUG, "No Headset connected/Headset connected call accepted by Phone, Normal Path Change..\n"); - voicecall_snd_change_path_real(papp_snd); - } -#endif CALL_ENG_KPI("voicecall_snd_change_path done"); - } void voicecall_snd_change_path_real(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + sound_call_session_mode_e current_session_mode; + CALL_ENG_DEBUG(ENG_DEBUG, ".."); /* Change the mm sound path */ - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_VOICE); + sound_manager_call_session_get_mode(papp_snd->psnd_session, ¤t_session_mode); + + CALL_ENG_DEBUG(ENG_ERR, "current session mode = %d..", current_session_mode); + if (current_session_mode != SOUND_CALL_SESSION_MODE_VOICE) { + sound_manager_call_session_set_mode(papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_VOICE); + } else { + voicecall_snd_change_mm_path(papp_snd); + } voicecall_snd_change_modem_path(papp_snd); } void voicecall_snd_change_modem_path(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; int audio_path = VC_AUDIO_PATH_HANDSET; @@ -989,8 +794,8 @@ void voicecall_snd_change_modem_path(voicecall_snd_mgr_t *papp_snd) /* Change the tapi sound path */ __voicecall_snd_get_voice_path(papp_snd, &audio_path); - if (FALSE == voicecall_core_change_audio_path(pcall_core->pcall_engine, audio_path)) { - CALL_ENG_DEBUG(ENG_ERR, "TAPI Audio Change Path ERROR \n"); + if (FALSE == voicecall_core_change_audio_path(pcall_core->pcall_engine, audio_path, papp_snd->bextra_volume_status)) { + CALL_ENG_DEBUG(ENG_ERR, "TAPI Audio Change Path ERROR"); } } @@ -1004,11 +809,11 @@ void voicecall_snd_change_modem_path(voicecall_snd_mgr_t *papp_snd) */ void voicecall_snd_set_status(voicecall_snd_mgr_t *papp_snd, voicecall_snd_audio_type_t snd_audio_type, gboolean status) { - CALL_ENG_DEBUG(ENG_DEBUG, "snd_audio_type:[%d], status:[%d]\n", snd_audio_type, status); + CALL_ENG_DEBUG(ENG_DEBUG, "snd_audio_type:[%d], status:[%d]", snd_audio_type, status); /*if BT headset is connected , switch off loud speaker - it will be reflectd in the next sound path change */ - if (((VOICE_CALL_AUDIO_HEADSET == snd_audio_type) || (VOICE_CALL_AUDIO_EARJACK == snd_audio_type)) && (TRUE == status)) { - CALL_ENG_DEBUG(ENG_DEBUG, "loud speaker status is to be FALSE\n"); + if (((VOICE_CALL_AUDIO_HEADSET == snd_audio_type) || (VOICE_CALL_AUDIO_RECEIVER_EARJACK == snd_audio_type)) && (TRUE == status)) { + CALL_ENG_DEBUG(ENG_DEBUG, "loud speaker status is to be FALSE"); papp_snd->bcall_audio_status[VOICE_CALL_AUDIO_SPEAKER] = FALSE; } papp_snd->bcall_audio_status[snd_audio_type] = status; @@ -1023,11 +828,10 @@ void voicecall_snd_set_status(voicecall_snd_mgr_t *papp_snd, voicecall_snd_audio */ gboolean voicecall_snd_get_status(voicecall_snd_mgr_t *papp_snd, voicecall_snd_audio_type_t snd_audio_type) { - CALL_ENG_DEBUG(ENG_DEBUG, "Status[%d] = %d \n", snd_audio_type, papp_snd->bcall_audio_status[snd_audio_type]); + CALL_ENG_DEBUG(ENG_DEBUG, "Status[%d] = %d", snd_audio_type, papp_snd->bcall_audio_status[snd_audio_type]); return papp_snd->bcall_audio_status[snd_audio_type]; } -#ifdef _NEW_SND_ /** * This function sets the status of the given call audio type * @@ -1038,7 +842,7 @@ gboolean voicecall_snd_get_status(voicecall_snd_mgr_t *papp_snd, voicecall_snd_a */ void voicecall_snd_set_path_status(voicecall_snd_mgr_t *papp_snd, voicecall_snd_path_t path) { - CALL_ENG_DEBUG(ENG_DEBUG, "current path:[%d], new path:[%d]\n", papp_snd->current_snd_path, path); + CALL_ENG_DEBUG(ENG_DEBUG, "current path:[%d], new path:[%d]", papp_snd->current_snd_path, path); papp_snd->old_snd_path = papp_snd->current_snd_path; papp_snd->current_snd_path = path; @@ -1046,11 +850,10 @@ void voicecall_snd_set_path_status(voicecall_snd_mgr_t *papp_snd, voicecall_snd_ voicecall_snd_path_t voicecall_snd_get_path_status(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "old path:[%d], current path:[%d]\n", papp_snd->old_snd_path, papp_snd->current_snd_path); + CALL_ENG_DEBUG(ENG_DEBUG, "old path:[%d], current path:[%d]", papp_snd->old_snd_path, papp_snd->current_snd_path); return papp_snd->current_snd_path; } -#endif /** * This function sets the volume level for the given volume alert type @@ -1062,7 +865,7 @@ voicecall_snd_path_t voicecall_snd_get_path_status(voicecall_snd_mgr_t *papp_snd */ void voicecall_snd_set_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volume_alert_type_t vol_alert_type, int volume_level) { - CALL_ENG_DEBUG(ENG_DEBUG, "volume_level = %d \n", volume_level); + CALL_ENG_DEBUG(ENG_DEBUG, "volume_level = %d", volume_level); call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; switch (vol_alert_type) { @@ -1072,7 +875,7 @@ void voicecall_snd_set_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volum int volume; if (VOICE_CALL_SND_INVALID_PLAYER_HANDLE == papp_snd->pmm_player) { - CALL_ENG_DEBUG(ENG_ERR, "Invalid MM Player Handle \n"); + CALL_ENG_DEBUG(ENG_ERR, "Invalid MM Player Handle"); return; } @@ -1083,11 +886,8 @@ void voicecall_snd_set_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volum ret_value = mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, volume); if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "mmplayer_set_volume failed Error: [0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mmplayer_set_volume failed Error: [0x%x]", ret_value); } -#ifdef VOICE_CALL_RINGTONE_ELEVATOR - __voicecall_snd_cancel_ring_elevator(papp_snd); -#endif } break; case VOICE_CALL_VOL_TYPE_VOICE: @@ -1109,7 +909,7 @@ void voicecall_snd_set_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volum /* MODEM want to get volume level as 0~5, not a 1~6. So pass -1 value */ if (FALSE == voicecall_core_set_audio_volume(pcall_core->pcall_engine, audio_path, (incall_vol_level-1))) { - CALL_ENG_DEBUG(ENG_DEBUG, "voicecall_doc_set_audio_volume failed\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "voicecall_doc_set_audio_volume failed"); } } break; @@ -1117,11 +917,11 @@ void voicecall_snd_set_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volum { int bt_vol_level = 0; if (TRUE == voicecall_core_get_status(pcall_core, CALL_VC_CORE_FLAG_VOL_CHNGD_BYBT)) { - CALL_ENG_DEBUG(ENG_DEBUG, "BT Requested Volume flag is enabled, not sending response \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "BT Requested Volume flag is enabled, not sending response"); voicecall_core_set_status(pcall_core, CALL_VC_CORE_FLAG_VOL_CHNGD_BYBT, FALSE); } else { bt_vol_level = volume_level; - CALL_ENG_DEBUG(ENG_DEBUG, "bt_vol_level = %d\n", bt_vol_level); + CALL_ENG_DEBUG(ENG_DEBUG, "bt_vol_level = %d", bt_vol_level); _vc_bt_send_response_to_bt(pcall_core, BT_AG_RES_SPK_GAIN, bt_vol_level, NULL); } @@ -1129,7 +929,7 @@ void voicecall_snd_set_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volum } break; default: - CALL_ENG_DEBUG(ENG_DEBUG, "No Actions Defined for the volume alert type: %d \n", vol_alert_type); + CALL_ENG_DEBUG(ENG_DEBUG, "No Actions Defined for the volume alert type: %d", vol_alert_type); } } @@ -1143,7 +943,7 @@ void voicecall_snd_set_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volum */ int voicecall_snd_get_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volume_alert_type_t vol_alert_type) { - CALL_ENG_DEBUG(ENG_DEBUG, "\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ""); call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; switch (vol_alert_type) { @@ -1154,10 +954,10 @@ int voicecall_snd_get_volume(voicecall_snd_mgr_t *papp_snd, voicecall_snd_volume ret_val = mm_sound_volume_get_value(VOLUME_TYPE_RINGTONE, &volume); if (MM_ERROR_NONE != ret_val) { - CALL_ENG_DEBUG(ENG_DEBUG, "ret_val = [0x%x]\n", ret_val); + CALL_ENG_DEBUG(ENG_DEBUG, "ret_val = [0x%x]", ret_val); return VC_INVALID_VOLUME; } - CALL_ENG_DEBUG(ENG_DEBUG, "MM Volume Level : %d\n", volume); + CALL_ENG_DEBUG(ENG_DEBUG, "MM Volume Level : %d", volume); return volume; @@ -1190,28 +990,30 @@ static gboolean __voicecall_snd_start_melody(voicecall_snd_mgr_t *papp_snd, gboo { char *setting_file_path = NULL; char ringtone_path[VOICE_CALL_SND_RINGTONE_PATH_LEN] = { 0, }; - call_vc_call_objectinfo_t callobject_info; - voicecall_contact_info_t ct_info; - - call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; - CALL_ENG_DEBUG(ENG_DEBUG, "call_handle = %d\n", call_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "call_handle = %d", call_handle); - CALL_ENG_DEBUG(ENG_DEBUG, "Contact ring_tone_path = [%s]\n", papp_snd->ring_tone); + CALL_ENG_DEBUG(ENG_DEBUG, "Contact ring_tone_path = [%s]", papp_snd->ring_tone); if (strlen(papp_snd->ring_tone) <= 0) { setting_file_path = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR); +#ifdef DRM_USED + if ((setting_file_path == NULL) || (strlen(setting_file_path) <= 0) || + (FALSE == g_file_test(setting_file_path, G_FILE_TEST_EXISTS)) || + (FALSE == voicecall_util_is_valid_drm_file(setting_file_path, DRM_PERMISSION_PLAY))) +#else if ((setting_file_path == NULL) || (strlen(setting_file_path) <= 0) || (FALSE == g_file_test(setting_file_path, G_FILE_TEST_EXISTS))) +#endif { - CALL_ENG_DEBUG(ENG_ERR, "setting ring tone path is invalid : [%s]\n", setting_file_path); + CALL_ENG_DEBUG(ENG_ERR, "setting ring tone path is invalid : [%s]", setting_file_path); /*snprintf(ringtone_path, sizeof(ringtone_path), "file://%s", VOICE_CALL_SND_DEFAULT_RINGTONE_PATH);*/ - return; + return FALSE; } else { snprintf(ringtone_path, sizeof(ringtone_path), "file://%s", setting_file_path); } - CALL_ENG_DEBUG(ENG_DEBUG, "Ringtone From Settings : %s\n", ringtone_path); + CALL_ENG_DEBUG(ENG_DEBUG, "Ringtone From Settings : %s", ringtone_path); _vc_core_util_strcpy(papp_snd->ring_tone, sizeof(papp_snd->ring_tone), ringtone_path); } @@ -1219,6 +1021,9 @@ static gboolean __voicecall_snd_start_melody(voicecall_snd_mgr_t *papp_snd, gboo papp_snd->pmm_player = VOICE_CALL_SND_INVALID_PLAYER_HANDLE; __voicecall_snd_create_player(papp_snd, &papp_snd->pmm_player, VOICE_CALL_PLAY_TYPE_RINGTONE); + /*Set Volume */ + __voicecall_snd_set_mm_volume(papp_snd, bis_increasing); + papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_READY; return TRUE; @@ -1230,20 +1035,20 @@ static gboolean __voicecall_snd_create_player(voicecall_snd_mgr_t *papp_snd, MMH MMMessageCallback callback = NULL; char *mmf_error = NULL; - CALL_ENG_DEBUG(ENG_DEBUG, "Start..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Start.."); if (*pPlayer != VOICE_CALL_SND_INVALID_SND_HANDLE) { - CALL_ENG_DEBUG(ENG_DEBUG, "Player = %d \n", *pPlayer); + CALL_ENG_DEBUG(ENG_DEBUG, "Player = %d", *pPlayer); mm_player_destroy(*pPlayer); *pPlayer = VOICE_CALL_SND_INVALID_SND_HANDLE; } ret_value = mm_player_create(pPlayer); if (MM_ERROR_NONE != ret_value || *pPlayer == VOICE_CALL_SND_INVALID_SND_HANDLE) { - CALL_ENG_DEBUG(ENG_ERR, "mmplayer_create failed , Error:[0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mmplayer_create failed , Error:[0x%x]", ret_value); return FALSE; } - CALL_ENG_DEBUG(ENG_DEBUG, "*pPlayer: %d\n", *pPlayer); + CALL_ENG_DEBUG(ENG_DEBUG, "*pPlayer: %d", *pPlayer); switch (play_type) { /*Set the MM Player Attributes according to the Display Priority Type */ @@ -1265,41 +1070,70 @@ static gboolean __voicecall_snd_create_player(voicecall_snd_mgr_t *papp_snd, MMH ret_value = mm_player_realize(*pPlayer); if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "mmplayer_realize failed , Error:[0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "mmplayer_realize failed , Error:[0x%x]", ret_value); return FALSE; } - CALL_ENG_DEBUG(ENG_DEBUG, "Finish..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Finish.."); return TRUE; } +static void __voicecall_snd_set_mm_volume(voicecall_snd_mgr_t *papp_snd, int bis_increasing) +{ +#ifdef _VOL_LEVEL_FROM_SETTINGS_ + int ret_value = 0; + int set_volume_level = VOICE_CALL_VOL_LEVEL_1; + int volume_val; + + CALL_ENG_DEBUG(ENG_DEBUG, ".."); + + /*Get the settings current ringtone volume level and set to media player */ + if (FALSE == vconf_get_int(VCONFKEY_SETAPPL_CALL_RINGTONE_SOUND_VOLUME_INT, &set_volume_level)) { + CALL_ENG_DEBUG(ENG_ERR, "settings read failed Error: %d", ret_value); + } + CALL_ENG_DEBUG(ENG_DEBUG, "Settings Volume Level = %d", set_volume_level); + + if (set_volume_level > 0) { + if (TRUE == bis_increasing) { + papp_snd->increment_melody_value = set_volume_level = 1; + } + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "Increasing melody not set to VOICE_CALL_VOL_LEVEL_1"); + } + + volume_val = set_volume_level; + ret_value = mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, volume_val); + if (MM_ERROR_NONE != ret_value) { + CALL_ENG_DEBUG(ENG_ERR, "Set Volume Error: [0x%x]", ret_value); + } else { + CALL_ENG_DEBUG(ENG_DEBUG, "Final Volume Set to [%d]", volume_val); + } +#endif +} + static gboolean __voicecall_snd_play_melody(voicecall_snd_mgr_t *papp_snd, gboolean bis_increasing) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); if (strlen(papp_snd->ring_tone) > 0) { int mm_error = MM_ERROR_NONE; mm_error = mm_player_start(papp_snd->pmm_player); if (MM_ERROR_NONE != mm_error) { - CALL_ENG_DEBUG(ENG_ERR, "mm_player_start failed,Error: [0x%x]\n", mm_error); + CALL_ENG_DEBUG(ENG_ERR, "mm_player_start failed,Error: [0x%x]", mm_error); } else { if (TRUE == bis_increasing) { papp_snd->bincreasingmelody = TRUE; g_timeout_add(VOICE_CALL_SND_INCREMENT_TIMER_INTERVAL, __voicecall_snd_increasing_melody_cb, (gpointer) papp_snd); - } else { -#ifdef VOICE_CALL_RINGTONE_ELEVATOR - CALL_ENG_DEBUG(ENG_DEBUG, "Starting Ringtone Elevator\n"); - /*Start only when the volume is not incremental volume */ - __voicecall_snd_start_ring_elevator(papp_snd); -#endif } + CALL_ENG_DEBUG(ENG_DEBUG, "ringtone_sound_status : %d", papp_snd->ringtone_sound_status); + papp_snd->ringtone_sound_status = VOICE_CALL_SND_STATUS_PLAY; return TRUE; } } else { - CALL_ENG_DEBUG(ENG_ERR, "Ringtone is empty(Problem) \n"); + CALL_ENG_DEBUG(ENG_ERR, "Ringtone is empty(Problem)"); } return FALSE; @@ -1309,14 +1143,14 @@ static int __voicecall_snd_mmplayer_cb(int message, void *data, void *user_data) { voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)user_data; if (VOICE_CALL_SND_STATUS_PLAY != papp_snd->ringtone_sound_status) { - CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play stopped by application, callback not handled \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play stopped by application, callback not handled"); return FALSE; } switch (message) { case MM_MESSAGE_END_OF_STREAM: { - CALL_ENG_DEBUG(ENG_DEBUG, "Ringtone loop count is supported by MMF , need not restart the ringtone \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Ringtone loop count is supported by MMF , need not restart the ringtone"); } break; default: @@ -1330,12 +1164,12 @@ gboolean __voicecall_snd_mmplayer_signal_end_callback_idle_cb(gpointer pdata) { voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)pdata; - CALL_ENG_DEBUG(ENG_DEBUG, " \n"); + CALL_ENG_DEBUG(ENG_DEBUG, ""); /*Callback needs to be called, only when the tone is played completely and it is ended if the signal is explictly stopped, don't call the user callback */ if (papp_snd->psignal_play_end_cb != NULL) { - CALL_ENG_DEBUG(ENG_DEBUG, "Calling user callback \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Calling user callback"); papp_snd->psignal_play_end_cb(papp_snd->psignal_play_end_cb_data); papp_snd->psignal_play_end_cb = NULL; papp_snd->psignal_play_end_cb_data = NULL; @@ -1348,10 +1182,10 @@ static void __voicecall_snd_mmplayer_signal_cb(gpointer puser_data) { voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)puser_data; - CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play Over \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play Over"); if (papp_snd->signal_sound_status != VOICE_CALL_SND_STATUS_PLAY) { - CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play already stopped by application \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Sound Play already stopped by application"); return; } @@ -1367,14 +1201,10 @@ static gboolean __voicecall_snd_increasing_melody_cb(void *data) int set_volume_level = VOICE_CALL_VOL_LEVEL_1; if (FALSE == papp_snd->bincreasingmelody) { - CALL_ENG_DEBUG(ENG_DEBUG, "Already Deactivated\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Already Deactivated"); return FALSE; } - if (FALSE == vconf_get_int(VCONFKEY_SETAPPL_PROFILE_CURRENT_CALL_VOLUME_INT, &set_volume_level)) { - CALL_ENG_DEBUG(ENG_ERR, "settings read failed Error: %d\n", ret_value); - } - if ((set_volume_level != 0) && (papp_snd->increment_melody_value <= set_volume_level)) { int volume_val; @@ -1384,19 +1214,19 @@ static gboolean __voicecall_snd_increasing_melody_cb(void *data) ret_value = mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, volume_val); if (MM_ERROR_NONE != ret_value) { - CALL_ENG_DEBUG(ENG_ERR, "Set Volume Error: [0x%x]\n", ret_value); + CALL_ENG_DEBUG(ENG_ERR, "Set Volume Error: [0x%x]", ret_value); } - CALL_ENG_DEBUG(ENG_DEBUG, "Increasing Melody Continuing, Current Increased Melody : %d\n", papp_snd->increment_melody_value); + CALL_ENG_DEBUG(ENG_DEBUG, "Increasing Melody Continuing, Current Increased Melody : %d", papp_snd->increment_melody_value); if (papp_snd->increment_melody_value >= set_volume_level) { - CALL_ENG_DEBUG(ENG_DEBUG, "Increasing Melody Ended\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Increasing Melody Ended"); return FALSE; } return TRUE; } - CALL_ENG_DEBUG(ENG_DEBUG, "Increasing Melody Ended\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Increasing Melody Ended"); return FALSE; } @@ -1404,7 +1234,7 @@ static void __voicecall_snd_start_vibration(voicecall_snd_mgr_t *papp_snd) { /*First Stop the previous Vibration and then start it again */ - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); int vib_type = -1; int vib_level = -1; int haptic_vib_type = -1; @@ -1413,18 +1243,18 @@ static void __voicecall_snd_start_vibration(voicecall_snd_mgr_t *papp_snd) papp_snd->vibration_handle = device_haptic_open(DEV_IDX_0, 0); - CALL_ENG_DEBUG(ENG_DEBUG, "srart vibration device_handle=%d \n", papp_snd->vibration_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "srart vibration device_handle=%d", papp_snd->vibration_handle); if (papp_snd->vibration_handle < 0) { - CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_open error \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_open error"); return; } if (vconf_get_int(VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT, &vib_type)) { - CALL_ENG_DEBUG(ENG_ERR, "VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT vconf_get_bool failed.\n"); + CALL_ENG_DEBUG(ENG_ERR, "VCONFKEY_SETAPPL_CALL_VIBRATION_PATTERN_INT vconf_get_bool failed."); } if (vconf_get_int(VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT, &vib_level)) { - CALL_ENG_DEBUG(ENG_ERR, "VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT vconf_get_bool failed.\n"); + CALL_ENG_DEBUG(ENG_ERR, "VCONFKEY_SETAPPL_NOTI_VIBRATION_LEVEL_INT vconf_get_bool failed."); } if (vib_level > 5) @@ -1445,11 +1275,11 @@ static void __voicecall_snd_start_vibration(voicecall_snd_mgr_t *papp_snd) break; } if (device_haptic_play_pattern(papp_snd->vibration_handle, haptic_vib_type, 255, vib_level)) { - CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_play_pattern error \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_play_pattern error"); return; } if (device_haptic_play_monotone(papp_snd->vibration_handle, 60000)) { - CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_play_monotone error \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_play_monotone error"); return; } @@ -1457,51 +1287,20 @@ static void __voicecall_snd_start_vibration(voicecall_snd_mgr_t *papp_snd) } -static gboolean __voicecall_snd_vib_then_melody_cb(void *data) -{ - voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)data; - call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; - - __voicecall_snd_stop_vibration(papp_snd); - - if (FALSE == papp_snd->bvibration_then_melody) { - return FALSE; - } - - if (FALSE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) { - - int ret_value = -1; - int set_volume_level = 0; - int volume_val; - - vconf_get_int(VCONFKEY_SETAPPL_PROFILE_CURRENT_CALL_VOLUME_INT, &set_volume_level); - - volume_val = set_volume_level; - - ret_value = mm_sound_volume_set_value(VOLUME_TYPE_RINGTONE, volume_val); - - CALL_ENG_DEBUG(ENG_ERR, "__voicecall_snd_vib_then_melody_cb() : volume = %d\n", volume_val); - - __voicecall_snd_play_melody(papp_snd, FALSE); - } - - return FALSE; -} - static void __voicecall_snd_stop_vibration(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_DEBUG, "..\n"); + CALL_ENG_DEBUG(ENG_DEBUG, ".."); if (TRUE == papp_snd->bvibration) { - CALL_ENG_DEBUG(ENG_DEBUG, "Stopping Vibration , handle=%d \n", papp_snd->vibration_handle); + CALL_ENG_DEBUG(ENG_DEBUG, "Stopping Vibration , handle=%d", papp_snd->vibration_handle); if (device_haptic_stop_play(papp_snd->vibration_handle)) { - CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_play_stop error \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_play_stop error"); return; } if (device_haptic_close(papp_snd->vibration_handle)) { - CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_close error \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "device_haptic_close error"); return; } @@ -1509,7 +1308,7 @@ static void __voicecall_snd_stop_vibration(voicecall_snd_mgr_t *papp_snd) papp_snd->bvibration = FALSE; } else { - CALL_ENG_DEBUG(ENG_DEBUG, "bvibration is not enabled.\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "bvibration is not enabled."); } } @@ -1527,7 +1326,7 @@ void voicecall_snd_route_change_cb(void *data, system_audio_route_t policy) if (policy != SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP) { error_code = mm_sound_route_set_system_policy(SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP); if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_route_set_system_policy failed. error_code:[0x%x]\n", error_code); + CALL_ENG_DEBUG(ENG_ERR, "mm_sound_route_set_system_policy failed. error_code:[0x%x]", error_code); } } } @@ -1542,32 +1341,14 @@ void voicecall_snd_register_cm(voicecall_snd_mgr_t *papp_snd) { int error_code = 0; - CALL_ENG_DEBUG(ENG_DEBUG, "current bsound_cm_state:[%d]. \n", papp_snd->bsound_cm_state); + CALL_ENG_DEBUG(ENG_DEBUG, "current bsound_cm_state:[%d].", papp_snd->bsound_cm_state); if (FALSE == papp_snd->bsound_cm_state) { - CALL_ENG_KPI("mm_session_init start"); - error_code = mm_session_init(MM_SESSION_TYPE_CALL); - CALL_ENG_KPI("mm_session_init done"); - if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_session_init failed. error_code:[0x%x]\n", error_code); - return; - } - error_code = mm_sound_route_get_system_policy(&papp_snd->backup_route_policy); + error_code = sound_manager_call_session_create(SOUND_SESSION_TYPE_CALL, &papp_snd->psnd_session); if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_route_get_system_policy failed. error_code:[0x%x]\n", error_code); + CALL_ENG_DEBUG(ENG_ERR, "sound_manager_call_session_create failed. error_code:[0x%x]", error_code); return; } - error_code = mm_sound_route_set_system_policy(SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP); - if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_route_set_system_policy failed. error_code:[0x%x]\n", error_code); - return; - } - error_code = mm_sound_route_add_change_callback(voicecall_snd_route_change_cb, NULL); - if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_route_add_change_callback failed. error_code:[0x%x]\n", error_code); - return; - } - papp_snd->bsound_cm_state = TRUE; } return; @@ -1583,27 +1364,17 @@ void voicecall_snd_unregister_cm(voicecall_snd_mgr_t *papp_snd) { int error_code = 0; - CALL_ENG_DEBUG(ENG_DEBUG, "current bsound_cm_state:[%d]. \n", papp_snd->bsound_cm_state); + CALL_ENG_DEBUG(ENG_DEBUG, "current bsound_cm_state:[%d].", papp_snd->bsound_cm_state); if (TRUE == papp_snd->bsound_cm_state) { /*Reset the Path when the app is closed - safety code */ - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_RESET); - CALL_ENG_DEBUG(ENG_DEBUG, "Sound Path reset to Default\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Sound Path reset to Default"); papp_snd->bsound_cm_state = FALSE; - CALL_ENG_DEBUG(ENG_DEBUG, "Unregistering Sound CM\n"); - error_code = mm_session_finish(); - if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_session_finish failed. error_code:[0x%x]\n", error_code); - } - error_code = mm_sound_route_remove_change_callback(); - if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_route_remove_change_callback failed. error_code:[0x%x]\n", error_code); - } - error_code = mm_sound_route_set_system_policy(papp_snd->backup_route_policy); + error_code = sound_manager_call_session_destroy(papp_snd->psnd_session); if (error_code) { - CALL_ENG_DEBUG(ENG_ERR, "mm_sound_route_set_system_policy failed. error_code:[0x%x]\n", error_code); + CALL_ENG_DEBUG(ENG_ERR, "sound_manager_call_session_destroy failed. error_code:[0x%x]", error_code); } } /*Set to Defaults */ @@ -1617,23 +1388,23 @@ gboolean __voicecall_snd_effect_idle_cb(gpointer puser_data) call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; papp_snd->effect_tone_status = VOICE_CALL_SND_STATUS_NONE; - CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->effect_tone_status = %d\n", papp_snd->effect_tone_status); + CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd->effect_tone_status = %d", papp_snd->effect_tone_status); /*If connected call exists then change the audio path */ if ((TRUE == voicecall_core_is_connected_call_exist(pcall_core->pcall_engine)) || (TRUE == voicecall_core_is_outgoing_call_exists(pcall_core->pcall_engine))) { - CALL_ENG_DEBUG(ENG_DEBUG, "Connected call exists, changing path at the end of effect tone \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Connected call exists, changing path at the end of effect tone"); - CALL_ENG_DEBUG(ENG_ERR, "papp_snd->signal_sound_status = %d \n", papp_snd->signal_sound_status); + CALL_ENG_DEBUG(ENG_ERR, "papp_snd->signal_sound_status = %d", papp_snd->signal_sound_status); /*Check the signal play status, if signal is being prepared / played, don't change the path */ if (VOICE_CALL_SND_STATUS_NONE == papp_snd->signal_sound_status) { voicecall_snd_change_path(papp_snd); } else { - CALL_ENG_DEBUG(ENG_ERR, "Signal is playing, skipping path change, it will be done at the end of signal \n"); + CALL_ENG_DEBUG(ENG_ERR, "Signal is playing, skipping path change, it will be done at the end of signal"); } } else { - CALL_ENG_DEBUG(ENG_DEBUG, "non connected call\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "non connected call"); } - CALL_ENG_DEBUG(ENG_DEBUG, "Over\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Over"); return FALSE; } @@ -1641,11 +1412,11 @@ static void __voicecall_snd_effect_cb(gpointer puser_data) { voicecall_snd_mgr_t *papp_snd = (voicecall_snd_mgr_t *)puser_data; - CALL_ENG_DEBUG(ENG_DEBUG, "effect_tone_status = %d, Calling Idle\n", papp_snd->effect_tone_status); + CALL_ENG_DEBUG(ENG_DEBUG, "effect_tone_status = %d, Calling Idle", papp_snd->effect_tone_status); papp_snd->effect_tone_status = VOICE_CALL_SND_STATUS_STOPPED; __voicecall_snd_effect_idle_cb(papp_snd); - CALL_ENG_DEBUG(ENG_DEBUG, "End : papp_snd->effect_tone_status = %d\n", papp_snd->effect_tone_status); + CALL_ENG_DEBUG(ENG_DEBUG, "End : papp_snd->effect_tone_status = %d", papp_snd->effect_tone_status); } gboolean voicecall_snd_play_effect_tone(voicecall_snd_mgr_t *papp_snd, int effect_type) @@ -1655,7 +1426,7 @@ gboolean voicecall_snd_play_effect_tone(voicecall_snd_mgr_t *papp_snd, int effec gboolean bstatus = FALSE; call_vc_core_state_t *pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; - CALL_ENG_DEBUG(ENG_DEBUG, "effect type:[%d] \n", effect_type); + CALL_ENG_DEBUG(ENG_DEBUG, "effect type:[%d]", effect_type); switch (effect_type) { case VOICE_CALL_SND_EFFECT_CALL_CONNECT: @@ -1665,23 +1436,23 @@ gboolean voicecall_snd_play_effect_tone(voicecall_snd_mgr_t *papp_snd, int effec CALL_ENG_KPI("voicecall_core_get_zuhause done"); if (bzuhause == TRUE) { - CALL_ENG_DEBUG(ENG_DEBUG, "It's zuhause area! don't play connect tone!\n"); + CALL_ENG_DEBUG(ENG_DEBUG, "It's zuhause area! don't play connect tone!"); return FALSE; } CALL_ENG_KPI("get VCONFKEY_CISSAPPL_CALL_CONNECT_TONE_BOOL start"); if (vconf_get_bool(VCONFKEY_CISSAPPL_CALL_CONNECT_TONE_BOOL, &bstatus)) { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed.\n"); + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed."); } CALL_ENG_KPI("get VCONFKEY_CISSAPPL_CALL_CONNECT_TONE_BOOL done"); if (!bstatus) { - CALL_ENG_DEBUG(ENG_DEBUG, "Connect Tone Settings not enabled \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Connect Tone Settings not enabled"); return FALSE; } /*First Reset the audio Path to PDA */ - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_ALERT_TONE); + sound_manager_call_session_set_mode(papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_MEDIA); error_code = mm_sound_play_sound(VOICE_CALL_SND_CONNECT_SIGNAL_PATH, VOLUME_TYPE_CALL, __voicecall_snd_effect_cb, papp_snd, &papp_snd->mmfsoundplay_handle); } @@ -1690,15 +1461,15 @@ gboolean voicecall_snd_play_effect_tone(voicecall_snd_mgr_t *papp_snd, int effec { if (vconf_get_bool(VCONFKEY_CISSAPPL_CALL_END_TONE_BOOL, &bstatus)) { - CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed.\n"); + CALL_ENG_DEBUG(ENG_ERR, "vconf_get_bool failed."); } if (!bstatus) { - CALL_ENG_DEBUG(ENG_DEBUG, "Disconnect Tone Settings not enabled \n"); + CALL_ENG_DEBUG(ENG_DEBUG, "Disconnect Tone Settings not enabled"); return FALSE; } - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_ALERT_TONE); + sound_manager_call_session_set_mode(papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_MEDIA); error_code = mm_sound_play_sound(VOICE_CALL_SND_DISCONNECT_SIGNAL_PATH, VOLUME_TYPE_CALL, __voicecall_snd_effect_cb, papp_snd, &papp_snd->mmfsoundplay_handle); @@ -1707,13 +1478,13 @@ gboolean voicecall_snd_play_effect_tone(voicecall_snd_mgr_t *papp_snd, int effec case VOICE_CALL_SND_EFFECT_CALL_MINUTE_MINDER: { - voicecall_snd_change_mm_path(papp_snd, VOICE_CALL_MM_ALERT_TONE); + sound_manager_call_session_set_mode(papp_snd->psnd_session, SOUND_CALL_SESSION_MODE_MEDIA); error_code = mm_sound_play_sound(VOICE_CALL_SND_MINUTE_MINDER_SIGNAL_PATH, VOLUME_TYPE_CALL, __voicecall_snd_effect_cb, papp_snd, &papp_snd->mmfsoundplay_handle); } break; default: - CALL_ENG_DEBUG(ENG_DEBUG, "Invalid Effect Type: %d \n", effect_type); + CALL_ENG_DEBUG(ENG_DEBUG, "Invalid Effect Type: %d", effect_type); } @@ -1721,13 +1492,13 @@ gboolean voicecall_snd_play_effect_tone(voicecall_snd_mgr_t *papp_snd, int effec papp_snd->effect_tone_status = VOICE_CALL_SND_STATUS_PLAY; } - CALL_ENG_DEBUG(ENG_DEBUG, "error code = [0x%x] \n", error_code); + CALL_ENG_DEBUG(ENG_DEBUG, "error code = [0x%x]", error_code); return (MM_ERROR_NONE == error_code) ? TRUE : FALSE; } gboolean voicecall_snd_is_effect_playing(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_ERR, "Effect tone status: %d\n", papp_snd->effect_tone_status); + CALL_ENG_DEBUG(ENG_ERR, "Effect tone status: %d", papp_snd->effect_tone_status); if (VOICE_CALL_SND_STATUS_PLAY == papp_snd->effect_tone_status) { return TRUE; } @@ -1737,24 +1508,24 @@ gboolean voicecall_snd_is_effect_playing(voicecall_snd_mgr_t *papp_snd) void voicecall_snd_stop_effect_tone(voicecall_snd_mgr_t *papp_snd) { - CALL_ENG_DEBUG(ENG_ERR, "Effect tone status: %d\n", papp_snd->effect_tone_status); + CALL_ENG_DEBUG(ENG_ERR, "Effect tone status: %d", papp_snd->effect_tone_status); if (VOICE_CALL_SND_STATUS_PLAY == papp_snd->effect_tone_status) { if (MM_ERROR_NONE != mm_sound_stop_sound(papp_snd->mmfsoundplay_handle)) { - CALL_ENG_DEBUG(ENG_ERR, "MM Stop Sound Failed \n"); + CALL_ENG_DEBUG(ENG_ERR, "MM Stop Sound Failed"); } papp_snd->effect_tone_status = VOICE_CALL_SND_STATUS_NONE; papp_snd->mmfsoundplay_handle = VOICE_CALL_SND_INVALID_SND_HANDLE; } - CALL_ENG_DEBUG(ENG_ERR, "Effect tone status: %d\n", papp_snd->effect_tone_status); + CALL_ENG_DEBUG(ENG_ERR, "Effect tone status: %d", papp_snd->effect_tone_status); } void voicecall_snd_set_to_defaults(voicecall_snd_mgr_t *papp_snd) { call_vc_core_state_t *pcall_core = NULL; - CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd = %p \n", papp_snd); + CALL_ENG_DEBUG(ENG_DEBUG, "papp_snd = %p", papp_snd); /*Backup core handle */ pcall_core = (call_vc_core_state_t *)papp_snd->pcall_core; diff --git a/debian/README b/debian/README deleted file mode 100755 index 1aea91c..0000000 --- a/debian/README +++ /dev/null @@ -1,6 +0,0 @@ -The Debian Package call ----------------------------- - -Comments regarding the Package - - -- unknown Tue, 17 Nov 2009 09:51:48 +0900 diff --git a/debian/changelog b/debian/changelog deleted file mode 100755 index 423071f..0000000 --- a/debian/changelog +++ /dev/null @@ -1,9 +0,0 @@ -call (0.2.333) unstable; urgency=low - - * 1. Apply EFL migration change - 2. Update bilerplate - 3. Support appsvc mo call - * Git: pkgs/c/call - * Tag: call_0.2.333 - - -- Jungmin Kim Fri, 17 Feb 2012 21:14:16 +0900 diff --git a/debian/compat b/debian/compat deleted file mode 100755 index 7ed6ff8..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/debian/control b/debian/control deleted file mode 100755 index 229a680..0000000 --- a/debian/control +++ /dev/null @@ -1,42 +0,0 @@ -Source: call -Section: comm -Priority: extra -Maintainer: Sung Joon Won , SHUAIB SHUKUR , Goo Lee -Uploaders: Sung Joon Won , SHUAIB SHUKUR , JongSeok Lee , Yountaek Oh , Goo Lee -Build-Depends: debhelper (>= 5), - autotools-dev, - libappcore-efl-dev, - libelm-dev, - libslp-tapi-dev, - libslp-setting-dev, - libcontacts-service-dev, - libui-gadget-dev, - libslp-utilx-dev, - libmm-sound-dev, - libmm-player-dev, - libslp-pm-dev, - libaul-1-dev, - libdevman-haptic-dev, - libmm-camcorder-dev, - libmm-session-dev, - dlog-dev, - libslp-sensor-0, - libslp-sysman, - libslp-msg-service-dev, - libicu-dev, - libappsvc-dev, - libnotification-dev, - libug-contacts-dev (>= 0.1.0-31), -Standards-Version: 3.7.2 - -Package: org.tizen.call -Section: comm -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: call application - -Package: org.tizen.call-dbg -Section: comm -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: call application (unstripped) diff --git a/debian/copyright b/debian/copyright deleted file mode 100755 index e69de29..0000000 diff --git a/debian/dirs b/debian/dirs deleted file mode 100755 index ca882bb..0000000 --- a/debian/dirs +++ /dev/null @@ -1,2 +0,0 @@ -usr/bin -usr/sbin diff --git a/debian/docs b/debian/docs deleted file mode 100755 index 7a77580..0000000 --- a/debian/docs +++ /dev/null @@ -1,2 +0,0 @@ -CMakeCache.txt -CMakeLists.txt diff --git a/debian/org.tizen.call.install.in b/debian/org.tizen.call.install.in deleted file mode 100755 index d693a62..0000000 --- a/debian/org.tizen.call.install.in +++ /dev/null @@ -1,4 +0,0 @@ -@PREFIX@/bin/* -@PREFIX@/res/* -@PREFIX@/data -/opt/share/applications/* diff --git a/debian/org.tizen.call.postinst b/debian/org.tizen.call.postinst deleted file mode 100755 index 8c2fa75..0000000 --- a/debian/org.tizen.call.postinst +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -if [ ${USER} == "root" ] -then - # 5000 is inhouse user id - # do not use relative path - chown -R 5000:5000 /opt/apps/org.tizen.call/data - /usr/bin/vconftool set -t int "memory/call/state" "0" -g 6521 -i - /usr/bin/vconftool set -t int "db/call/vol_level" "4" -g 6521 -else - /usr/bin/vconftool set -t int "memory/call/state" "0" -i -fi - diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 2de8e30..0000000 --- a/debian/rules +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -CFLAGS ?= -Wall -g -CXXFLAGS ?= -Wall -g -LDFLAGS ?= -PREFIX ?= /opt/apps/org.tizen.call -RESDIR ?= ${PREFIX}/res -DATADIR ?= ${PREFIX}/data - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 - CXXFLAGS += -O0 -else - CFLAGS += -O2 - CXXFLAGS += -O2 -endif - -CFLAGS += -fPIC -CXXFLAGS += -fPIC - -LDFLAGS += -Wl,--rpath=$(/PREFIX)/lib -Wl,--hash-style=both -Wl,--as-needed - -CMAKE_TMP_DIR = $(CURDIR)/cmake_tmp - - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - mkdir -p $(CMAKE_TMP_DIR); - cd $(CMAKE_TMP_DIR); CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX=$(PREFIX) - - touch configure-stamp - -build: build-stamp - -build-stamp: configure-stamp - dh_testdir - - # Add here commands to compile the package. - cd $(CMAKE_TMP_DIR) && $(MAKE) - #docbook-to-man debian/wavplayer.sgml > wavplayer.1 - - for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ - cat $$f > $${f%.in}; \ - sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ - sed -i -e "s#@PREFIX@#$(RESDIR)#g" $${f%.in}; \ - sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ - done - - - touch $@ - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - - # Add here commands to clean up after the build process. - -cd $(CMAKE_TMP_DIR) && $(MAKE) clean - rm -rf $(CMAKE_TMP_DIR) - - rm -rf CMakeCache.txt - rm -rf CMakeFiles - rm -rf cmake_install.cmake - rm -rf Makefile - rm -rf install_manifest.txt - - rm -rf daemon/CMakeFiles - rm -rf daemon/cmake_install.cmake - rm -rf daemon/Makefile - rm -rf daemon/install_manifest.txt - - rm -rf ui/CMakeFiles - rm -rf ui/cmake_install.cmake - rm -rf ui/Makefile - rm -rf ui/install_manifest.txt - - rm -rf ui/*.edj - rm -rf ui/themes/*.edj - - rm -rf ui/po/CMakeFiles - rm -rf ui/po/cmake_install.cmake - rm -rf ui/po/Makefile - - rm -rf ui/org.tizen.call.desktop - - rm -rf cmake_tmp - - - - for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ - rm -f $${f%.in}; \ - done - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/wavplayer. - cd $(CMAKE_TMP_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot -# dh_installchangelogs -# dh_installdocs -# dh_installexamples - dh_install --sourcedir=debian/tmp -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_python -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link -# dh_strip - dh_strip --dbg-package=org.tizen.call-dbg - dh_compress - dh_fixperms -# dh_perl - dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/packaging/org.tizen.call.spec b/packaging/org.tizen.call.spec old mode 100644 new mode 100755 index 030f352..b3d6a96 --- a/packaging/org.tizen.call.spec +++ b/packaging/org.tizen.call.spec @@ -1,9 +1,9 @@ Name: org.tizen.call Summary: call application -Version: 0.2.333 +Version: 0.2.380 Release: 1 -Group: Applications -License: Flora Software License +Group: comm +License: Flora Software License Source0: %{name}-%{version}.tar.gz BuildRequires: pkgconfig(appcore-efl) BuildRequires: pkgconfig(elementary) @@ -15,7 +15,7 @@ BuildRequires: pkgconfig(sensor) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(aul) BuildRequires: pkgconfig(contacts-service) -BuildRequires: pkgconfig(ui-gadget) +BuildRequires: pkgconfig(ui-gadget-1) BuildRequires: pkgconfig(tapi) BuildRequires: pkgconfig(mm-sound) BuildRequires: pkgconfig(mm-camcorder) @@ -27,8 +27,15 @@ BuildRequires: pkgconfig(ecore-x) BuildRequires: pkgconfig(ecore-input) BuildRequires: pkgconfig(icu-i18n) BuildRequires: pkgconfig(appsvc) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(notification) -BuildRequires: libug-contacts-devel +BuildRequires: pkgconfig(phone-misc) +BuildRequires: pkgconfig(minicontrol-provider) +BuildRequires: pkgconfig(capi-media-sound-manager) +BuildRequires: pkgconfig(dbus-1) +BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: libug-contacts-devel BuildRequires: cmake BuildRequires: gettext-tools BuildRequires: edje-tools @@ -41,8 +48,8 @@ call application. %prep %setup -q -%build +%build %define PREFIX "/opt/apps/org.tizen.call" cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX} @@ -54,13 +61,18 @@ rm -rf %{buildroot} %make_install %post -/usr/bin/vconftool set -t int "memory/call/state" "0" -g 6521 -i -/usr/bin/vconftool set -t int "db/call/vol_level" "4" -g 6521 +# 5000 is inhouse user id +# do not use relative path chown -R 5000:5000 /opt/apps/org.tizen.call/data +/usr/bin/vconftool set -t int memory/call/state "0" -g 6521 -i +/usr/bin/vconftool set -t int "db/call/vol_level" "4" -g 6521 %files -/opt/apps/org.tizen.call/bin/* -/opt/apps/org.tizen.call/res/* -/opt/share/applications/org.tizen.call.desktop -%dir /opt/apps/org.tizen.call/data - +%defattr(-,root,root,-) +/opt/apps/org.tizen.call/bin/voice-call-ui +/opt/apps/org.tizen.call/res/edje/*.edj +/opt/apps/org.tizen.call/res/images/*.png +/opt/apps/org.tizen.call/res/locale/*/LC_MESSAGES/voice-call-ui.mo +/opt/apps/org.tizen.call/res/media/*.wav +/opt/share/packages/org.tizen.call.xml +/opt/share/icons/default/small/org.tizen.call.png diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt index 9c7d4bc..e012b36 100755 --- a/ui/CMakeLists.txt +++ b/ui/CMakeLists.txt @@ -11,34 +11,34 @@ SET(UI_SRCS ../call-engine/core/vc-core-engine-group.c ../call-engine/core/vc-core-svcall.c ../call-engine/core/vc-core-tapi-rqst.c + ../call-engine/core/vc-core-ecc.c ../call-engine/voice-call-core.c ../call-engine/voice-call-sound.c ../call-engine/voice-call-service.c ../call-engine/voice-call-device.c ../call-engine/voice-call-bt.c ../call-engine/voice-call-engine.c - ../call-engine/voice-call-dbus.c - vcui-application.c - vcui-app-window.c - vcui-view-choice.c - vcui-engine-interface.c - vcui-document.c - vcui-view-dialing.c - vcui-view-incoming.c - vcui-view-incoming-lock.c - vcui-view-keypad.c - vcui-view-elements.c - vcui-view-common.c - vcui-view-single-call.c - vcui-view-multi-call-split.c - vcui-view-multi-call-conf.c - vcui-view-multi-call-list.c - vcui-view-popup.c - vcui-doc-launch.c - vcui-view-callend.c - ) - -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ../call-engine/include ../call-engine/core/include) + ../call-engine/voice-call-dbus.c + ./src/vcui-application.c + ./src/vcui-app-window.c + ./src/vcui-view-choice.c + ./src/vcui-document.c + ./src/vcui-view-dialing.c + ./src/vcui-view-incoming-lock.c + ./src/vcui-view-keypad.c + ./src/vcui-view-elements.c + ./src/vcui-view-common.c + ./src/vcui-view-single-call.c + ./src/vcui-view-multi-call-split.c + ./src/vcui-view-multi-call-conf.c + ./src/vcui-view-multi-call-list.c + ./src/vcui-view-popup.c + ./src/vcui-doc-launch.c + ./src/vcui-view-callend.c + ./src/vcui-view-quickpanel.c #_QUICKPANNEL_SUPPORT_ +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ../call-engine/include ../call-engine/core/include ./src/include) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(BINDIR "${PREFIX}/bin") @@ -63,18 +63,17 @@ ADD_DEFINITIONS("-DCALL_DEBUG_ON_DLOG") ADD_DEFINITIONS("-DSWAP_SUPPORT") ADD_DEFINITIONS("-DCALL_VC_SEND_SAT_RESPONSE_ORIG") ADD_DEFINITIONS("-DRELEASE_ALL_AND_ACCEPT_SUPPORT") -ADD_DEFINITIONS("-DVC_ENG_FDN_SUPPORT") + +# for SOUND # for debuging -#ADD_DEFINITIONS("-DTIMER_ENABLED") #ADD_DEFINITIONS("-DVOICECALL_KPI") #ADD_DEFINITIONS("-DCALLDETAILS_DUMP") #for UI -ADD_DEFINITIONS("-DEND_KEY_PROCESSING") +#ADD_DEFINITIONS("-DSEND_END_TO_UG") ADD_DEFINITIONS("-DPDIAL_SEND_DTMF") -#ADD_DEFINITIONS("-DBG") -ADD_DEFINITIONS("-D_NEW_SND_") +ADD_DEFINITIONS("-D_QUICKPANNEL_SUPPORT_") ADD_DEFINITIONS("-DSIGNAL_HANDLER") INCLUDE(FindPkgConfig) @@ -82,15 +81,17 @@ pkg_check_modules(ui_pkgs REQUIRED appcore-efl vconf utilX + phone-misc alsa pmapi sensor dlog aul contacts-service - ui-gadget + ui-gadget-1 tapi contacts-service + capi-media-sound-manager mm-sound mm-camcorder mm-player @@ -108,6 +109,9 @@ pkg_check_modules(ui_pkgs REQUIRED icu-i18n appsvc notification + minicontrol-provider + dbus-1 + dbus-glib-1 ) @@ -128,7 +132,7 @@ ADD_DEFINITIONS("-DIMGDIR=\"${IMGDIR}\"") ADD_DEFINITIONS("-DMEDIADIR=\"${MEDIADIR}\"") ADD_EXECUTABLE(voice-call-ui ${UI_SRCS}) -TARGET_LINK_LIBRARIES(voice-call-ui "-pie" ${ui_pkgs_LDFLAGS}) +TARGET_LINK_LIBRARIES(voice-call-ui "-pie" "-ldl" ${ui_pkgs_LDFLAGS}) message(${ui_pkgs_LDFLAGS}) ADD_CUSTOM_TARGET(voice-call-ui.edj @@ -153,11 +157,12 @@ INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/themes/call_theme.edj DESTINATION ${ED # install ini file ( not used) #INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/voice-call-ui.ini DESTINATION share/process-info) -# install desktop file & icon +# install manifest file & icon SET(PREFIX ${CMAKE_INSTALL_PREFIX}) -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/org.tizen.call.desktop.in ${CMAKE_CURRENT_SOURCE_DIR}/org.tizen.call.desktop) -INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/org.tizen.call.desktop DESTINATION /opt/share/applications) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/org.tizen.call.xml DESTINATION /opt/share/packages) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/org.tizen.call.png DESTINATION /opt/share/icons/default/small) INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/images/hd/icon/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.png") +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/images/hd/landscape/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.png") INSTALL(DIRECTORY ../call-engine/sounds/ DESTINATION ${MEDIADIR} FILES_MATCHING PATTERN "*.wav") # install application HOME directory diff --git a/ui/call_edc/vcui-view-button-layout.edc b/ui/call_edc/vcui-view-button-layout.edc new file mode 100644 index 0000000..fc9b1c8 --- /dev/null +++ b/ui/call_edc/vcui-view-button-layout.edc @@ -0,0 +1,260 @@ +/* + * 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. + */ + +group{ + name: "separator-layout"; + parts{ + part { name: "background"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 153; + } + } + + part { name: "top_horiz_sep"; + type: RECT; + description { + state: "default" 0.0; + min: 0 1; + rel1 { relative: 0 0; offset: 0 -1; to: "background";} + rel2 { relative: 1 0; to: "background";} + color: 80 80 80 192; + } + } + + part { name: "topline_left_vert_1"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 1 1; + rel1 { relative: TOPLINE_LEFT_VERT_SEP_1_L TOPLINE_LEFT_VERT_SEP_1_T; to: "background";} + rel2 { relative: TOPLINE_LEFT_VERT_SEP_1_R TOPLINE_LEFT_VERT_SEP_1_B; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "topline_left_vert_2"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 1 1; + rel1 { relative: TOPLINE_LEFT_VERT_SEP_2_L TOPLINE_LEFT_VERT_SEP_2_T; to: "background";} + rel2 { relative: TOPLINE_LEFT_VERT_SEP_2_R TOPLINE_LEFT_VERT_SEP_2_B; to: "background";} + color: 35 33 31 255; + } + } + + part { name: "topline_right_vert_1"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: TOPLINE_RIGHT_VERT_SEP_1_L TOPLINE_RIGHT_VERT_SEP_1_T; to: "background";} + rel2 { relative: TOPLINE_RIGHT_VERT_SEP_1_R TOPLINE_RIGHT_VERT_SEP_1_B; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "topline_right_vert_2"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: TOPLINE_RIGHT_VERT_SEP_2_L TOPLINE_RIGHT_VERT_SEP_2_T; to: "background";} + rel2 { relative: TOPLINE_RIGHT_VERT_SEP_2_R TOPLINE_RIGHT_VERT_SEP_2_B; to: "background";} + color: 35 33 31 255; + } + } + + part { name: "topline_horiz_sep_1"; + type: RECT; + description { + state: "default" 0.0; + min: 0 1; + rel1 { relative: TOPLINE_HORIZ_SEP_1_L TOPLINE_HORIZ_SEP_1_T; to: "background";} + rel2 { relative: TOPLINE_HORIZ_SEP_1_R TOPLINE_HORIZ_SEP_1_B; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "topline_horiz_sep_2"; + type: RECT; + description { + state: "default" 0.0; + min: 0 1; + rel1 { relative: TOPLINE_HORIZ_SEP_2_L TOPLINE_HORIZ_SEP_2_T; to: "background";} + rel2 { relative: TOPLINE_HORIZ_SEP_2_R TOPLINE_HORIZ_SEP_2_B; to: "background";} + color: 35 33 31 255; + } + } + + part { name: "botline_left_vert_1"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: BOTLINE_LEFT_VERT_SEP_1_L BOTLINE_LEFT_VERT_SEP_1_T; to: "background";} + rel2 { relative: BOTLINE_LEFT_VERT_SEP_1_R BOTLINE_LEFT_VERT_SEP_1_B; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "botline_left_vert_2"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: BOTLINE_LEFT_VERT_SEP_2_L BOTLINE_LEFT_VERT_SEP_2_T; to: "background";} + rel2 { relative: BOTLINE_LEFT_VERT_SEP_2_R BOTLINE_LEFT_VERT_SEP_2_B; to: "background";} + color: 35 33 31 255; + } + } + + part { name: "botline_right_vert_1"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: BOTLINE_RIGHT_VERT_SEP_1_L BOTLINE_RIGHT_VERT_SEP_1_T; to: "background";} + rel2 { relative: BOTLINE_RIGHT_VERT_SEP_1_R BOTLINE_RIGHT_VERT_SEP_1_B; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "botline_right_vert_2"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: BOTLINE_RIGHT_VERT_SEP_2_L BOTLINE_RIGHT_VERT_SEP_2_T; to: "background";} + rel2 { relative: BOTLINE_RIGHT_VERT_SEP_2_R BOTLINE_RIGHT_VERT_SEP_2_B; to: "background";} + color: 35 33 31 255; + } + } + + part { name: "botline_horiz_sep_1"; + type: RECT; + description { + state: "default" 0.0; + min: 0 1; + rel1 { relative: BOTLINE_HORIZ_SEP_1_L BOTLINE_HORIZ_SEP_1_T; to: "background";} + rel2 { relative: BOTLINE_HORIZ_SEP_1_R BOTLINE_HORIZ_SEP_1_B; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "botline_horiz_sep_2"; + type: RECT; + description { + state: "default" 0.0; + min: 0 1; + rel1 { relative: BOTLINE_HORIZ_SEP_2_L BOTLINE_HORIZ_SEP_2_T; to: "background";} + rel2 { relative: BOTLINE_HORIZ_SEP_2_R BOTLINE_HORIZ_SEP_2_B; to: "background";} + color: 35 33 31 255; + } + } + } + + programs{ + + } +} + +group{ + name: "button-layout"; + parts{ + part { name: "background"; + type: RECT; + description { + state: "default" 0.0; + color: COLOR_BG_ALPHA; + } + } + + /*TOP LEFT BUTTON*/ + part { name: "top_left_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: TOP_LEFT_BUTTON_L TOP_LEFT_BUTTON_T; to: "background";} + rel2 { relative: TOP_LEFT_BUTTON_R TOP_LEFT_BUTTON_B; to: "background";} + } + } + + /*TOP MIDDLE BUTTON*/ + part { name: "top_middle_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: TOP_MIDDLE_BUTTON_L TOP_MIDDLE_BUTTON_T; to: "background";} + rel2 { relative: TOP_MIDDLE_BUTTON_R TOP_MIDDLE_BUTTON_B; to: "background";} + } + } + + /*TOP RIGHT BUTTON*/ + part { name: "top_right_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: TOP_RIGHT_BUTTON_L TOP_RIGHT_BUTTON_T; to: "background";} + rel2 { relative: TOP_RIGHT_BUTTON_R TOP_RIGHT_BUTTON_B; to: "background";} + } + } + + /*BOTTOM LEFT BUTTON*/ + part { name: "bottom_left_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: BOTTOM_LEFT_BUTTON_L BOTTOM_LEFT_BUTTON_T; to: "background";} + rel2 { relative: BOTTOM_LEFT_BUTTON_R BOTTOM_LEFT_BUTTON_B; to: "background";} + } + } + + /*BOTTOM MIDDLE BUTTON*/ + part { name: "bottom_middle_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: BOTTOM_MIDDLE_BUTTON_L BOTTOM_MIDDLE_BUTTON_T; to: "background";} + rel2 { relative: BOTTOM_MIDDLE_BUTTON_R BOTTOM_MIDDLE_BUTTON_B; to: "background";} + } + } + + /*BOTTOM RIGHT BUTTON*/ + part { name: "bottom_right_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: BOTTOM_RIGHT_BUTTON_L BOTTOM_RIGHT_BUTTON_T; to: "background";} + rel2 { relative: BOTTOM_RIGHT_BUTTON_R BOTTOM_RIGHT_BUTTON_B; to: "background";} + } + } + } + + programs{ + + } +} diff --git a/ui/call_edc/vcui-view-caller-info.edc b/ui/call_edc/vcui-view-caller-info.edc new file mode 100755 index 0000000..d51118c --- /dev/null +++ b/ui/call_edc/vcui-view-caller-info.edc @@ -0,0 +1,233 @@ +/* + * 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. + */ + +group{ + name: "caller-info"; + parts{ + part { name: "background"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 150; + } + description { + state: "hide" 0.0; + color: 0 0 0 0; + } + } + + /*TOP PADDING*/ + part { name: "top_area"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + rel1 { relative: CALLER_INFO_TOP_L CALLER_INFO_TOP_T; to: "background";} + rel2 { relative: CALLER_INFO_TOP_R CALLER_INFO_TOP_B; to: "background";} + state: "default" 0.0; + color: 171 240 5 255; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + fixed: 1 1; + } + description { + state: "end_color" 0.0; + inherit: "default" 0.0; + visible: 1; + fixed: 1 1; + color: 190 47 48 255; + } + } + + /*CALLER NAME*/ + part { name: "txt_call_name"; /* call name or number */ + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: CALLER_INFO_NAME_L CALLER_INFO_NAME_T; to: "background";} + rel2 { relative: CALLER_INFO_NAME_R CALLER_INFO_NAME_B; to: "background";} + text { font, FONT_SLP_Roman; size, 70; align, 0 0.5; text_class, TEXT_CLASS_SLP_ROMAN;} + color: 255 255 255 255; + color2: 0 0 0 255; + } + } + + /*CALLER INFO Seprator*/ + part { name: "vert_sep_1"; /*Caller info for more*/ + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + } + description { + state: "show" 0.0; + visible: 1; + min: 2 70; + rel1 { relative: CALLER_INFO_VERT_SEP_1_L CALLER_INFO_VERT_SEP_1_T; to: "background";} + rel2 { relative: CALLER_INFO_VERT_SEP_1_R CALLER_INFO_VERT_SEP_1_B; to: "background";} + color: 0 0 0 128; + } + } + + part { name: "vert_sep_2"; /*Caller info for more*/ + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + } + description { + state: "show" 0.0; + visible: 1; + min: 2 70; + rel1 { relative: CALLER_INFO_VERT_SEP_2_L CALLER_INFO_VERT_SEP_2_T; to: "background";} + rel2 { relative: CALLER_INFO_VERT_SEP_2_R CALLER_INFO_VERT_SEP_2_B; to: "background";} + color: 179 179 179 128; + } + } + + /*CALLER INFO*/ + part { name: "caller_info_icon"; /*Caller info for more*/ + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + rel1 { relative: CALLER_INFO_ICON_L CALLER_INFO_ICON_T; to: "background";} + rel2 { relative: CALLER_INFO_ICON_R CALLER_INFO_ICON_B; to: "background";} + } + } + + + /*CALL NUMBER*/ + part { name: "txt_phone_num"; /* Phone number*/ + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: CALLER_INFO_NUMBER_L CALLER_INFO_NUMBER_T; to: "background";} + rel2 { relative: CALLER_INFO_NUMBER_R CALLER_INFO_NUMBER_B; to: "background";} + text { font, FONT_SLP_Roman; size, 48; align, 0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 255 255 255 255; + color2: 0 0 0 255; + } + } + + /* CALL STATUS*/ + part { name: "txt_status"; + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: CALLER_INFO_TIMER_L CALLER_INFO_TIMER_T;to: "background";} + rel2 { relative: CALLER_INFO_TIMER_R CALLER_INFO_TIMER_B;to: "background";} + text { font, FONT_SLP_Roman; size, 48; align, 1.0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 249 249 249 255; + color2: 0 0 0 255; + } + description { + state: "end_color" 0.0; + inherit: "default" 0.0; + color: 255 0 0 255; + color2: 0 0 0 255; + } + description { + state: "hide" 0.0; + visible: 0; + } + } + + /* CALL TIME*/ + part { name: "txt_timer"; /*Call time or Call status*/ + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: CALLER_INFO_TIMER_L CALLER_INFO_TIMER_T; to: "background";} + rel2 { relative: CALLER_INFO_TIMER_R CALLER_INFO_TIMER_B; to: "background";} + text { font, FONT_SLP_Roman; size, 48; align, 1.0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 139 246 50 255; + color2: 0 0 0 255; + } + description { + state: "hide" 0.0; + visible: 0; + } + } + + programs { + program { name: "hold_call"; + signal: "set-hold-state"; + source: "call-screen"; + action: STATE_SET "hide" 0.0; + target: "top_area"; + target: "txt_timer"; + after: "show_status"; + } + program { name: "show_status"; + action: STATE_SET "default" 0.0; + target: "txt_status"; + } + + program { name: "unhold_call"; + signal: "set-unhold-state"; + source: "call-screen"; + action: STATE_SET "default" 0.0; + target: "top_area"; + target: "txt_timer"; + after: "hide_status"; + } + program { name: "hide_status"; + action: STATE_SET "hide" 0.0; + target: "txt_status"; + } + + program { name: "end_caller_info"; + signal: "set-end-caller_ifno"; + source: "end-screen"; + action: STATE_SET "end_color" 0.0; + target: "top_area"; + target: "txt_status"; + } + + program { name: "hold_caller_info"; + signal: "set-hold-caller_ifno"; + source: "call-screen"; + action: STATE_SET "hide" 0.0; + target: "top_area"; + } + + program { name: "vert_seperator"; + signal: "show_vert_separtor"; + source: "call-screen"; + action: STATE_SET "show" 0.0; + target: "vert_sep_1"; + target: "vert_sep_2"; + } + } + } +} diff --git a/ui/call_edc/vcui-view-dialing.edc b/ui/call_edc/vcui-view-dialing.edc index ff23891..b734a3f 100755 --- a/ui/call_edc/vcui-view-dialing.edc +++ b/ui/call_edc/vcui-view-dialing.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group{ name: "mo-view"; parts{ @@ -35,11 +34,13 @@ group{ } } - part { name: "bg_alpha"; - type: RECT; + part { name: "call_bg_img"; + type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; - color: COLOR_BG_ALPHA; + rel1 { relative: 0 0; to: "background";} + rel2 { relative: 1 1; to: "background";} } } @@ -52,66 +53,80 @@ group{ } } - part { name: "txt_mo_status"; // dialling or connecting text - type: TEXT; - effect: SHADOW; + part { name: "caller_info"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: DIALLING_STATUS_L DIALLING_STATUS_T;to: "background";} - rel2 { relative: DIALLING_STATUS_R DIALLING_STATUS_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 1; + rel1 { relative: CALLER_INFO_L CALLER_INFO_T; to: "background";} + rel2 { relative: CALLER_INFO_R CALLER_INFO_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; } } - - - part { name: "txt_call_name"; // call name or number - type: TEXT; - effect: SHADOW; - scale: 1; + + part { name: "swl-cid-noid"; + type: SWALLOW; description { state: "default" 0.0; - rel1 { relative: DIALLING_NAME_L DIALLING_NAME_T;to: "background";} - rel2 { relative: DIALLING_NAME_R DIALLING_NAME_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 76; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible:0; + rel1 { relative: DIALLING_CID_NOIMAGE_L DIALLING_CID_NOIMAGE_T; } + rel2 { relative: DIALLING_CID_NOIMAGE_R DIALLING_CID_NOIMAGE_B; } + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; } } - part { name: "txt_contact_phone_type"; // contact phone type -> call number - type: TEXT; - effect: SHADOW; + part { name: "keypad_region"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: DIALLING_NUMBER_L DIALLING_NUMBER_T; to: "background"; } - rel2 { relative: DIALLING_NUMBER_R DIALLING_NUMBER_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 0; + rel1 { relative: KEYPAD_AREA_L KEYPAD_AREA_T; to: "background";} + rel2 { relative: KEYPAD_AREA_R KEYPAD_AREA_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; } } - part { name: "btn_speaker"; + part { name: "btn_bg"; type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: SIX_BTN_1_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_1_R SIX_BTN_2_B; to: "background";} + rel1 { relative: SIX_BTN_LAYOUT_L SIX_BTN_LAYOUT_T; to: "background";} + rel2 { relative: SIX_BTN_LAYOUT_R SIX_BTN_LAYOUT_B; to: "background";} } } - part { name: "btn_bigend"; + part { name: "btn_region"; type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: SIX_BTN_BIG_END_L SIX_BTN_BIG_END_T; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R SIX_BTN_BIG_END_B; to: "background";} + rel1 { relative: 0 0; to: "btn_bg"; } + rel2 { relative: 1 1; to: "btn_bg"; } } } } @@ -125,5 +140,38 @@ group{ target: "swl_cid"; target: "swl_cid_background"; } + + program { name: "noid_image"; + signal: "show-noid-image"; + source: "show-noid"; + action: STATE_SET "show" 0.0; + target: "swl-cid-noid"; + } + + program { name: "show_keypadbtn"; + signal: "SHOW"; + source: "KEYPAD_BTN"; + action: STATE_SET "show" 0.0; + target: "keypad_region"; + } + program { name: "hide_keypadbtn"; + signal: "HIDE"; + source: "KEYPAD_BTN"; + action: STATE_SET "hide" 0.0; + target: "keypad_region"; + } + + program { name: "show_after_keypad"; + signal: "SHOW"; + source: "CALL_AREA"; + action: STATE_SET "show" 0.0; + target: "caller_info"; + } + program { name: "hide_caller_info"; + signal: "HIDE"; + source: "CALL_AREA"; + action: STATE_SET "hide" 0.0; + target: "caller_info"; + } } -} \ No newline at end of file +} diff --git a/ui/call_edc/vcui-view-end-conf-call.edc b/ui/call_edc/vcui-view-end-conf-call.edc index f6a1c7a..3b45e03 100755 --- a/ui/call_edc/vcui-view-end-conf-call.edc +++ b/ui/call_edc/vcui-view-end-conf-call.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group { name: "end-confcall"; parts { @@ -34,11 +33,13 @@ group { } } - part { name: "bg_alpha"; - type: RECT; + part { name: "call_bg_img"; + type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; - color: COLOR_BG_ALPHA; + rel1 { relative: 0 0; to: "background";} + rel2 { relative: 1 1; to: "background";} } } @@ -77,67 +78,61 @@ group { } } - part { name: "txt_call_name"; /*call name or number*/ - type: TEXT; - effect: SHADOW; + part { name: "caller_info"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_NAME_L INCALL_NAME_T; } - rel2 { relative: INCALL_NAME_R INCALL_NAME_B; } - text { font, FONT_SLP_Roman; size, 76; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 1; + rel1 { relative: CALLER_INFO_L CALLER_INFO_T; to: "background";} + rel2 { relative: CALLER_INFO_R CALLER_INFO_B; to: "background";} } } - part { name: "txt_contact_phone_type"; /*in case of multicallconf, it is num of people*/ - type: TEXT; - effect: SHADOW; + part { name: "btn_hold_swap"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_NUMBER_L INCALL_NUMBER_T; } - rel2 { relative: INCALL_NUMBER_R INCALL_NUMBER_B; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: INCALL_HOLD_L INCALL_HOLD_T; to: "background";} + rel2 { relative: INCALL_HOLD_R INCALL_HOLD_B; to: "background";} } } - part { name: "txt_timer"; + part { name: "txt_hold_swap"; type: TEXT; effect: SHADOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_TIMER_L INCALL_TIMER_T; } - rel2 { relative: INCALL_TIMER_R INCALL_TIMER_B; } - text { font, FONT_SLP_Roman; size, 48; align, 1.0 0.5; } - color: 255 255 255 255; + rel1 { relative: INCALL_HOLD_TXT_L INCALL_HOLD_TXT_T; to: "background";} + rel2 { relative: INCALL_HOLD_TXT_R INCALL_HOLD_TXT_B; to: "background";} + text { font, FONT_SLP_Roman; size, 26; align, 0.0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 204 204 204 255; color2: 0 0 0 255; } } - part { name: "btn_bigend"; + part { name: "btn_bg"; type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: SIX_BTN_BIG_END_L SIX_BTN_BIG_END_T; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R SIX_BTN_BIG_END_B; to: "background";} + rel1 { relative: SIX_BTN_LAYOUT_L SIX_BTN_LAYOUT_T; to: "background";} + rel2 { relative: SIX_BTN_LAYOUT_R SIX_BTN_LAYOUT_B; to: "background";} } } - part { name: "btn_speaker"; + part { name: "btn_region"; type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: SIX_BTN_1_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_1_R SIX_BTN_2_B; to: "background";} + rel1 { relative: 0 0; to: "btn_bg"; } + rel2 { relative: 1 1; to: "btn_bg"; } } } + } programs { diff --git a/ui/call_edc/vcui-view-end-single-call.edc b/ui/call_edc/vcui-view-end-single-call.edc index e3475ed..adf12ca 100755 --- a/ui/call_edc/vcui-view-end-single-call.edc +++ b/ui/call_edc/vcui-view-end-single-call.edc @@ -14,6 +14,80 @@ * limitations under the License. */ +group{ + name: "separator-layout-3button"; + parts{ + part { name: "background"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 153; + } + } + + part { name: "topline_horiz_sep_1"; + type: RECT; + description { + state: "default" 0.0; + min: 0 1; + rel1 { relative: 0 0; offset: 0 -1; to: "background";} + rel2 { relative: 1 0; to: "background";} + color: 80 80 80 204; + } + } + + part { name: "left_vert_sep_1"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 1 1; + rel1 { relative: ENDCALL_LEFT_VERT_SEP_1_L ENDCALL_LEFT_VERT_SEP_1_T; to: "background";} + rel2 { relative: ENDCALL_LEFT_VERT_SEP_1_R ENDCALL_LEFT_VERT_SEP_1_B; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "left_vert_sep_2"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 1 1; + rel1 { relative: ENDCALL_LEFT_VERT_SEP_2_L ENDCALL_LEFT_VERT_SEP_2_T ; to: "background";} + rel2 { relative: ENDCALL_LEFT_VERT_SEP_2_R ENDCALL_LEFT_VERT_SEP_2_B ; to: "background";} + color: 35 33 31 255; + } + } + + part { name: "right_vert_sep_1"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: ENDCALL_RIGHT_VERT_SEP_1_L ENDCALL_RIGHT_VERT_SEP_1_T ; to: "background";} + rel2 { relative: ENDCALL_RIGHT_VERT_SEP_1_R ENDCALL_RIGHT_VERT_SEP_1_B ; to: "background";} + color: 70 70 70 255; + } + } + + part { name: "right_vert_sep_2"; + type: RECT; + description { + state: "default" 0.0; + min: 1 0; + rel1 { relative: ENDCALL_RIGHT_VERT_SEP_2_L ENDCALL_RIGHT_VERT_SEP_2_T ; to: "background";} + rel2 { relative: ENDCALL_RIGHT_VERT_SEP_2_R ENDCALL_RIGHT_VERT_SEP_2_B ; to: "background";} + color: 35 33 31 255; + } + } + } + + programs{ + + } +} + group { name: "end-singlecall"; @@ -36,11 +110,13 @@ group { } } - part { name: "bg_alpha"; - type: RECT; + part { name: "call_bg_img"; + type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; - color: COLOR_BG_ALPHA; + rel1 { relative: 0 0; to: "background";} + rel2 { relative: 1 1; to: "background";} } } @@ -53,46 +129,66 @@ group { } } - part { name: "txt_call_name"; // call name or number - type: TEXT; - effect: SHADOW; + part { name: "caller_info"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: ENDSINGLECALL_NAME_L ENDSINGLECALL_NAME_T; } - rel2 { relative: ENDSINGLECALL_NAME_R ENDSINGLECALL_NAME_B; } - text { font, FONT_SLP_Roman; size, 76; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 1; + rel1 { relative: CALLER_INFO_L CALLER_INFO_T; to: "background";} + rel2 { relative: CALLER_INFO_R CALLER_INFO_B; to: "background";} } } - part { name: "txt_contact_phone_type"; // contact phone type -> call number - type: TEXT; - effect: SHADOW; + part { name: "btn_bg"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: ENDSINGLECALL_NUMBER_L ENDSINGLECALL_NUMBER_T; } - rel2 { relative: ENDSINGLECALL_NUMBER_R ENDSINGLECALL_NUMBER_B; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: ENDSINGLECALL_BTN_BG_L ENDSINGLECALL_BTN_BG_T; to: "background";} + rel2 { relative: ENDSINGLECALL_BTN_BG_R ENDSINGLECALL_BTN_BG_B; to: "background";} } } - part { name: "txt_timer"; - type: TEXT; - effect: SHADOW; + part { name: "btn_voicecall"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: ENDSINGLECALL_TIMER_L ENDSINGLECALL_TIMER_T; } - rel2 { relative: ENDSINGLECALL_TIMER_R ENDSINGLECALL_TIMER_B; } - text { font, FONT_SLP_Roman; size, 44; align, 1.0 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: ENDSINGLECALL_VOICE_BTN_L ENDSINGLECALL_VOICE_BTN_T; to: "background";} + rel2 { relative: ENDSINGLECALL_VOICE_BTN_R ENDSINGLECALL_VOICE_BTN_B; to: "background";} } } + + part { name: "btn_videocall"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: ENDSINGLECALL_VIDEO_BTN_L ENDSINGLECALL_VIDEO_BTN_T; to: "background";} + rel2 { relative: ENDSINGLECALL_VIDEO_BTN_R ENDSINGLECALL_VIDEO_BTN_B; to: "background";} + } + } + + part { name: "btn_message"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: ENDSINGLECALL_MSG_BTN_L ENDSINGLECALL_MSG_BTN_T; to: "background";} + rel2 { relative: ENDSINGLECALL_MSG_BTN_R ENDSINGLECALL_MSG_BTN_B; to: "background";} + } + } + + part { name: "btn_contacts"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + rel1 { relative: ENDSINGLECALL_CONTACT_BTN_L ENDSINGLECALL_CONTACT_BTN_T; to: "background";} + rel2 { relative: ENDSINGLECALL_CONTACT_BTN_R ENDSINGLECALL_CONTACT_BTN_B; to: "background";} + } + } } - } \ No newline at end of file +} \ No newline at end of file diff --git a/ui/call_edc/vcui-view-incoming-lock.edc b/ui/call_edc/vcui-view-incoming-lock.edc index 2911a01..98e8220 100755 --- a/ui/call_edc/vcui-view-incoming-lock.edc +++ b/ui/call_edc/vcui-view-incoming-lock.edc @@ -14,199 +14,256 @@ * limitations under the License. */ +#define COLOR_OPACITY_100 255 255 255 255 +#define COLOR_OPACITY_75 255 255 255 191 +#define COLOR_OPACITY_60 255 255 255 153 +#define COLOR_OPACITY_50 255 255 255 128 +#define COLOR_OPACITY_25 255 255 255 64 +#define COLOR_OPACITY_20 255 255 255 51 +#define COLOR_OPACITY_0 255 255 255 0 +#define SHIFT_VALUE (20/720) group { - name: "lock_accept"; + name: "lock_reject_with_msg"; parts { part { - name: "accept_bg"; + name: "reject_msg_bg"; type: IMAGE; mouse_events:1; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCOMING_LOCK_ACCEPT_BG_L INCOMING_LOCK_ACCEPT_BG_T; } - rel2 { relative: INCOMING_LOCK_ACCEPT_BG_R INCOMING_LOCK_ACCEPT_BG_B; } - image { - normal: IMG_SRC_DIR/"vc_lock_left_bg.png"; - } + rel1 { relative: MTLOCK_REJECT_MSG_BG_L MTLOCK_REJECT_MSG_BG_T; } + rel2 { relative: MTLOCK_REJECT_MSG_BG_R MTLOCK_REJECT_MSG_BG_B; } + image { normal: IMG_SRC_DIR/"vc_lock_reject_message_bg.png"; } align: 0.0 0.5; - color: 255 255 255 255; - visible: 1; - } - description { - state: "alpha" 0.0; - inherit: "default" 0.0; - color: 255 255 255 76; // 30% + color: 255 255 255 255; visible: 1; - } + } } - - part { - name: "accept_icon"; - type: IMAGE; - mouse_events:1; + + part { + name: "reject_msg_arw"; + type: IMAGE; + mouse_events:1; scale: 1; - description { - state: "default" 0.0; - rel1 { relative: INCOMING_LOCK_ACCEPT_ICON_L INCOMING_LOCK_ACCEPT_ICON_T; to: "accept_bg"; } - rel2 { relative: INCOMING_LOCK_ACCEPT_ICON_R INCOMING_LOCK_ACCEPT_ICON_B; to: "accept_bg"; } - image { - normal: IMG_SRC_DIR/"vc_lock_accept_icon.png"; - } + description { + state: "default" 0.0; + rel1 { relative: MTLOCK_REJECT_MSG_ARW_L MTLOCK_REJECT_MSG_ARW_T; } + rel2 { relative: MTLOCK_REJECT_MSG_ARW_R MTLOCK_REJECT_MSG_ARW_B; } align: 0.5 0.5; color: 255 255 255 255; + visible: 0; + } + description { + state: "list_close" 0.0; + inherit: "default" 0.0; + image { normal: IMG_SRC_DIR/"vc_lock_reject_message_arrow_open.png"; } visible: 1; - } - description { - state: "alpha" 0.0; + } + description { + state: "list_open" 0.0; inherit: "default" 0.0; - color: 255 255 255 76; // 30% + image { normal: IMG_SRC_DIR/"vc_lock_reject_message_arrow_close.png"; } visible: 1; - } + } } part { - name: "accept_text"; - type: TEXT; - mouse_events:0; + name: "reject_msg_text_area"; + type: RECT; + mouse_events: 0; scale: 1; - description { - state: "default" 0.0; - rel1 { relative: INCOMING_LOCK_ACCEPT_TEXT_L INCOMING_LOCK_ACCEPT_TEXT_T; to: "accept_bg"; } - rel2 { relative: INCOMING_LOCK_ACCEPT_TEXT_R INCOMING_LOCK_ACCEPT_TEXT_B; to: "accept_bg"; } - text { font, FONT_SLP_Roman; size, 58; align, 0.5 0.5; } + description { + state: "default" 0.0; + rel1 { relative: MTLOCK_REJECT_MSG_TEXT_L MTLOCK_REJECT_MSG_TEXT_T; } + rel2 { relative: MTLOCK_REJECT_MSG_TEXT_R MTLOCK_REJECT_MSG_TEXT_B; } + visible: 0; + } + } + + part { + name: "reject_msg_icon"; + type: IMAGE; + mouse_events:0; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0 0; to: "reject_msg_text_area";} + rel2 { relative: 0 1; to: "txt_padding";} + align: 1 0.5; + min: MTLOCK_REJECT_MSG_ICON_WIDTH MTLOCK_REJECT_MSG_ICON_HEIGHT; + max: MTLOCK_REJECT_MSG_ICON_WIDTH MTLOCK_REJECT_MSG_ICON_HEIGHT; color: 255 255 255 255; + image { normal: IMG_SRC_DIR/"vc_reject_msg_icon.png"; } visible: 1; - } - description { - state: "alpha" 0.0; - inherit: "default" 0.0; - color: 255 255 255 76; // 30% - visible: 1; - } + } } - } - programs { - program { - name: "lock_accept,default"; - signal: "lock_accept,default"; - source: "prog"; - action: STATE_SET "default" 0.0; - target: "accept_bg"; - target: "accept_icon"; - target: "accept_text"; - transition: LINEAR 0.3; - } - program { - name: "lock_accept,alpha"; - signal: "lock_accept,alpha"; - source: "prog"; - action: STATE_SET "alpha" 0.0; - target: "accept_bg"; - target: "accept_icon"; - target: "accept_text"; - transition: LINEAR 0.3; + part { name: "txt_padding"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: MTLOCK_REJECT_MSG_PAD 0; + align: 1 0; + visible: 0; + rel1 { relative: 0 0; to: "reject_msg_text";} + rel2 { relative: 0 1; to: "reject_msg_text";} + } } - } -} -group { - name: "lock_reject"; - parts { - part { - name: "reject_bg"; - type: IMAGE; - mouse_events:1; + part { + name: "reject_msg_text"; + type: TEXT; + mouse_events: 0; scale: 1; - description { - state: "default" 0.0; - rel1 { relative: INCOMING_LOCK_REJECT_BG_L INCOMING_LOCK_REJECT_BG_T; } - rel2 { relative: INCOMING_LOCK_REJECT_BG_R INCOMING_LOCK_REJECT_BG_B; } - image { - normal: IMG_SRC_DIR/"vc_lock_right_bg.png"; - } - align: 0.0 0.5; + description { + state: "default" 0.0; + rel1 { relative: (0.5+((MTLOCK_REJECT_MSG_ICON_WIDTH+MTLOCK_REJECT_MSG_PAD)/(MTLOCK_REJECT_MSG_TEXT_WIDTH*2))) 0; to: "reject_msg_text_area";} + rel2 { relative: (0.5+((MTLOCK_REJECT_MSG_ICON_WIDTH+MTLOCK_REJECT_MSG_PAD)/(MTLOCK_REJECT_MSG_TEXT_WIDTH*2))) 1; to: "reject_msg_text_area";} + fixed: 0 1; + max: (MTLOCK_REJECT_MSG_TEXT_WIDTH-MTLOCK_REJECT_MSG_ICON_WIDTH-MTLOCK_REJECT_MSG_PAD) MTLOCK_REJECT_MSG_TEXT_HEIGHT; + text { font, FONT_SLP_Roman; size, 32; align, 0.5 0.5; min: 1 0; text_class, TEXT_CLASS_SLP_ROMAN; } color: 255 255 255 255; + color2: 0 0 0 191; visible: 1; - } - description { - state: "alpha" 0.0; + } + } + + part { + name: "swl_msglist_bg"; + type: RECT; + description { + state: "default" 0.0; + visible: 0; + color: 0 0 0 255; + rel1 { relative: MTLOCK_REJECT_MSG_LIST_L MTLOCK_REJECT_MSG_LIST_T; } + } + description { + state: "one-line" 0.0; inherit: "default" 0.0; - color: 255 255 255 76; // 30% visible: 1; - } - } - - part { - name: "reject_icon"; - type: IMAGE; - mouse_events:1; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: INCOMING_LOCK_REJECT_ICON_L INCOMING_LOCK_REJECT_ICON_T; to: "reject_bg"; } - rel2 { relative: INCOMING_LOCK_REJECT_ICON_R INCOMING_LOCK_REJECT_ICON_B; to: "reject_bg"; } - image { - normal: IMG_SRC_DIR/"vc_lock_reject_icon.png"; - } - align: 0.5 0.5; - color: 255 255 255 255; + rel2 { relative: MTLOCK_REJECT_MSG_LIST_R MTLOCK_REJECT_MSG_ONE_LINE_LIST_B; } + } + description { + state: "two-line" 0.0; + inherit: "default" 0.0; visible: 1; - } - description { - state: "alpha" 0.0; + rel2 { relative: MTLOCK_REJECT_MSG_LIST_R MTLOCK_REJECT_MSG_TWO_LINE_LIST_B; } + } + description { + state: "three-line" 0.0; inherit: "default" 0.0; - color: 255 255 255 76; // 30% visible: 1; - } + rel2 { relative: MTLOCK_REJECT_MSG_LIST_R MTLOCK_REJECT_MSG_THREE_LINE_LIST_B; } + } + description { + state: "four-line" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2 { relative: MTLOCK_REJECT_MSG_LIST_R MTLOCK_REJECT_MSG_FOUR_LINE_LIST_B; } + } + description { + state: "five-line" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2 { relative: MTLOCK_REJECT_MSG_LIST_R MTLOCK_REJECT_MSG_FIVE_LINE_LIST_B; } + } + description { + state: "six-line" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2 { relative: MTLOCK_REJECT_MSG_LIST_R MTLOCK_REJECT_MSG_SIX_LINE_LIST_B; } + } } - + part { - name: "reject_text"; - type: TEXT; - mouse_events:0; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: INCOMING_LOCK_REJECT_TEXT_L INCOMING_LOCK_REJECT_TEXT_T; to: "reject_bg"; } - rel2 { relative: INCOMING_LOCK_REJECT_TEXT_R INCOMING_LOCK_REJECT_TEXT_B; to: "reject_bg"; } - text { font, FONT_SLP_Roman; size, 58; align, 0.5 0.5; } - color: 255 255 255 255; + name: "swl_msglist"; + type: SWALLOW; + description { + state: "default" 0.0; visible: 1; - } - description { - state: "alpha" 0.0; - inherit: "default" 0.0; - color: 255 255 255 76; // 30% + rel1 { relative: 0.0 0.0; to: "swl_msglist_bg"; } + rel2 { relative: 1.0 1.0; to: "swl_msglist_bg"; } + } + } + + part { + name: "swl_msgtoolbar"; + type: SWALLOW; + description { + state: "default" 0.0; visible: 1; - } + rel1 { relative: 0.0 1.0; to: "swl_msglist_bg"; } + rel2 { relative: 1.0 1.0; to: "swl_msglist_bg"; offset: 0 MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT; } + } } } programs { + program { - name: "lock_reject,default"; - signal: "lock_reject,default"; - source: "prog"; - action: STATE_SET "default" 0.0; - target: "reject_bg"; - target: "reject_icon"; - target: "reject_text"; - transition: LINEAR 0.3; - } + name: "up_arrow"; + signal: "show-up-arrow"; + source: "reject_msg"; + action: STATE_SET "list_close" 0.0; + target: "reject_msg_arw"; + transition: LINEAR 0.0; + } + program { + name: "down_arrow"; + signal: "show-down-arrow"; + source: "reject_msg"; + action: STATE_SET "list_open" 0.0; + target: "reject_msg_arw"; + transition: LINEAR 0.0; + } + + program { + name: "one-line-list"; + signal: "show-one-line"; + source: "reject-list"; + action: STATE_SET "one-line" 0.0; + target: "swl_msglist_bg"; + } + program { + name: "two-line-list"; + signal: "show-two-line"; + source: "reject-list"; + action: STATE_SET "two-line" 0.0; + target: "swl_msglist_bg"; + } program { - name: "lock_reject,alpha"; - signal: "lock_reject,alpha"; - source: "prog"; - action: STATE_SET "alpha" 0.0; - target: "reject_bg"; - target: "reject_icon"; - target: "reject_text"; - transition: LINEAR 0.3; + name: "three-line-list"; + signal: "show-three-line"; + source: "reject-list"; + action: STATE_SET "three-line" 0.0; + target: "swl_msglist_bg"; + } + program { + name: "four-line-list"; + signal: "show-four-line"; + source: "reject-list"; + action: STATE_SET "four-line" 0.0; + target: "swl_msglist_bg"; + } + program { + name: "five-line-list"; + signal: "show-five-line"; + source: "reject-list"; + action: STATE_SET "five-line" 0.0; + target: "swl_msglist_bg"; + } + program { + name: "six-line-list"; + signal: "show-six-line"; + source: "reject-list"; + action: STATE_SET "six-line" 0.0; + target: "swl_msglist_bg"; } } } @@ -215,15 +272,18 @@ group { name: "mtlock"; parts { part { name: "background"; - type: RECT; - description { - state: "default" 0.0; + type: RECT; + mouse_events: 1; + pointer_mode: NOGRAB; + description { + state: "default" 0.0; color: COLOR_DEFAULT; } } part { name: "swl_cid_background"; type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; rel1 { relative: DIALLING_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_T; to: "background";} @@ -231,25 +291,19 @@ group { } } - part { name: "bg_alpha"; - type: RECT; - description { - state: "default" 0.0; - color: COLOR_BG_ALPHA; - } - } - - part { name: "swl_calling_name_bg"; + part { name: "call_bg_img"; type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; - rel1 { relative: MT_CALLING_BG_L MT_CALLING_BG_T; to: "background";} - rel2 { relative: MT_CALLING_BG_R MT_CALLING_BG_B; to: "background";} + rel1 { relative: 0 0; to: "background";} + rel2 { relative: 1 1; to: "background";} } } part { name: "swl_cid"; type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; rel1 { relative: DIALLING_CID_L DIALLING_CID_T; } @@ -257,49 +311,37 @@ group { } } - part { name: "txt_call_name"; // call name or number - type: TEXT; - effect: SHADOW; + part { name: "caller_info"; + type: SWALLOW; scale: 1; + mouse_events: 0; description { state: "default" 0.0; - rel1 { relative: DIALLING_NAME_L DIALLING_NAME_T;to: "background";} - rel2 { relative: DIALLING_NAME_R DIALLING_NAME_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 76; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 1; + rel1 { relative: CALLER_INFO_L CALLER_INFO_T; to: "background";} + rel2 { relative: CALLER_INFO_R CALLER_INFO_B; to: "background";} } } - part { name: "txt_contact_phone_type"; // contact phone type -> call number - type: TEXT; - effect: SHADOW; + part { name: "btn_accept"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: DIALLING_NUMBER_L DIALLING_NUMBER_T; to: "background"; } - rel2 { relative: DIALLING_NUMBER_R DIALLING_NUMBER_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: DIALLING_MT_BTN1_L DIALLING_MT_BTN1_T; to: "background";} + rel2 { relative: DIALLING_MT_BTN1_R DIALLING_MT_BTN1_B; to: "background";} } - } - - /* - part { name: "txt_mt_status"; // Voice call - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_MT_STATUS_L DIALLING_MT_STATUS_T;to: "background";} - rel2 { relative: DIALLING_MT_STATUS_R DIALLING_MT_STATUS_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; - } + } + part { name: "btn_reject"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: DIALLING_MT_BTN2_L DIALLING_MT_BTN2_T; to: "background";} + rel2 { relative: DIALLING_MT_BTN2_R DIALLING_MT_BTN2_B; to: "background";} } - */ + } + }//parts programs { @@ -311,6 +353,6 @@ group { target: "background"; target: "swl_cid"; target: "swl_cid_background"; - } + } } } \ No newline at end of file diff --git a/ui/call_edc/vcui-view-incoming.edc b/ui/call_edc/vcui-view-incoming.edc deleted file mode 100755 index 4a7aaf5..0000000 --- a/ui/call_edc/vcui-view-incoming.edc +++ /dev/null @@ -1,177 +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. - */ - - -group{ - name: "mt-view"; - parts { - part { name: "background"; - type: RECT; - description { - state: "default" 0.0; - color: COLOR_DEFAULT; - } - } - - part { name: "swl_cid_background"; - type: SWALLOW; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_T; to: "background";} - rel2 { relative: DIALLING_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_B; to: "background";} - } - } - - part { name: "bg_alpha"; - type: RECT; - description { - state: "default" 0.0; - color: COLOR_BG_ALPHA; - } - } - - part { name: "swl_calling_name_bg"; - type: SWALLOW; - description { - state: "default" 0.0; - rel1 { relative: MT_CALLING_BG_L MT_CALLING_BG_T; to: "background";} - rel2 { relative: MT_CALLING_BG_R MT_CALLING_BG_B; to: "background";} - } - } - - part { name: "txt_call_name"; // call name or number - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_NAME_L DIALLING_NAME_T;to: "background";} - rel2 { relative: DIALLING_NAME_R DIALLING_NAME_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 76; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; - } - } - - part { name: "txt_contact_phone_type"; // contact phone type -> call number - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_NUMBER_L DIALLING_NUMBER_T; to: "background"; } - rel2 { relative: DIALLING_NUMBER_R DIALLING_NUMBER_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; - } - } - - part { name: "swl_cid"; - type: SWALLOW; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_CID_L DIALLING_CID_T; } - rel2 { relative: DIALLING_CID_R DIALLING_CID_B; } - } - } - - /* - part { name: "txt_mt_status"; // Voice call - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_MT_STATUS_L DIALLING_MT_STATUS_T;to: "background";} - rel2 { relative: DIALLING_MT_STATUS_R DIALLING_MT_STATUS_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; - } - } - */ - - part { name: "btn_accept"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_MT_BTN1_L DIALLING_MT_BTN1_T; to: "background";} - rel2 { relative: DIALLING_MT_BTN1_R DIALLING_MT_BTN1_B; to: "background";} - } - } - part { name: "btn_reject"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_MT_BTN2_L DIALLING_MT_BTN2_T; to: "background";} - rel2 { relative: DIALLING_MT_BTN2_R DIALLING_MT_BTN2_B; to: "background";} - } - } - - part { name: "btn_incoming1"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: SIX_BTN_INCOMING_1_L SIX_BTN_INCOMING_1_T; to: "background";} - rel2 { relative: SIX_BTN_INCOMING_1_R SIX_BTN_INCOMING_1_B; to: "background";} - } - } - part { name: "btn_incoming2"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: SIX_BTN_INCOMING_2_L SIX_BTN_INCOMING_2_T; to: "background";} - rel2 { relative: SIX_BTN_INCOMING_2_R SIX_BTN_INCOMING_2_B; to: "background";} - } - } - part { name: "btn_incoming3"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: SIX_BTN_INCOMING_3_L SIX_BTN_INCOMING_3_T; to: "background";} - rel2 { relative: SIX_BTN_INCOMING_3_R SIX_BTN_INCOMING_3_B; to: "background";} - } - } - part { name: "btn_incoming4"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: SIX_BTN_BIG_END_L SIX_BTN_BIG_END_T; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R SIX_BTN_BIG_END_B; to: "background";} - } - } - }//parts - - programs{ - - program { name: "init"; - signal: "INIT"; - source: "PROG"; - action: STATE_SET "default" 0.0; - target: "background"; - target: "swl_cid"; - target: "swl_cid_background"; - } - } - - } diff --git a/ui/call_edc/vcui-view-keypad.edc b/ui/call_edc/vcui-view-keypad.edc index 4d293ad..9316ac5 100755 --- a/ui/call_edc/vcui-view-keypad.edc +++ b/ui/call_edc/vcui-view-keypad.edc @@ -14,38 +14,7 @@ * limitations under the License. */ - -#define KEYPAD_EACH_BTN_WIDTH 200 -#define KEYPAD_COL1_BTN_L_PAD 40 -#define KEYPAD_COL2_BTN_L_PAD 260 -#define KEYPAD_COL3_BTN_L_PAD 480 - -#define KEYPAD_EACH_BTN_HEIGHT 138 -#define KEYPAD_BTN_TXT_REGION_HEIGHT 112 -#define KEYPAD_ROW1_BTN_T_PAD 0 -#define KEYPAD_ROW2_BTN_T_PAD 158 -#define KEYPAD_ROW3_BTN_T_PAD 316 -#define KEYPAD_ROW4_BTN_T_PAD 474 - -#define RIGHT_ICON_L_PAD 28 -#define RIGHT_ICON_WIDTH 70 -#define RIGHT_ICON_HEIGHT 36 - -#define LEFT_TXT_L_PAD 24 -#define LEFT_TXT_WIDTH 64 -#define RIGHT_TXT_TYPE1_L_PAD 28 -#define RIGHT_TXT_TYPE2_L_PAD 10 - -#define REL_KEYPAD_BTN_W(x) ((x)/KEYPAD_EACH_BTN_WIDTH) - -#define KEYPAD_BTN_LEFT_TXT_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD) -#define KEYPAD_BTN_LEFT_TXT_R REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH) -#define KEYPAD_BTN_RIGHT_TXT_TYPE1_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_TXT_TYPE1_L_PAD) -#define KEYPAD_BTN_RIGHT_TXT_TYPE2_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_TXT_TYPE2_L_PAD) -#define KEYPAD_BTN_RIGHT_ICON_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_ICON_L_PAD) -#define KEYPAD_BTN_RIGHT_ICON_R REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_ICON_L_PAD+RIGHT_ICON_WIDTH) - -#define PART_KEYPAD_CUSTOM_TWO_LABLE(txt, offx, offy, file, file_press,label_left_text,label_left_font,label_left_size,label_right_text,label_right_font,label_right_size, right_txt_lpad) \ +#define PART_KEYPAD_CUSTOM_TWO_LABLE(txt, offx, offy, label_left_text, label_left_size, label_right_text, label_right_size, right_txt_lpad) \ part { \ name: txt; \ type: IMAGE; \ @@ -53,19 +22,15 @@ mouse_events: 1; \ description { \ state: "default" 0.0; \ - rel1 { relative: REL_KEYPAD_W(offx) REL_KEYPAD_H(offy); to:"keypad/bg";} \ - rel2 { relative: REL_KEYPAD_W(offx+KEYPAD_EACH_BTN_WIDTH) REL_KEYPAD_H(offy+KEYPAD_EACH_BTN_HEIGHT); to:"keypad/bg"; } \ - color: 255 255 255 179; \ - image { \ - normal: file; \ - border: 7 7 7 7; \ - border_scale: 1; \ - } \ + visible: 0; \ + rel1 { relative: REL_KEYPAD_W(offx) REL_KEYPAD_H(offy); to:"keypad/area";} \ + rel2 { relative: REL_KEYPAD_W(offx+KEYPAD_EACH_BTN_WIDTH) REL_KEYPAD_H(offy+KEYPAD_EACH_BTN_HEIGHT); to:"keypad/area"; } \ } \ description { \ state: "pressed" 0.0; \ inherit: "default" 0.0; \ - image.normal: file_press; \ + visible: 1; \ + image.normal: IMG_SRC_DIR/"vc_keypad_btn_press.png"; \ } \ description { \ state: "hide" 0.0; \ @@ -87,11 +52,12 @@ align: 0.5 0.5; \ color: 221 210 202 255; \ text { \ - font: label_left_font; \ + font: FONT_SLP_Light; \ text: label_left_text; \ size: label_left_size; \ min: 1 1; \ align: 0.5 0.5; \ + text_class: TEXT_CLASS_SLP_LIGHT; \ } \ } \ description { \ @@ -114,11 +80,12 @@ align: 0.5 0.5; \ color: 221 210 202 255; \ text { \ - font: label_right_font; \ + font: FONT_SLP_Roman; \ text: label_right_text; \ size: label_right_size; \ min: 1 1; \ align: 0.0 0.5; \ + text_class: TEXT_CLASS_SLP_ROMAN; \ } \ } \ description { \ @@ -126,30 +93,35 @@ inherit: "default" 0.0; \ visible: 0; \ } \ - } + } \ + part { name: "over_"txt; \ + mouse_events: 1; \ + repeat_events: 1; \ + ignore_flags: ON_HOLD; \ + description { state: "default" 0.0; \ + rel1 { relative: 0 0; to: txt; } \ + rel2 { relative: 1 1; to: txt; } \ + } \ + } -#define PART_KEYPAD_CUSTOM_ONELABEL_ONEICON(txt, offx, offy, file, file_press,icon_right,icon_right_sizex,icon_right_sizey,label_left_text,label_left_font,label_left_size) \ +#define PART_KEYPAD_CUSTOM_ONELABEL_ONEICON(txt, offx, offy, icon_right, icon_right_sizex, icon_right_sizey, label_left_text, label_left_size) \ part { \ name: txt; \ type: IMAGE; \ scale: 1; \ - mouse_events: 1; \ + mouse_events: 0; \ description { \ state: "default" 0.0; \ - rel1 { relative: REL_KEYPAD_W(offx) REL_KEYPAD_H(offy); to:"keypad/bg";} \ - rel2 { relative: REL_KEYPAD_W(offx+KEYPAD_EACH_BTN_WIDTH) REL_KEYPAD_H(offy+KEYPAD_EACH_BTN_HEIGHT); to:"keypad/bg"; } \ - color: 255 255 255 179; \ - image { \ - normal: file; \ - border: 7 7 7 7; \ - border_scale: 1; \ - } \ + visible: 0; \ + rel1 { relative: REL_KEYPAD_W(offx) REL_KEYPAD_H(offy); to:"keypad/area";} \ + rel2 { relative: REL_KEYPAD_W(offx+KEYPAD_EACH_BTN_WIDTH) REL_KEYPAD_H(offy+KEYPAD_EACH_BTN_HEIGHT); to:"keypad/area"; } \ } \ description { \ state: "pressed" 0.0; \ inherit: "default" 0.0; \ - image.normal: file_press; \ + visible: 1; \ + image.normal: IMG_SRC_DIR/"vc_keypad_btn_press.png"; \ } \ description { \ state: "hide" 0.0; \ @@ -171,11 +143,12 @@ align: 0.5 0.5; \ color: 221 210 202 255; \ text { \ - font: label_left_font; \ + font: FONT_SLP_Light; \ text: label_left_text; \ size: label_left_size; \ min: 1 1; \ align: 0.5 0.5; \ + text_class: TEXT_CLASS_SLP_LIGHT; \ } \ } \ description { \ @@ -204,15 +177,22 @@ inherit: "default" 0.0; \ visible: 0; \ } \ - } - - + } \ + part { name: "over_"txt; \ + mouse_events: 1; \ + repeat_events: 1; \ + ignore_flags: ON_HOLD; \ + description { state: "default" 0.0; \ + rel1 { relative: 0 0; to: txt; } \ + rel2 { relative: 1 1; to: txt; } \ + } \ + } #define PROG_KEYPAD(txt) \ program { \ name: "down_"txt; \ signal: "mouse,down,*"; \ - source: txt; \ + source: "over_"txt; \ script { \ set_state(PART:txt, "pressed", 0.0); \ emit("pad_down", txt); \ @@ -221,7 +201,7 @@ program { \ name: "ani_"txt; \ signal: "ani"; \ - source: txt; \ + source: "over_"txt; \ action: STATE_SET "default" 0.0; \ transition: SINUSOIDAL 0.1; \ target: txt; \ @@ -229,16 +209,17 @@ program { \ name: "up_"txt; \ signal: "mouse,up,1"; \ - source: txt; \ + source: "over_"txt; \ script { \ + set_state(PART:txt, "default", 0.0); \ emit("pad_up", txt); \ - emit("ani", txt); \ + emit("ani", "over_"txt); \ } \ } \ program { \ name: "clicked_"txt; \ signal: "mouse,clicked,1"; \ - source: txt; \ + source: "over_"txt; \ script { \ emit("pad_clicked", txt); \ } \ @@ -247,70 +228,124 @@ #define TARGET_KEYPAD(txt) \ target: txt; \ target: txt"_left"; \ - target: txt"_right"; + target: txt"_right"; \ + target: "over_"txt; -group{ - name: "keypad"; - parts { - part { name: "background"; +#define SEPARATOR_LINE_1(part_name, left, right, top, bottom) \ + part { name: part_name; \ + type: RECT; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: 1 1; \ + rel1 { relative: left top; to: "background"; } \ + rel2 { relative: right bottom; to: "background"; } \ + color: 140 136 137 255; \ + } \ + } + +#define SEPARATOR_LINE_2(part_name, left, right, top, bottom) \ + part { name: part_name; \ + type: RECT; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: 1 1; \ + rel1 { relative: left top; to: "background"; } \ + rel2 { relative: right bottom; to: "background"; } \ + color: 91 91 91 255; \ + } \ + } + +group { + name: "keypad-separator"; + parts { + part { name: "background"; type: RECT; description { state: "default" 0.0; - color: COLOR_DEFAULT; + color: COLOR_BG_ALPHA; } } - part { name: "swl_cid_background"; - type: SWALLOW; - description { - state: "default" 0.0; - rel1 { relative: DIALLING_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_T; to: "background";} - rel2 { relative: DIALLING_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_B; to: "background";} - } - } + SEPARATOR_LINE_1("row1_left_vert_1", KEYPAD_ROW1_LVERT_SEP1_L, KEYPAD_ROW1_LVERT_SEP1_R, KEYPAD_ROW1_LVERT_SEP1_T, KEYPAD_ROW1_LVERT_SEP1_B) + SEPARATOR_LINE_2("row1_left_vert_2", KEYPAD_ROW1_LVERT_SEP2_L, KEYPAD_ROW1_LVERT_SEP2_R, KEYPAD_ROW1_LVERT_SEP2_T, KEYPAD_ROW1_LVERT_SEP2_B) + SEPARATOR_LINE_1("row1_right_vert_1", KEYPAD_ROW1_RVERT_SEP1_L, KEYPAD_ROW1_RVERT_SEP1_R, KEYPAD_ROW1_RVERT_SEP1_T, KEYPAD_ROW1_RVERT_SEP1_B) + SEPARATOR_LINE_2("row1_right_vert_2", KEYPAD_ROW1_RVERT_SEP2_L, KEYPAD_ROW1_RVERT_SEP2_R, KEYPAD_ROW1_RVERT_SEP2_T, KEYPAD_ROW1_RVERT_SEP2_B) + + SEPARATOR_LINE_1("row1_horiz_1", KEYPAD_ROW1_HORIZ_SEP1_L, KEYPAD_ROW1_HORIZ_SEP1_R, KEYPAD_ROW1_HORIZ_SEP1_T, KEYPAD_ROW1_HORIZ_SEP1_B) + SEPARATOR_LINE_2("row1_horiz_2", KEYPAD_ROW1_HORIZ_SEP2_L, KEYPAD_ROW1_HORIZ_SEP2_R, KEYPAD_ROW1_HORIZ_SEP2_T, KEYPAD_ROW1_HORIZ_SEP2_B) + + SEPARATOR_LINE_1("row2_left_vert_1", KEYPAD_ROW2_LVERT_SEP1_L, KEYPAD_ROW2_LVERT_SEP1_R, KEYPAD_ROW2_LVERT_SEP1_T, KEYPAD_ROW2_LVERT_SEP1_B) + SEPARATOR_LINE_2("row2_left_vert_2", KEYPAD_ROW2_LVERT_SEP2_L, KEYPAD_ROW2_LVERT_SEP2_R, KEYPAD_ROW2_LVERT_SEP2_T, KEYPAD_ROW2_LVERT_SEP2_B) + SEPARATOR_LINE_1("row2_right_vert_1", KEYPAD_ROW2_RVERT_SEP1_L, KEYPAD_ROW2_RVERT_SEP1_R, KEYPAD_ROW2_RVERT_SEP1_T, KEYPAD_ROW2_RVERT_SEP1_B) + SEPARATOR_LINE_2("row2_right_vert_2", KEYPAD_ROW2_RVERT_SEP2_L, KEYPAD_ROW2_RVERT_SEP2_R, KEYPAD_ROW2_RVERT_SEP2_T, KEYPAD_ROW2_RVERT_SEP2_B) + + SEPARATOR_LINE_1("row2_horiz_1", KEYPAD_ROW2_HORIZ_SEP1_L, KEYPAD_ROW2_HORIZ_SEP1_R, KEYPAD_ROW2_HORIZ_SEP1_T, KEYPAD_ROW2_HORIZ_SEP1_B) + SEPARATOR_LINE_2("row2_horiz_2", KEYPAD_ROW2_HORIZ_SEP2_L, KEYPAD_ROW2_HORIZ_SEP2_R, KEYPAD_ROW2_HORIZ_SEP2_T, KEYPAD_ROW2_HORIZ_SEP2_B) + + SEPARATOR_LINE_1("row3_left_vert_1", KEYPAD_ROW3_LVERT_SEP1_L, KEYPAD_ROW3_LVERT_SEP1_R, KEYPAD_ROW3_LVERT_SEP1_T, KEYPAD_ROW3_LVERT_SEP1_B) + SEPARATOR_LINE_2("row3_left_vert_2", KEYPAD_ROW3_LVERT_SEP2_L, KEYPAD_ROW3_LVERT_SEP2_R, KEYPAD_ROW3_LVERT_SEP2_T, KEYPAD_ROW3_LVERT_SEP2_B) + SEPARATOR_LINE_1("row3_right_vert_1", KEYPAD_ROW3_RVERT_SEP1_L, KEYPAD_ROW3_RVERT_SEP1_R, KEYPAD_ROW3_RVERT_SEP1_T, KEYPAD_ROW3_RVERT_SEP1_B) + SEPARATOR_LINE_2("row3_right_vert_2", KEYPAD_ROW3_RVERT_SEP2_L, KEYPAD_ROW3_RVERT_SEP2_R, KEYPAD_ROW3_RVERT_SEP2_T, KEYPAD_ROW3_RVERT_SEP2_B) + + SEPARATOR_LINE_1("row3_horiz_1", KEYPAD_ROW3_HORIZ_SEP1_L, KEYPAD_ROW3_HORIZ_SEP1_R, KEYPAD_ROW3_HORIZ_SEP1_T, KEYPAD_ROW3_HORIZ_SEP1_B) + SEPARATOR_LINE_2("row3_horiz_2", KEYPAD_ROW3_HORIZ_SEP2_L, KEYPAD_ROW3_HORIZ_SEP2_R, KEYPAD_ROW3_HORIZ_SEP2_T, KEYPAD_ROW3_HORIZ_SEP2_B) + + SEPARATOR_LINE_1("row4_left_vert_1", KEYPAD_ROW4_LVERT_SEP1_L, KEYPAD_ROW4_LVERT_SEP1_R, KEYPAD_ROW4_LVERT_SEP1_T, KEYPAD_ROW4_LVERT_SEP1_B) + SEPARATOR_LINE_2("row4_left_vert_2", KEYPAD_ROW4_LVERT_SEP2_L, KEYPAD_ROW4_LVERT_SEP2_R, KEYPAD_ROW4_LVERT_SEP2_T, KEYPAD_ROW4_LVERT_SEP2_B) + SEPARATOR_LINE_1("row4_right_vert_1", KEYPAD_ROW4_RVERT_SEP1_L, KEYPAD_ROW4_RVERT_SEP1_R, KEYPAD_ROW4_RVERT_SEP1_T, KEYPAD_ROW4_RVERT_SEP1_B) + SEPARATOR_LINE_2("row4_right_vert_2", KEYPAD_ROW4_RVERT_SEP2_L, KEYPAD_ROW4_RVERT_SEP2_R, KEYPAD_ROW4_RVERT_SEP2_T, KEYPAD_ROW4_RVERT_SEP2_B) + } +} - part { name: "bg_alpha"; +group{ + name: "keypad"; + parts { + part { name: "background"; type: RECT; description { state: "default" 0.0; - color: COLOR_BG_ALPHA; + color: 255 255 255 0; } } - - part { name: "keypad/bg"; + part { name: "keypad/area"; type: SWALLOW; scale: 1; description { state: "default" 0.0; visible: 0; - rel1 { relative: DIALLING_KEYPAD_L DIALLING_KEYPAD_B; to: "background";} - rel2 { relative: DIALLING_KEYPAD_R DIALLING_KEYPAD_B; to: "background";} + rel1 { relative: 0 1; to: "background"; } + rel2 { relative: 1 1; to: "background"; } } description { state: "show" 0.0; visible: 1; - rel1 { relative: DIALLING_KEYPAD_L DIALLING_KEYPAD_T; to: "background";} - rel2 { relative: DIALLING_KEYPAD_R DIALLING_KEYPAD_B; to: "background";} + rel1 { relative: 0 0; to: "background"; } + rel2 { relative: 1 1; to: "background"; } } description { state: "hide" 0.0; inherit: "default" 0.0; - visible: 0; } } part { name: "textblock/bg"; - type: SWALLOW; + type: IMAGE; mouse_events: 0; scale: 1; description { state: "default" 0.0; - rel1 { relative:DIALLING_ENTRY_TEXT_L DIALLING_ENTRY_TEXT_T ; to: "background";} - rel2 { relative: DIALLING_ENTRY_TEXT_R DIALLING_ENTRY_TEXT_B ; to: "background";} - //rel2 { relative: 1.0 0.0; to: "button/bg";} - // color: 246 245 237 255; + rel1 { relative: KEYPAD_ENTRY_TEXT_L KEYPAD_ENTRY_TEXT_T; to: "keypad/area"; } + rel2 { relative: KEYPAD_ENTRY_TEXT_R KEYPAD_ENTRY_TEXT_B; to: "keypad/area"; } + color: 255 255 255 179; + image { + normal: IMG_SRC_DIR/"vc_keypad_btn_normal.png"; + border: 9 9 9 9; + border_scale: 1; + } } } @@ -322,104 +357,73 @@ group{ state: "default" 0.0; fixed: 1 1; align: 0.5 0.5; - rel1 { relative: 0.0 0.0; to: "textblock/bg"; } + rel1 { relative: 0.04 0.0; to: "textblock/bg"; } rel2 { relative: 1.0 1.0; to: "textblock/bg"; } } - description { - state: "hide" 0.0; + description { + state: "show" 0.0; + inherit: "default" 0.0; + } + description { + state: "hide" 0.0; inherit: "default" 0.0; - visible: 0; - } + visible: 0; + } } - part { - name: "txt_timer"; - type: TEXT; - effect: SHADOW; + part { + name: "keypad_btns/bg"; + type: IMAGE; + mouse_events: 0; scale: 1; description { state: "default" 0.0; - visible: 0; - rel1 { relative: INCALL_DIALER_TIMER_L INCALL_DIALER_TIMER_T; to:"background";} - rel2 { relative: INCALL_DIALER_TIMER_R INCALL_DIALER_TIMER_B; to:"background";} - text { font, FONT_SLP_Roman; size, 48; align, 1.0 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: KEYPAD_BTNS_BG_L KEYPAD_BTNS_BG_T; to: "keypad/area"; } + rel2 { relative: KEYPAD_BTNS_BG_R KEYPAD_BTNS_BG_B; to: "keypad/area"; } + color: 255 255 255 179; + image { + normal: IMG_SRC_DIR/"vc_keypad_btn_normal.png"; + border: 9 9 9 9; + border_scale: 1; + } } - description { - state: "show" 0.0; - inherit: "default" 0.0; - visible: 1; - } - description { - state: "hide" 0.0; - inherit: "default" 0.0; - visible: 0; - } } - - part { - name: "txt_call_name"; // call name or number - type: TEXT; - effect: SHADOW; + part { + name: "separator/bg"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; visible: 0; - rel1 { relative: INCALL_DIALER_NAME_L INCALL_DIALER_NAME_T;to: "background";} - rel2 { relative: INCALL_DIALER_NAME_R INCALL_DIALER_NAME_B;to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.0 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: 0 0; to: "keypad_btns/bg"; } + rel2 { relative: 1 1; to: "keypad_btns/bg"; } } description { state: "show" 0.0; inherit: "default" 0.0; visible: 1; - } + } description { state: "hide" 0.0; inherit: "default" 0.0; - visible: 0; - } + visible: 0; + } } - PART_KEYPAD_CUSTOM_ONELABEL_ONEICON("1", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW1_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_icon.png", RIGHT_ICON_WIDTH, RIGHT_ICON_HEIGHT, "1", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT) - PART_KEYPAD_CUSTOM_TWO_LABLE("2", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW1_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "2", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "ABC", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("3", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW1_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "3", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "DEF", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("4", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW2_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "4", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "GHI", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("5", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW2_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "5", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "JKL", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("6", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW2_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "6", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "MNO", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("7", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW3_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "7", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "PQRS", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE2_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("8", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW3_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "8", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "TUV", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("9", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW3_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "9", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "WXYZ", FONT_SLP_Roman, 32, KEYPAD_BTN_RIGHT_TXT_TYPE2_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("star", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW4_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "*", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "P", FONT_SLP_Roman, 64, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("0", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW4_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "0", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "+", FONT_SLP_Roman, 64, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) - PART_KEYPAD_CUSTOM_TWO_LABLE("sharp", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW4_BTN_T_PAD, IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png", IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png", "#", FONT_SLP_Roman, KEYPAD_BTN_TXT_REGION_HEIGHT, "", FONT_SLP_Roman, 64, KEYPAD_BTN_RIGHT_TXT_TYPE2_L) - - - part { - name: "btn_hide"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALER_BTN1_L DIALER_BTN1_T; to: "background";} - rel2 { relative: DIALER_BTN1_R DIALER_BTN1_B; to: "background";} - } - } + PART_KEYPAD_CUSTOM_ONELABEL_ONEICON("1", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW1_BTN_T_PAD, IMG_SRC_DIR/"vc_keypad_btn_icon.png", RIGHT_ICON_WIDTH, RIGHT_ICON_HEIGHT, "1", KEYPAD_BTN_TXT_REGION_HEIGHT) + PART_KEYPAD_CUSTOM_TWO_LABLE("2", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW1_BTN_T_PAD, "2", KEYPAD_BTN_TXT_REGION_HEIGHT, "ABC", 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("3", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW1_BTN_T_PAD, "3", KEYPAD_BTN_TXT_REGION_HEIGHT, "DEF", 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("4", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW2_BTN_T_PAD, "4", KEYPAD_BTN_TXT_REGION_HEIGHT, "GHI", 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("5", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW2_BTN_T_PAD, "5", KEYPAD_BTN_TXT_REGION_HEIGHT, "JKL", 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("6", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW2_BTN_T_PAD, "6", KEYPAD_BTN_TXT_REGION_HEIGHT, "MNO", 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("7", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW3_BTN_T_PAD, "7", KEYPAD_BTN_TXT_REGION_HEIGHT, "PQRS", 32, KEYPAD_BTN_RIGHT_TXT_TYPE2_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("8", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW3_BTN_T_PAD, "8", KEYPAD_BTN_TXT_REGION_HEIGHT, "TUV", 32, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("9", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW3_BTN_T_PAD, "9", KEYPAD_BTN_TXT_REGION_HEIGHT, "WXYZ", 32, KEYPAD_BTN_RIGHT_TXT_TYPE2_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("star", KEYPAD_COL1_BTN_L_PAD, KEYPAD_ROW4_BTN_T_PAD, "*", KEYPAD_BTN_TXT_REGION_HEIGHT, "", 64, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("0", KEYPAD_COL2_BTN_L_PAD, KEYPAD_ROW4_BTN_T_PAD, "0", KEYPAD_BTN_TXT_REGION_HEIGHT, "", 64, KEYPAD_BTN_RIGHT_TXT_TYPE1_L) + PART_KEYPAD_CUSTOM_TWO_LABLE("sharp", KEYPAD_COL3_BTN_L_PAD, KEYPAD_ROW4_BTN_T_PAD, "#", KEYPAD_BTN_TXT_REGION_HEIGHT, "", 64, KEYPAD_BTN_RIGHT_TXT_TYPE2_L) - part { - name: "btn_end"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: DIALER_BTN2_L DIALER_BTN2_T; to: "background";} - rel2 { relative: DIALER_BTN2_R DIALER_BTN2_B; to: "background";} - } - } } programs{ @@ -428,44 +432,31 @@ group{ source: "KEYPADBTN"; action: STATE_SET "show" 0.0; transition: LINEAR 0.5; - target: "keypad/bg"; + target: "keypad/area"; after: "show_keypadbtn_next"; } program { name: "show_keypadbtn_next"; action: STATE_SET "show" 0.0; - target: "txt_call_name"; - target: "txt_timer"; - } + target: "textblock/textarea"; + target: "separator/bg"; + } program { name: "hide_keypadbtn"; signal: "HIDE"; source: "KEYPADBTN"; action: STATE_SET "hide" 0.0; target: "textblock/textarea"; - target: "txt_call_name"; - target: "txt_timer"; + target: "separator/bg"; after: "hide_keypadbtn_next"; - } + } program { name: "hide_keypadbtn_next"; action: STATE_SET "hide" 0.0; transition: ACCELERATE 0.5; - target: "keypad/bg"; - TARGET_KEYPAD("1") - TARGET_KEYPAD("2") - TARGET_KEYPAD("3") - TARGET_KEYPAD("4") - TARGET_KEYPAD("5") - TARGET_KEYPAD("6") - TARGET_KEYPAD("7") - TARGET_KEYPAD("8") - TARGET_KEYPAD("9") - TARGET_KEYPAD("star") - TARGET_KEYPAD("0") - TARGET_KEYPAD("sharp") + target: "keypad/area"; after: "hide_keypadbtn_done"; - } + } program { name: "hide_keypadbtn_done"; action: SIGNAL_EMIT "DONE" "HIDEKEYPAD"; - } + } PROG_KEYPAD("1") PROG_KEYPAD("2") PROG_KEYPAD("3") diff --git a/ui/call_edc/vcui-view-landscape-quick-pannel.edc b/ui/call_edc/vcui-view-landscape-quick-pannel.edc new file mode 100755 index 0000000..cc62e80 --- /dev/null +++ b/ui/call_edc/vcui-view-landscape-quick-pannel.edc @@ -0,0 +1,122 @@ +/* + * 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. + */ + +group { + name: "quickpanel-lscape"; + parts { + + part { name: "background"; + type: RECT; + description { + state: "default" 0.0; + color: 20 20 20 255; + } + } + + part { name: "swl_cid"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: LSCAPE_QUICKPANEL_CID_L LSCAPE_QUICKPANEL_CID_T; to: "background";} + rel2 { relative: LSCAPE_QUICKPANEL_CID_R LSCAPE_QUICKPANEL_CID_B; to: "background";} + } + } + + part { name: "btn_left"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { relative: LSCAPE_QUICKPANEL_BTN_MUTE_L LSCAPE_QUICKPANEL_BTN_MUTE_T; to: "background";} + rel2 { relative: LSCAPE_QUICKPANEL_BTN_MUTE_R LSCAPE_QUICKPANEL_BTN_MUTE_B; to: "background";} + } + } + + part { name: "btn_right"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { relative: LSCAPE_QUICKPANEL_BTN_END_L LSCAPE_QUICKPANEL_BTN_END_T; to: "background";} + rel2 { relative: LSCAPE_QUICKPANEL_BTN_END_R LSCAPE_QUICKPANEL_BTN_END_B; to: "background";} + } + } + + part { name: "txt_area"; + type: RECT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: LSCAPE_QUICKPANEL_NAME_L LSCAPE_QUICKPANEL_NAME_T; to: "background";} + rel2 { relative: LSCAPE_QUICKPANEL_NAME_R LSCAPE_QUICKPANEL_NAME_B; to: "background";} + } + } + + part { name: "txt_call_name"; + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0 0; to: "txt_area";} + rel2 { relative: 0 1; to: "txt_padding";} + max: LSCAPE_QP_NAME_WIDTH LSCAPE_QP_NAME_HEIGHT; + min: QP_STR_MIN_WIDTH LSCAPE_QP_NAME_HEIGHT; + fixed: 0 1; + align: 0 0; + text { font, FONT_SLP_Regular; size, 32; align: 0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 249 249 249 255; + color2: 0 0 0 128; + } + } + + part { name: "txt_padding"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: QP_CID_L_PAD 0; + align: 1 0; + visible: 0; + rel1 { relative: 0 0; to: "txt_timer";} + rel2 { relative: 0 1; to: "txt_timer";} + } + } + + part { name: "txt_timer"; + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0; to: "txt_area";} + rel2 { relative: 1.0 1; to: "txt_area";} + max: LSCAPE_QP_NAME_WIDTH LSCAPE_QP_NAME_HEIGHT; + min: QP_STR_MIN_WIDTH LSCAPE_QP_NAME_HEIGHT; + fixed: 0 1; + align: 1 0; + text { font, FONT_SLP_Regular; size, 32; align: 1 0.5; min: 1 0; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 98 161 22 255; + color2: 0 0 0 191; + } + } + } +} \ No newline at end of file diff --git a/ui/call_edc/vcui-view-multi-call-conf.edc b/ui/call_edc/vcui-view-multi-call-conf.edc index 7937bc1..ca3f2dc 100755 --- a/ui/call_edc/vcui-view-multi-call-conf.edc +++ b/ui/call_edc/vcui-view-multi-call-conf.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group { name: "multicall-conf"; parts { @@ -35,11 +34,13 @@ group { } } - part { name: "bg_alpha"; - type: RECT; + part { name: "call_bg_img"; + type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; - color: COLOR_BG_ALPHA; + rel1 { relative: 0 0; to: "background";} + rel2 { relative: 1 1; to: "background";} } } @@ -78,72 +79,112 @@ group { } } - part { name: "txt_call_name"; /*call name or number*/ - type: TEXT; - effect: SHADOW; + part { name: "caller_info"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_NAME_L INCALL_NAME_T; } - rel2 { relative: INCALL_NAME_R INCALL_NAME_B; } - text { font, FONT_SLP_Roman; size, 76; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 1; + rel1 { relative: CALLER_INFO_L CALLER_INFO_T; to: "background";} + rel2 { relative: CALLER_INFO_R CALLER_INFO_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; } } - part { name: "txt_contact_phone_type"; /*in case of multicallconf, it is num of people*/ - type: TEXT; - effect: SHADOW; + part { name: "btn_hold_swap"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_NUMBER_L INCALL_NUMBER_T; } - rel2 { relative: INCALL_NUMBER_R INCALL_NUMBER_B; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: INCALL_HOLD_L INCALL_HOLD_T; to: "background";} + rel2 { relative: INCALL_HOLD_R INCALL_HOLD_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; } } - part { name: "txt_timer"; + part { name: "txt_hold_swap"; type: TEXT; effect: SHADOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_TIMER_L INCALL_TIMER_T; } - rel2 { relative: INCALL_TIMER_R INCALL_TIMER_B; } - text { font, FONT_SLP_Roman; size, 48; align, 1.0 0.5; } - color: 255 255 255 255; + rel1 { relative: INCALL_HOLD_TXT_L INCALL_HOLD_TXT_T; to: "background";} + rel2 { relative: INCALL_HOLD_TXT_R INCALL_HOLD_TXT_B; to: "background";} + text { font, FONT_SLP_Roman; size, 26; align, 0.0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 204 204 204 255; color2: 0 0 0 255; } description { - state: "end" 0.0; + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "hide" 0.0; inherit: "default" 0.0; visible: 0; } } - part { name: "btn_bigend"; + part { name: "btn_bg"; type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: SIX_BTN_BIG_END_L SIX_BTN_BIG_END_T; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R SIX_BTN_BIG_END_B; to: "background";} + rel1 { relative: SIX_BTN_LAYOUT_L SIX_BTN_LAYOUT_T; to: "background";} + rel2 { relative: SIX_BTN_LAYOUT_R SIX_BTN_LAYOUT_B; to: "background";} } } - part { name: "btn_speaker"; + part { name: "btn_region"; type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: SIX_BTN_1_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_1_R SIX_BTN_2_B; to: "background";} + rel1 { relative: 0 0; to: "btn_bg"; } + rel2 { relative: 1 1; to: "btn_bg"; } } } + + part { name: "keypad_region"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: KEYPAD_AREA_L KEYPAD_AREA_T; to: "background";} + rel2 { relative: KEYPAD_AREA_R KEYPAD_AREA_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + }//parts programs { @@ -165,5 +206,35 @@ group { action: STATE_SET "hd" 0.0; target: "swl_cid_dim"; } + + program { name: "show_keypadbtn"; + signal: "SHOW"; + source: "KEYPAD_BTN"; + action: STATE_SET "show" 0.0; + target: "keypad_region"; + } + program { name: "hide_keypadbtn"; + signal: "HIDE"; + source: "KEYPAD_BTN"; + action: STATE_SET "hide" 0.0; + target: "keypad_region"; + } + + program { name: "show_after_keypad"; + signal: "SHOW"; + source: "CALL_AREA"; + action: STATE_SET "show" 0.0; + target: "caller_info"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; + } + program { name: "hide_caller_info"; + signal: "HIDE"; + source: "CALL_AREA"; + action: STATE_SET "hide" 0.0; + target: "caller_info"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; + } } -} \ No newline at end of file +} diff --git a/ui/call_edc/vcui-view-multi-call-list.edc b/ui/call_edc/vcui-view-multi-call-list.edc index 5028996..b0af10a 100755 --- a/ui/call_edc/vcui-view-multi-call-list.edc +++ b/ui/call_edc/vcui-view-multi-call-list.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group { name: "multicall-list"; parts { @@ -24,19 +23,6 @@ group { state: "default" 0.0; color: COLOR_DEFAULT; } - description { - state: "show" 0.0; - color: COLOR_DEFAULT; - } - } - - part { name: "swl_cid_background"; - type: SWALLOW; - description { - state: "default" 0.0; - rel1 { relative: MULTICALL_SPLIT_BACKGROUND_CID_L MULTICALL_SPLIT_BACKGROUND_CID_T; to: "background";} - rel2 { relative: MULTICALL_SPLIT_BACKGROUND_CID_R MULTICALL_SPLIT_BACKGROUND_CID_B; to: "background";} - } } part { name: "bg_alpha"; @@ -46,19 +32,6 @@ group { color: COLOR_BG_ALPHA; } } - - part { name: "navigation_bar"; - type: SWALLOW; - scale: 1; - mouse_events: 1; - description { - fixed: 1 1; - min: 0 50; - state: "default" 0.0; - rel1 { relative: CALL_NAVIGATION_BAR_L CALL_NAVIGATION_BAR_T; to: "background";} - rel2 { relative: CALL_NAVIGATION_BAR_R CALL_NAVIGATION_BAR_B; to: "background";} - } - } part { name: "swl_calllist"; type: SWALLOW; @@ -81,8 +54,8 @@ group { state: "default" 0.0; rel1 { relative: MULTICALL_LIST_TIMER_L MULTICALL_LIST_TIMER_T; to: "background"; } rel2 { relative: MULTICALL_LIST_TIMER_R MULTICALL_LIST_TIMER_B; to: "background"; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; + text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 249 249 249 255; color2: 0 0 0 255; } description { @@ -92,6 +65,16 @@ group { } } + part { name: "btn_hold"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: MULTICALL_LIST_HOLD_L MULTICALL_LIST_HOLD_T; to: "background"; } + rel2 { relative: MULTICALL_LIST_HOLD_R MULTICALL_LIST_HOLD_B; to: "background"; } + } + } + part { name: "btn_bigend"; type: SWALLOW; scale: 1; diff --git a/ui/call_edc/vcui-view-multi-call-split.edc b/ui/call_edc/vcui-view-multi-call-split.edc index 5579bf1..65e0511 100755 --- a/ui/call_edc/vcui-view-multi-call-split.edc +++ b/ui/call_edc/vcui-view-multi-call-split.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group { name: "multicall-split"; parts { @@ -41,80 +40,29 @@ group { } } - part { name: "bg_alpha"; - type: RECT; - description { - state: "default" 0.0; - color: COLOR_BG_ALPHA; - } - } - - part { name: "swl_cid_1"; + part { name: "swl_cid_unhold"; type: SWALLOW; description { state: "default" 0.0; visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; rel1 { relative: MULTICALL_SPLIT_CID_1_L MULTICALL_SPLIT_CID_1_T; } rel2 { relative: MULTICALL_SPLIT_CID_1_R MULTICALL_SPLIT_CID_1_B; } } - } - - part { name: "swl_pause"; - type: SWALLOW; - description { - state: "default" 0.0; - visible: 0; - } description { state: "portrait" 0.0; + inherit: "default" 0.0; visible: 1; - rel1 { relative: MULTICALL_SPLIT_PAUSE_L MULTICALL_SPLIT_PAUSE_T; } - rel2 { relative: MULTICALL_SPLIT_PAUSE_R MULTICALL_SPLIT_PAUSE_B; } } } - part { name: "swl_cid_2"; + part { name: "swl_cid_hold"; type: SWALLOW; description { state: "default" 0.0; visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; rel1 { relative: MULTICALL_SPLIT_CID_2_L MULTICALL_SPLIT_CID_2_T; } rel2 { relative: MULTICALL_SPLIT_CID_2_R MULTICALL_SPLIT_CID_2_B; } } - } - - part { name: "swl_cid_2_dim"; /*dim icon for held call*/ - type: RECT; - scale: 1; - mouse_events: 1; - repeat_events: 1; - description { - state: "default" 0.0; - visible: 0; - color: COLOR_BG_FOR_HELD_CALL_DIM; - } - description { - state: "portrait_wvga" 0.0; - inherit: "default" 0.0; - rel1 { relative: 0.0 0.0; offset: 4 0; to: "swl_cid_2"; } - rel2 { relative: 1.0 1.0; offset: -5 0; to: "swl_cid_2"; } - visible: 1; - } - description { - state: "portrait_hd" 0.0; - inherit: "default" 0.0; - rel1 { relative: 0.0 0.0; to: "swl_cid_2"; } - rel2 { relative: 1.0 1.0; to: "swl_cid_2"; } - visible: 1; - } description { state: "portrait" 0.0; inherit: "default" 0.0; @@ -122,466 +70,105 @@ group { } } - part { name: "swl_play"; + part { name: "call_bg_img"; type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_PLAY_L MULTICALL_SPLIT_PLAY_T; } - rel2 { relative: MULTICALL_SPLIT_PLAY_R MULTICALL_SPLIT_PLAY_B; } - } - } - - part { name: "txt_call_name_1"; /*call name or number*/ - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - text { font, FONT_SLP_Roman; size, 58; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; - } - description { - state: "portrait" 0.0; - inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_NAME_1_L MULTICALL_SPLIT_NAME_1_T; } - rel2 { relative: MULTICALL_SPLIT_NAME_1_R MULTICALL_SPLIT_NAME_1_B; } + rel1 { relative: 0 0; to: "background";} + rel2 { relative: 1 1; to: "background";} } } - part { name: "txt_call_name_2"; /*call name or number*/ - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - text { font, FONT_SLP_Roman; size, 36; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; - } - description { - state: "portrait" 0.0; - inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_NAME_2_L MULTICALL_SPLIT_NAME_2_T; } - rel2 { relative: MULTICALL_SPLIT_NAME_2_R MULTICALL_SPLIT_NAME_2_B; } - } - } - - /* part { name: "txt_active"; - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - text { font, FONT_SLP_Roman; size, 28; align, 0.0 0.5; } - color: 139 246 50 255; - color2: 0 0 0 255; - } - description { - state: "portrait" 0.0; - inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_ACTIVE_TXT_L MULTICALL_SPLIT_ACTIVE_TXT_T; } - rel2 { relative: MULTICALL_SPLIT_ACTIVE_TXT_R MULTICALL_SPLIT_ACTIVE_TXT_B; } - } - } - */ - - part { name: "swl_more"; + part { name: "caller_info_unhold"; type: SWALLOW; scale: 1; description { state: "default" 0.0; visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_MORE_ICON_L MULTICALL_SPLIT_MORE_ICON_T; to: "background";} - rel2 { relative: MULTICALL_SPLIT_MORE_ICON_R MULTICALL_SPLIT_MORE_ICON_B; to: "background";} - } - } - - part { name: "txt_onhold"; - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - text { font, FONT_SLP_Roman; size, 36; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: CALLER_INFO_L CALLER_INFO_T; to: "background";} + rel2 { relative: CALLER_INFO_R CALLER_INFO_B; to: "background";} } description { state: "portrait" 0.0; inherit: "default" 0.0; visible: 1; - rel1 { relative: MULTICALL_SPLIT_ON_HOLD_TXT_L MULTICALL_SPLIT_ON_HOLD_TXT_T; } - rel2 { relative: MULTICALL_SPLIT_ON_HOLD_TXT_R MULTICALL_SPLIT_ON_HOLD_TXT_B; } } description { - state: "portrait_icon" 0.0; - inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_L MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_T; } - rel2 { relative: MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_R MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_B; } - } - } - - part { name: "txt_timer"; - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - text { font, FONT_SLP_Roman; size, 44; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; - } - description { - state: "end" 0.0; + state: "hide" 0.0; inherit: "default" 0.0; visible: 0; } - description { - state: "portrait" 0.0; - inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_TIMER_L MULTICALL_SPLIT_TIMER_T; } - rel2 { relative: MULTICALL_SPLIT_TIMER_R MULTICALL_SPLIT_TIMER_B; } - } - } - - part { name: "btn_bigend"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: SIX_BTN_BIG_END_L SIX_BTN_BIG_END_T; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R SIX_BTN_BIG_END_B; to: "background";} - } } - part { name: "btn_speaker"; + part { name: "caller_info_hold"; type: SWALLOW; scale: 1; description { state: "default" 0.0; visible: 0; + rel1 { relative: CALLER_INFO_HOLD_L CALLER_INFO_HOLD_T; to: "background";} + rel2 { relative: CALLER_INFO_HOLD_R CALLER_INFO_HOLD_B; to: "background";} } description { state: "portrait" 0.0; - visible: 1; - rel1 { relative: SIX_BTN_1_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_1_R SIX_BTN_2_B; to: "background";} - } - } - }//parts - - programs { - program { name: "show_portrait_mode"; - signal: "set-portrait"; - source: "incall-split1-view"; - action: STATE_SET "portrait" 0.0; - target: "swl_cid_background"; - target: "swl_cid_1"; - target: "swl_cid_2"; - target: "swl_pause"; - target: "swl_play"; - target: "txt_call_name_1"; - target: "txt_call_name_2"; - target: "txt_onhold"; - target: "txt_timer"; - target: "btn_bigend"; - target: "btn_speaker"; - } - program { name: "show_portrait_swl_dim_wvga"; - signal: "show-swl-dim-wvga"; - source: "cid-wvga"; - action: STATE_SET "portrait_wvga" 0.0; - target: "swl_cid_2_dim"; - } - program { name: "show_portrait_swl_dim_hd"; - signal: "show-swl-dim-hd"; - source: "cid-hd"; - action: STATE_SET "portrait_hd" 0.0; - target: "swl_cid_2_dim"; - } - program { name: "show_conf_list_portrait"; - signal: "show-more-portrait"; - source: "incall-split1-conf-call"; - action: STATE_SET "portrait" 0.0; - target: "swl_more"; - } - program { name: "show_conf_list_portrait_onhold"; - signal: "show-more-portrait"; - source: "incall-split1-conf-call"; - action: STATE_SET "portrait_icon" 0.0; - target: "txt_onhold"; - } - } -} - -group { - - name: "multicall-split2"; - parts { - - part { name: "background"; - type: RECT; - description { - state: "default" 0.0; - color: COLOR_DEFAULT; - } - } - - part { name: "swl_cid_background"; - type: SWALLOW; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_BACKGROUND_CID_L MULTICALL_SPLIT_BACKGROUND_CID_T; to: "background";} - rel2 { relative: MULTICALL_SPLIT_BACKGROUND_CID_R MULTICALL_SPLIT_BACKGROUND_CID_B; to: "background";} - } - } - - part { name: "bg_alpha"; - type: RECT; - description { - state: "default" 0.0; - color: COLOR_BG_ALPHA; - } - } - - part { name: "swl_cid_1"; - type: SWALLOW; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_CID_2_L MULTICALL_SPLIT_SWAP_CID_2_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_CID_2_R MULTICALL_SPLIT_SWAP_CID_2_B; } - } - } - - part { name: "swl_pause"; - type: SWALLOW; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_PAUSE_L MULTICALL_SPLIT_SWAP_PAUSE_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_PAUSE_R MULTICALL_SPLIT_SWAP_PAUSE_B; } - } - } - - part { name: "swl_cid_2"; - type: SWALLOW; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_CID_1_L MULTICALL_SPLIT_SWAP_CID_1_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_CID_1_R MULTICALL_SPLIT_SWAP_CID_1_B; } - } - } - - part { name: "swl_cid_2_dim"; /*for held call dim*/ - type: RECT; - scale: 1; - mouse_events: 1; - repeat_events: 1; - description { - state: "default" 0.0; - visible: 0; - rel1 { relative: 0.0 0.0; to: "swl_cid_2"; } - rel2 { relative: 1.0 1.0; to: "swl_cid_2"; } - color: COLOR_BG_FOR_HELD_CALL_DIM; - } - description { - state: "portrait_wvga" 0.0; inherit: "default" 0.0; - rel1 { relative: 0.0 0.0; offset: 4 0; to: "swl_cid_2"; } - rel2 { relative: 1.0 1.0; offset: -5 0; to: "swl_cid_2"; } visible: 1; } description { - state: "portrait_hd" 0.0; + state: "hide" 0.0; inherit: "default" 0.0; - rel1 { relative: 0.0 0.0; to: "swl_cid_2"; } - rel2 { relative: 1.0 1.0; to: "swl_cid_2"; } - visible: 1; + visible: 0; } } - part { name: "swl_play"; + part { name: "btn_hold_swap"; type: SWALLOW; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_PLAY_L MULTICALL_SPLIT_SWAP_PLAY_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_PLAY_R MULTICALL_SPLIT_SWAP_PLAY_B; } - } - } - - part { name: "txt_call_name_1"; /*call name or number*/ - type: TEXT; - effect: SHADOW; scale: 1; description { state: "default" 0.0; visible: 0; - text { font, FONT_SLP_Roman; size, 58; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + rel1 { relative: INCALL_HOLD_L INCALL_HOLD_T; to: "background";} + rel2 { relative: INCALL_HOLD_R INCALL_HOLD_B; to: "background";} } description { state: "portrait" 0.0; inherit: "default" 0.0; visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_NAME_2_L MULTICALL_SPLIT_SWAP_NAME_2_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_NAME_2_R MULTICALL_SPLIT_SWAP_NAME_2_B; } - } - } - - part { name: "txt_call_name_2"; /*call name or number*/ - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - text { font, FONT_SLP_Roman; size, 36; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; } description { - state: "portrait" 0.0; + state: "hide" 0.0; inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_NAME_1_L MULTICALL_SPLIT_SWAP_NAME_1_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_NAME_1_R MULTICALL_SPLIT_SWAP_NAME_1_B; } - } - } - - part { name: "swl_more"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; visible: 0; } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_MORE_ICON_L MULTICALL_SPLIT_SWAP_MORE_ICON_T; to: "background";} - rel2 { relative: MULTICALL_SPLIT_SWAP_MORE_ICON_R MULTICALL_SPLIT_SWAP_MORE_ICON_B; to: "background";} - } } - part { name: "txt_onhold"; + part { name: "txt_hold_swap"; type: TEXT; effect: SHADOW; scale: 1; description { state: "default" 0.0; visible: 0; - text { font, FONT_SLP_Roman; size, 36; align, 0.5 0.5; } - color: 255 255 255 255; + rel1 { relative: INCALL_HOLD_TXT_L INCALL_HOLD_TXT_T; to: "background";} + rel2 { relative: INCALL_HOLD_TXT_R INCALL_HOLD_TXT_B; to: "background";} + text { font, FONT_SLP_Roman; size, 26; align, 0.0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 204 204 204 255; color2: 0 0 0 255; } description { state: "portrait" 0.0; inherit: "default" 0.0; visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_L MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_R MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_B; } - } - } - - - part { name: "txt_timer"; - type: TEXT; - effect: SHADOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - text { font, FONT_SLP_Roman; size, 44; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; } description { - state: "end" 0.0; + state: "hide" 0.0; inherit: "default" 0.0; visible: 0; } - description { - state: "portrait" 0.0; - inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_TIMER_L MULTICALL_SPLIT_SWAP_TIMER_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_TIMER_R MULTICALL_SPLIT_SWAP_TIMER_B; } - } - description { - state: "portrait_icon" 0.0; - inherit: "default" 0.0; - visible: 1; - rel1 { relative: MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_L MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_T; } - rel2 { relative: MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_R MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_B; } - } - } - - part { name: "btn_bigend"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: SIX_BTN_BIG_END_L SIX_BTN_BIG_END_T; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R SIX_BTN_BIG_END_B; to: "background";} - } } - part { name: "btn_keypad"; + part { name: "btn_bg"; type: SWALLOW; scale: 1; description { @@ -591,12 +178,12 @@ group { description { state: "portrait" 0.0; visible: 1; - rel1 { relative: SIX_BTN_1_L SIX_BTN_1_T; to: "background";} - rel2 { relative: SIX_BTN_1_R SIX_BTN_1_B; to: "background";} + rel1 { relative: SIX_BTN_LAYOUT_L SIX_BTN_LAYOUT_T; to: "background";} + rel2 { relative: SIX_BTN_LAYOUT_R SIX_BTN_LAYOUT_B; to: "background";} } } - part { name: "btn_addcall"; + part { name: "btn_region"; type: SWALLOW; scale: 1; description { @@ -606,123 +193,78 @@ group { description { state: "portrait" 0.0; visible: 1; - rel1 { relative: SIX_BTN_2_L SIX_BTN_1_T; to: "background";} - rel2 { relative: SIX_BTN_2_R SIX_BTN_1_B; to: "background";} + rel1 { relative: 0 0; to: "btn_bg"; } + rel2 { relative: 1 1; to: "btn_bg"; } } } - part { name: "btn_join"; + part { name: "keypad_region"; type: SWALLOW; scale: 1; description { state: "default" 0.0; visible: 0; + rel1 { relative: KEYPAD_AREA_L KEYPAD_AREA_T; to: "background";} + rel2 { relative: KEYPAD_AREA_R KEYPAD_AREA_B; to: "background";} } description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: SIX_BTN_3_L SIX_BTN_1_T; to: "background";} - rel2 { relative: SIX_BTN_3_R SIX_BTN_1_B; to: "background";} - } - } - - part { name: "btn_speaker"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: SIX_BTN_1_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_1_R SIX_BTN_2_B; to: "background";} - } - } - - part { name: "btn_mute"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - visible: 0; - } - description { - state: "portrait" 0.0; + state: "show" 0.0; + inherit: "default" 0.0; visible: 1; - rel1 { relative: SIX_BTN_2_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_2_R SIX_BTN_2_B; to: "background";} } - } - - part { name: "btn_contacts"; - type: SWALLOW; - scale: 1; description { - state: "default" 0.0; + state: "hide" 0.0; + inherit: "default" 0.0; visible: 0; } - description { - state: "portrait" 0.0; - visible: 1; - rel1 { relative: SIX_BTN_3_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_3_R SIX_BTN_2_B; to: "background";} - } } }//parts programs { program { name: "show_portrait_mode"; signal: "set-portrait"; - source: "incall-split2-view"; + source: "incall-split-view"; action: STATE_SET "portrait" 0.0; - target: "swl_cid_background"; - target: "swl_cid_1"; - target: "swl_cid_2"; - target: "swl_pause"; - target: "swl_play"; - target: "txt_call_name_1"; - target: "txt_call_name_2"; - target: "txt_onhold"; - target: "txt_timer"; - target: "btn_bigend"; - target: "btn_keypad"; - target: "btn_contacts"; - target: "btn_join"; - target: "btn_speaker"; - target: "btn_mute"; - target: "btn_addcall"; - } - program { name: "show_portrait_swl_dim_wvga"; - signal: "show-swl-dim-wvga"; - source: "cid-wvga"; - action: STATE_SET "portrait_wvga" 0.0; - target: "swl_cid_2_dim"; - } - program { name: "show_portrait_swl_dim_hd"; - signal: "show-swl-dim-hd"; - source: "cid-hd"; - action: STATE_SET "portrait_hd" 0.0; - target: "swl_cid_2_dim"; - } - program { name: "show_conf_list_portrait"; - signal: "show-more-portrait"; - source: "incall-split2-conf-call"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; + target: "btn_bg"; + target: "btn_region"; + target: "swl_cid_unhold"; + target: "swl_cid_hold"; + target: "caller_info_hold"; + target: "caller_info_unhold"; + } + + program { name: "show_keypadbtn"; + signal: "SHOW"; + source: "KEYPAD_BTN"; + action: STATE_SET "show" 0.0; + target: "keypad_region"; + } + program { name: "hide_keypadbtn"; + signal: "HIDE"; + source: "KEYPAD_BTN"; + action: STATE_SET "hide" 0.0; + target: "keypad_region"; + } + + program { name: "show_after_keypad"; + signal: "SHOW"; + source: "CALL_AREA"; action: STATE_SET "portrait" 0.0; - target: "swl_more"; - } - program { name: "show_conf_list_portrait_onhold"; - signal: "show-more-portrait"; - source: "incall-split2-conf-call"; - action: STATE_SET "portrait_icon" 0.0; - target: "txt_timer"; - } - program { name: "hide_conf_list"; - signal: "hide-more"; - source: "incall-split-view"; - action: STATE_SET "default" 0.0; - target: "swl_more"; + target: "caller_info_hold"; + target: "caller_info_unhold"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; + } + program { name: "hide_caller_info"; + signal: "HIDE"; + source: "CALL_AREA"; + action: STATE_SET "hide" 0.0; + target: "caller_info_hold"; + target: "caller_info_unhold"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; } } } diff --git a/ui/call_edc/vcui-view-naviframe.edc b/ui/call_edc/vcui-view-naviframe.edc index 64eaf3c..2821dc3 100755 --- a/ui/call_edc/vcui-view-naviframe.edc +++ b/ui/call_edc/vcui-view-naviframe.edc @@ -14,17 +14,29 @@ * limitations under the License. */ - group { - name: "navigation_view"; - parts { - part { + name: "navigation_view"; + parts { + part { name: "base"; type: RECT; description { - state: "default" 0.0; - color: 0 0 0 0; + state: "default" 0.0; + color: 0 0 0 0; + } + } + + part { name: "swl_msglist"; + type: SWALLOW; + description { + state: "show" 0.0; + rel1 { relative: REJECT_W_MSG_LIST_L REJECT_W_MSG_LIST_T; to: "base";} + rel2 { relative: REJECT_W_MSG_LIST_R REJECT_W_MSG_LIST_B; to: "base";} + } + description { + state: "hide" 0.0; + visible: 0; } } - } + } } \ No newline at end of file diff --git a/ui/call_edc/vcui-view-quick-pannel.edc b/ui/call_edc/vcui-view-quick-pannel.edc new file mode 100755 index 0000000..49bb47d --- /dev/null +++ b/ui/call_edc/vcui-view-quick-pannel.edc @@ -0,0 +1,133 @@ +/* + * 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. + */ + +group { + name: "quickpanel"; + + parts { + + part { name: "background"; + type: RECT; + description { + state: "default" 0.0; + color: 20 20 20 255; + } + } + + part { name: "swl_cid"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: CALL_QUICKPANEL_CID_L CALL_QUICKPANEL_CID_T; to: "background";} + rel2 { relative: CALL_QUICKPANEL_CID_R CALL_QUICKPANEL_CID_B; to: "background";} + } + } + + part { name: "btn_left"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { relative: CALL_QUICKPANEL_BTN_MUTE_L CALL_QUICKPANEL_BTN_MUTE_T; to: "background";} + rel2 { relative: CALL_QUICKPANEL_BTN_MUTE_R CALL_QUICKPANEL_BTN_MUTE_B; to: "background";} + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { name: "btn_right"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { relative: CALL_QUICKPANEL_BTN_END_L CALL_QUICKPANEL_BTN_END_T; to: "background";} + rel2 { relative: CALL_QUICKPANEL_BTN_END_R CALL_QUICKPANEL_BTN_END_B; to: "background";} + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + + part { name: "txt_area"; + type: RECT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: CALL_QUICKPANEL_NAME_L CALL_QUICKPANEL_NAME_T; to: "background";} + rel2 { relative: CALL_QUICKPANEL_NAME_R CALL_QUICKPANEL_NAME_B; to: "background";} + } + } + + part { name: "txt_call_name"; + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 0 0; to: "txt_area";} + rel2 { relative: 0 1; to: "txt_padding";} + max: QP_NAME_WIDTH QP_NAME_HEIGHT; + min: QP_STR_MIN_WIDTH QP_NAME_HEIGHT; + fixed: 0 1; + align: 0 0; + text { font, FONT_SLP_Regular; size, 32; align: 0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 249 249 249 255; + color2: 0 0 0 128; + } + } + + part { name: "txt_padding"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: QP_CID_L_PAD 0; + align: 1 0; + visible: 0; + rel1 { relative: 0 0; to: "txt_timer";} + rel2 { relative: 0 1; to: "txt_timer";} + } + } + + part { name: "txt_timer"; + type: TEXT; + effect: SHADOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: 1.0 0; to: "txt_area";} + rel2 { relative: 1.0 1; to: "txt_area";} + max: QP_NAME_WIDTH QP_NAME_HEIGHT; + min: QP_STR_MIN_WIDTH QP_NAME_HEIGHT; + fixed: 0 1; + align: 1 0; + text { font, FONT_SLP_Regular; size, 32; align: 1 0.5; min: 1 0; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 98 161 22 255; + color2: 0 0 0 191; + } + } + } +} \ No newline at end of file diff --git a/ui/call_edc/vcui-view-reject.edc b/ui/call_edc/vcui-view-reject.edc new file mode 100755 index 0000000..3095362 --- /dev/null +++ b/ui/call_edc/vcui-view-reject.edc @@ -0,0 +1,72 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +group { + name: "reject_with_msg"; + parts { + part { name: "background"; + type: RECT; + description { + state: "default" 0.0; + color: COLOR_DEFAULT; + } + description { + state: "show" 0.0; + color: COLOR_DEFAULT; + } + } + + part { name: "swl_cid_background"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { relative: INCALL_BACKGROUND_CID_L INCALL_BACKGROUND_CID_T; to: "background";} + rel2 { relative: INCALL_BACKGROUND_CID_R INCALL_BACKGROUND_CID_B; to: "background";} + } + } + + part { name: "bg_alpha"; + type: RECT; + description { + state: "default" 0.0; + color: COLOR_BG_ALPHA; + } + } + + part { name: "swl_naviframe"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + fixed: 1 1; + min: 0 50; + state: "default" 0.0; + rel1 { relative: CALL_NAVIGATION_BAR_L CALL_NAVIGATION_BAR_T; to: "background";} + rel2 { relative: CALL_NAVIGATION_BAR_R CALL_NAVIGATION_BAR_B; to: "background";} + } + } + + part { name: "btn_create_new"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { relative: REJECT_W_MSG_CREATE_NEW_L REJECT_W_MSG_CREATE_NEW_T; to: "background";} + rel2 { relative: REJECT_W_MSG_CREATE_NEW_R REJECT_W_MSG_CREATE_NEW_B; to: "background";} + } + } + } +} diff --git a/ui/call_edc/vcui-view-single-call.edc b/ui/call_edc/vcui-view-single-call.edc index a7daf0d..3b74e4d 100755 --- a/ui/call_edc/vcui-view-single-call.edc +++ b/ui/call_edc/vcui-view-single-call.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group { name: "incall"; parts { @@ -31,22 +30,24 @@ group { type: SWALLOW; description { state: "default" 0.0; - visible: 1; + visible: 1; rel1 { relative: INCALL_BACKGROUND_CID_L INCALL_BACKGROUND_CID_T; to: "background";} rel2 { relative: INCALL_BACKGROUND_CID_R INCALL_BACKGROUND_CID_B; to: "background";} } - description { + description { state: "hide" 0.0; inherit: "default" 0.0; visible: 0; - } + } } - part { name: "bg_alpha"; - type: RECT; + part { name: "call_bg_img"; + type: SWALLOW; + mouse_events: 0; description { state: "default" 0.0; - color: COLOR_BG_ALPHA; + rel1 { relative: 0 0; to: "background";} + rel2 { relative: 1 1; to: "background";} } } @@ -59,7 +60,7 @@ group { } } - part { name: "swl_cid_dim"; // for held call dim + part { name: "swl_cid_dim"; type: RECT; scale: 1; description { @@ -82,91 +83,150 @@ group { rel2 { relative: 1.0 1.0; to: "swl_cid";} } } - - part { name: "txt_call_name"; // call name or number - type: TEXT; - effect: SHADOW; + + part { name: "swl_share_background"; + type: RECT; + description { + state: "default" 0.0; + visible: 0; + color: 50 42 37 255; + rel1 { relative: INCALL_BACKGROUND_SHARE_L INCALL_BACKGROUND_SHARE_T; to: "background";} + rel2 { relative: INCALL_BACKGROUND_SHARE_R INCALL_BACKGROUND_SHARE_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "caller_info"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_NAME_L INCALL_NAME_T; } - rel2 { relative: INCALL_NAME_R INCALL_NAME_B; } - text { font, FONT_SLP_Roman; size, 76; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 1; + rel1 { relative: CALLER_INFO_L CALLER_INFO_T; to: "background";} + rel2 { relative: CALLER_INFO_R CALLER_INFO_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; } } - part { name: "txt_contact_phone_type"; // contact phone type -> call number - type: TEXT; - effect: SHADOW; + part { name: "btn_hold_swap"; + type: SWALLOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_NUMBER_L INCALL_NUMBER_T; } - rel2 { relative: INCALL_NUMBER_R INCALL_NUMBER_B; } - text { font, FONT_SLP_Roman; size, 48; align, 0.5 0.5; } - color: 255 255 255 255; - color2: 0 0 0 255; + visible: 0; + fixed: 1 1; + rel1 { relative: INCALL_HOLD_L INCALL_HOLD_B; to: "background";} + rel2 { relative: INCALL_HOLD_R INCALL_HOLD_B; to: "background";} + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1 { relative: INCALL_HOLD_L INCALL_HOLD_T; to: "background";} + rel2 { relative: INCALL_HOLD_R INCALL_HOLD_B; to: "background";} + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; } } - part { name: "txt_timer"; + part { name: "txt_hold_swap"; type: TEXT; effect: SHADOW; scale: 1; description { state: "default" 0.0; - rel1 { relative: INCALL_TIMER_L INCALL_TIMER_T; } - rel2 { relative: INCALL_TIMER_R INCALL_TIMER_B; } - text { font, FONT_SLP_Roman; size, 48; align, 1.0 0.5; } - color: 255 255 255 255; + visible: 0; + rel1 { relative: INCALL_HOLD_TXT_L INCALL_HOLD_TXT_B; to: "background";} + rel2 { relative: INCALL_HOLD_TXT_R INCALL_HOLD_TXT_B; to: "background";} + text { font, FONT_SLP_Roman; size, 26; align, 0.0 0.5; text_class, TEXT_CLASS_SLP_ROMAN; } + color: 204 204 204 255; color2: 0 0 0 255; } description { - state: "end" 0.0; + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1 { relative: INCALL_HOLD_TXT_L INCALL_HOLD_TXT_T; to: "background";} + rel2 { relative: INCALL_HOLD_TXT_R INCALL_HOLD_TXT_B; to: "background";} + } + description { + state: "hide" 0.0; inherit: "default" 0.0; visible: 0; } } - part { name: "btn_bigend"; + part { name: "btn_bg"; type: SWALLOW; scale: 1; description { state: "default" 0.0; visible: 0; - fixed: 1 1; - rel1 { relative: SIX_BTN_BIG_END_L 1.0; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R 1.0; to: "background";} + rel1 { relative: SIX_BTN_LAYOUT_L SIX_BTN_LAYOUT_B; to: "background";} + rel2 { relative: SIX_BTN_LAYOUT_R SIX_BTN_LAYOUT_B; to: "background";} } description { state: "show" 0.0; inherit: "default" 0.0; visible: 1; - rel1 { relative: SIX_BTN_BIG_END_L SIX_BTN_BIG_END_T; to: "background";} - rel2 { relative: SIX_BTN_BIG_END_R SIX_BTN_BIG_END_B; to: "background";} + rel1 { relative: SIX_BTN_LAYOUT_L SIX_BTN_LAYOUT_T; to: "background";} + rel2 { relative: SIX_BTN_LAYOUT_R SIX_BTN_LAYOUT_B; to: "background";} } } - part { name: "btn_speaker"; + part { name: "btn_region"; type: SWALLOW; scale: 1; description { state: "default" 0.0; visible: 0; - fixed: 1 1; - rel1 { relative: SIX_BTN_1_L 1.0; to: "background";} - rel2 { relative: SIX_BTN_1_R 1.0; to: "background";} - } + rel1 { relative: 0 0; to: "btn_bg"; } + rel2 { relative: 1 1; to: "btn_bg"; } + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "keypad_region"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + rel1 { relative: KEYPAD_AREA_L KEYPAD_AREA_T; to: "background";} + rel2 { relative: KEYPAD_AREA_R KEYPAD_AREA_B; to: "background";} + } description { state: "show" 0.0; inherit: "default" 0.0; visible: 1; - rel1 { relative: SIX_BTN_1_L SIX_BTN_2_T; to: "background";} - rel2 { relative: SIX_BTN_1_R SIX_BTN_2_B; to: "background";} + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + visible: 0; } } + }//parts programs { @@ -175,18 +235,21 @@ group { source: "ALLBTN"; action: STATE_SET "show" 0.0; transition: DECELERATE 0.5; //LINEAR 1.0; - target: "btn_bigend"; - target: "btn_speaker"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; + target: "btn_bg"; + target: "btn_region"; } - program { name: "show_no_effect_allbtn"; signal: "SHOW_NO_EFFECT"; source: "ALLBTN"; action: STATE_SET "show" 0.0; - target: "btn_bigend"; - target: "btn_speaker"; - } - + target: "btn_hold_swap"; + target: "txt_hold_swap"; + target: "btn_bg"; + target: "btn_region"; + } + program { name: "hide_dim_cid"; signal: "HIDE_DIM"; source: "CID"; @@ -205,6 +268,19 @@ group { action: STATE_SET "hd" 0.0; target: "swl_cid_dim"; } + program { name: "show_share_bg"; + signal: "SHOW_SHARE_BG"; + source: "Share_BG"; + action: STATE_SET "show" 0.0; + target: "swl_share_background"; + } + program { name: "hide_share_bg"; + signal: "HIDE_SHARE_BG"; + source: "Share_BG"; + action: STATE_SET "default" 0.0; + target: "swl_share_background"; + } + program { name: "show_cid_bg"; signal: "SHOW_CID_BG"; source: "CID_BG"; @@ -217,5 +293,35 @@ group { action: STATE_SET "hide" 0.0; target: "swl_cid_background"; } + + program { name: "show_keypadbtn"; + signal: "SHOW"; + source: "KEYPAD_BTN"; + action: STATE_SET "show" 0.0; + target: "keypad_region"; + } + program { name: "hide_keypadbtn"; + signal: "HIDE"; + source: "KEYPAD_BTN"; + action: STATE_SET "hide" 0.0; + target: "keypad_region"; + } + + program { name: "show_after_keypad"; + signal: "SHOW"; + source: "CALL_AREA"; + action: STATE_SET "show" 0.0; + target: "caller_info"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; + } + program { name: "hide_caller_info"; + signal: "HIDE"; + source: "CALL_AREA"; + action: STATE_SET "hide" 0.0; + target: "caller_info"; + target: "btn_hold_swap"; + target: "txt_hold_swap"; + } } -} \ No newline at end of file +} diff --git a/ui/call_edc/vcui-view-ug-effect.edc b/ui/call_edc/vcui-view-ug-effect.edc index 80320af..7e0c078 100755 --- a/ui/call_edc/vcui-view-ug-effect.edc +++ b/ui/call_edc/vcui-view-ug-effect.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group { name: "ug_effect"; parts { diff --git a/ui/call_edc/vcui-view-volume-popup.edc b/ui/call_edc/vcui-view-volume-popup.edc index 312fea9..cec46b7 100755 --- a/ui/call_edc/vcui-view-volume-popup.edc +++ b/ui/call_edc/vcui-view-volume-popup.edc @@ -14,7 +14,6 @@ * limitations under the License. */ - group { name: "volume"; parts { diff --git a/ui/call_edc/voice-call-ui.edc b/ui/call_edc/voice-call-ui.edc index bf8daa9..ae5abc0 100755 --- a/ui/call_edc/voice-call-ui.edc +++ b/ui/call_edc/voice-call-ui.edc @@ -14,36 +14,24 @@ * limitations under the License. */ +#include "../src/include/vcui-view-layout-hd.h" -//#include "../vcui-view-layout.h" -#include "../vcui-view-layout-hd.h" - -#define FONT_SLP_Bold "SLP:style=Bold" -#define FONT_SLP_Medium "SLP:style=Medium" -#define FONT_SLP_Roman "SLP:style=Roman" - -//#define IMG_SRC_DIR "./wvga" #define IMG_SRC_DIR "./hd" images { - /*image: IMG_SRC_DIR/"08_voicecall_multicall_icon01.png" COMP; - image: IMG_SRC_DIR/"08_voicecall_multicall_icon02.png" COMP;*/ - - image: IMG_SRC_DIR/"./keypad/vc_keypad_btn_normal.png" COMP; - image: IMG_SRC_DIR/"./keypad/vc_keypad_btn_press.png" COMP; - image: IMG_SRC_DIR/"./keypad/vc_keypad_btn_icon.png" COMP; - - image: IMG_SRC_DIR/"vc_lock_left_bg.png" COMP; - image: IMG_SRC_DIR/"vc_lock_right_bg.png" COMP; - image: IMG_SRC_DIR/"vc_lock_accept_icon.png" COMP; - image: IMG_SRC_DIR/"vc_lock_reject_icon.png" COMP; - image: IMG_SRC_DIR/"vc_lock_bottom_bg.png" COMP; - } + image: IMG_SRC_DIR/"vc_keypad_btn_normal.png" COMP; + image: IMG_SRC_DIR/"vc_keypad_btn_press.png" COMP; + image: IMG_SRC_DIR/"vc_keypad_btn_icon.png" COMP; + image: IMG_SRC_DIR/"vc_lock_reject_message_bg.png" COMP; + image: IMG_SRC_DIR/"vc_lock_reject_message_arrow_open.png" COMP; + image: IMG_SRC_DIR/"vc_lock_reject_message_arrow_close.png" COMP; + image: IMG_SRC_DIR/"vc_reject_msg_icon.png" COMP; +} collections { - #include "vcui-view-incoming.edc" + #include "vcui-view-button-layout.edc" #include "vcui-view-incoming-lock.edc" #include "vcui-view-dialing.edc" #include "vcui-view-keypad.edc" @@ -51,9 +39,13 @@ collections { #include "vcui-view-multi-call-conf.edc" #include "vcui-view-multi-call-split.edc" #include "vcui-view-multi-call-list.edc" + #include "vcui-view-reject.edc" #include "vcui-view-naviframe.edc" #include "vcui-view-ug-effect.edc" #include "vcui-view-end-single-call.edc" #include "vcui-view-end-conf-call.edc" - #include "vcui-view-volume-popup.edc" + #include "vcui-view-quick-pannel.edc" + #include "vcui-view-volume-popup.edc" + #include "vcui-view-caller-info.edc" + #include "vcui-view-landscape-quick-pannel.edc" } diff --git a/ui/images/hd/icon/vc_call_bg_img.png b/ui/images/hd/icon/vc_call_bg_img.png new file mode 100755 index 0000000000000000000000000000000000000000..143174fc132478e5396db657e381f17692a1c9bf GIT binary patch literal 92521 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%0A>UAaen;d*-q(`x1_~@svpiZpB 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

cBndECa*dQGXSolY1~EeJxH%?Y@#EM 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℞7L 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 literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_call_not_saved_bg_img.png b/ui/images/hd/icon/vc_call_not_saved_bg_img.png new file mode 100755 index 0000000000000000000000000000000000000000..2a227c34525bffdedf6de968781e06de1d5b1d51 GIT binary patch literal 60603 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 A9smFU literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_caller_ID_default.png b/ui/images/hd/icon/vc_caller_ID_default.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb4f9098877a04e8d2df43783b0e43beb265c7b GIT binary patch literal 12473 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�E%l42r#+2PLl#4`9C*2!t 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

b_BJmvlEex{2om?Fg%?bY&B)6A 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 F{}1B+dcXhx literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_caller_info_icon.png b/ui/images/hd/icon/vc_caller_info_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..2eb5522fb1351451ca0230a0e2c6a60af66f330e GIT binary patch literal 4137 zcmaJ^X*iU9-<}!UWF5&CWlUrpV=QF`F^qi;*|H5LGnj=L86>+TTgpwLEFok~QPzqm z+hhwxN~FauB=T}UclYytczdtoxUT@&cmDl0D#BD7;Ce)>h8Z_ z_PuWzF<^3U5v3bA(rqc{=)t%^JOJZO@x((-NH`z74Ibwm67T}A1pu(Xh<1*2M+!k|QNZJ2|)g|Y=zA5S0}hX&$p zLoMyRLjAl@-Y}h0P%Q>}Pk@A{S38|)xQbQ?1Rg{s+2&4)^`6L{vj8;F1Rz^bqd0>0d0=>_n zZLo&_#M(P)!w7Ub6^%dy2L~$!t13|feGo_#3WZQsL8z#}_YiPe2$_y!z{#{@zZI}} znpYr^N+(jt(0xUmCnbok4cp7~KP8Z;|H_hS|FmhZVF(6}ia;tU@0au&XkqdHLrJ86 z(KNaZ{=fPDpTab|5Go#FgQrn~0=@PIckbAJC@NY%5Rao%0_`Xi|KDA-CQ#@U8i7KE z>f5R-A)yXLvNt7|_BYowV9B89PP2S8+PFx>IVxcrCczhJ{h z9}ExLTNS|q?{#vD6Dk_SA9P=xwtwTO!0)6c57Y;<9<06EBZW&hKNr5Z)4b6uW$tm@ z-1uDj=G3|LklpN!g^h@f#trv)uOv)$%%_m7u1kZT#n*ymbp-hzN339hrs^+m*Nc-d z&x>kaB)?k^PiSp@G?u?+3dK&;JaC}{jSU(r2?paU58liQl`>AR_DPf{Q+_@E%*|1@ z0l>oEH+Z)ZV%w6pc3(dzF={P$AkwBTZlmRT1nEWY zwbh&+&;-G)nx&%=G(>=XM2v{0{OS)9t-c5tjpYNXk8^(e&f$LdR>Y@m&CRBx_I%Au z#f_!}NLrycYx|6umkKIH;e)Q+eNR0k)OfNfJ#=TC2ldXK(SP0L>f+F7mY~*LOM(td zn8VXxEUSmj@e-?k2a8=cid9IZm6vEL4nhW-TjdnEZOk>!7Oa_NuygnUg}-8jb8GLn zO#AZ*9AX9JD!7RH_@8P%Dqgw zH2qC0N_j}VkXXnL@Wq%qw?qe26E!V#Nle{ExxFQkNWdrTP*i&VW?_E_VJy z0BYleYe~5@hn$v)*tOlbXL{~RP{>Nv^x#qjXb5;AQ_LaGT0;_QRxj15E+)hy?Zly# z=5$x(cyU=zs??exoZFBau&Q})*jIX1SlxrOH7(AEeuM}dJ5%2wy1e-GzNZLI%!0q2 zgF@P|uj6f%$+F_GKDkmkT!cFz3x$LSpihZF$VVa-t+~xy`kwPWOKjs3jjM&s1|*R$ z>!B@uqp5=)jo-7px%k5SB;-v25lvxI92$2l8@7~4TZJY*oblz-(@{WP2gJxJ7D4wV zP3zvOw67Q4=Tooq<)yJ+zA@=YpG+9b57f(ey2%WZ30CcX`{q#-vqFRJ#ujb%8TBCZ z!Fru%J;$NW+!EGKnQYhFmkSzFkrNG~qVeh?=~AV`HVSAFTb{BXF&#h46~Yu!BEDdr zc&`Hxav2W`S0$$WPI^uIIEo9gEIm0pUY@~w@M%7qRkVO$v;`y<{*e&D^FE@8I6hg@ zD4;#vwOg$YkhqykF8}LZX^1I{n8+$yS?S?A7x6nYAwNcZM}FK<&qs}V%ZmBXU^qN5 z*-&45bR-~YOmAeecBS0om43Ycp;kYFQX0?4?YTF1`@xbdH^~Bf zVs`geEMA^h0eQ2Ik32pv&aWCpI4(^sIh?#P-D@UL8==~fZe`FPiwB5_Y;SVMRo65- z*Ns>71f16p?*h1wnJLO{E=vix+3J07bF6_LyjDP_m(8q6z8KJvJ)HD7M+uYGly)CF za_Dw}{FZB3M(V7%E>>N)!hZ1X($aDSSA~8r=#~FfXh2w?Npw?5&!g*zu4`aYSEI3+G1&EHfY zMmK58rVRM#5dD$eG=Su|(Mv;D)}0vzLF~JcaK)VUnN5$7qu!EI@T}JHwB&i=gIoo! z0@zrfd`6-q*SbUVyl;SJmQ32#&T$(wR)~?sQQS8yIv5xfXJz4c3z&zlB1yqL%b$%F z3USAb7qdvkKXHP-W|fU~8;TY?+Mmb&5hi`*vOE{;k(T9WYQONC+@O^%s>d%1)dFe^ zVn_>nXFk6%5cq@5%IAce;dC4UADaN2;)|giUT?5+_9fg>KEx%p1O>Rg;L&-jJZP@S z3_Jk7fhI_!78IV)+Lm zEuWFKP-Mji13WZ*Whf!wU!2K#to|cwCgIXoi5K!+a+c0pVYU;T>P!5HtH(GaciZxj z<@XpP7nw#VJo9OS;}j%}>0kW?Pcu0mFi;^@YpG;StD)vUv6=c<)_-VPkM*b1l!4F% z>RPywt5LGY%u;dAc3aHry97*Jd$pAoOLVaVt^4_QG$Urc(x>=!W+}>*>DM(EF4*3- zstQNf5z#|@(geMSscT=T#zJ}XJ4=}l5zV}Dot+>&vu=)`pY=WW+yL87Oyg_@3|xM) zk05Iowb0~uwVFKkIbx22J&B?Ngkkoye3=RHUM8{Sc#!w*^;q zRgNn$4`k#NwU*~Frwh^A`st>iSa3upyVeR{s;g-%05<*-j^16WtR1*C>D)B;sS56x z>A^hp{hPTbFQ2fpR}w);L+02T3>@)hC#joxgh7{3kmM7{{ZOy<rQ^;CT8K}8c*0%vDHuutFgC#8v-&IQcG!}19iesYYVt`NHfc)MXm zM-SS`O%aF3)>|j6Geb@MKO}v9Fg7tdZHF}hD!jNZp~iXi!N>S2BHr zf0dnIx0Ih=O^9V+xH^ zT{KWdM?)w;O$xu^0pB>@57$k=Se0#`)ypqa>xUNFZ5Op1Nna!(ZascSMFAqOg^zG; z-e7^6H#%Q}-pQ1GkZw5X)!v>5We$`@+rB)$sF)ufj~QoI>L?R*PB4HRysGWK+q~0t zHuX$PQpwBL5;sooULa450;#9K+c{zbA5FH(RxIB5H7rvMzVJB#OTEMGXq%zbO3t0oGdF(9@mSQo%JJba18-QNF-aMf6RrrM)rQ7qOhJVk|L8LY2MSM9G!4gI=Kn%7vE zJJf=C_YkMrX@HMv-p&~RS@l#&u>reKP?V6~kR zU+i6?8QFuAMIs}L`O0@vW-8Q#EHMh0?32AcB@vXMMAXgwa(_^yJh+ zyH4whre#nS%i;^rDM}KMp-CEj{jFg}ZQ^=MT~5^bBhHg`V;5?PmN`*0q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6;1baaSW-r_2$Mwt`-H6*2MfJFV&v?jo%d0sa^a!bp~gb z&kuf=h!ygM-kx5XXPU|2RmrYI{>ARXvL22WQ%mvv4FO#lSfVE_OC diff --git a/ui/images/hd/icon/vc_icon_conf_list_unhold.png b/ui/images/hd/icon/vc_icon_conf_list_unhold.png deleted file mode 100755 index 330c3ed411310de49c68ab4576cf63b0b973be2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)YiFcijb#Yki^$P+lp zWH2%D6?g*%AHdZxxG+27j)@Q86R_gy}bp_y~>H_OTJM4wEY36 z^iV}a3vSw2FqA+Gv_K2=KZ4%0t*Df80$?+_xp>kAysbO8vGtu!>8vOU3W8vXVrJXc z%6(6TMwz; lLJ(+y7HEMMXy^JAU;y1LVPcwimQ?@%002ovPDHLkV1nV{$3p-B diff --git a/ui/themes/vc_reject_with_msg_control_top_bg.png b/ui/images/hd/icon/vc_icon_hold_call.png old mode 100755 new mode 100644 similarity index 91% rename from ui/themes/vc_reject_with_msg_control_top_bg.png rename to ui/images/hd/icon/vc_icon_hold_call.png index adb35a042e7e12c3996d2f3424571d5797a83a8d..9bd2666a784567e05a525f5aeedcfcd40f56fe68 GIT binary patch delta 200 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 literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_icon_unhold.png b/ui/images/hd/icon/vc_icon_unhold.png deleted file mode 100755 index 8d28fa476c59cf16744ef4367dbaa1c2c07da995..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3675 zcmV-h4y5skP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000AqNkldgM%&WAybLeC_vU<% zUAXV&i{QUg)MNdypnV6VhdV1Qe)oLFDU;VWLp9c}S)(8hK@Cw&;$!4>xtgLJT zcY(b)2yEE9aC>_@i;IgCi^Vt7>GUJubKqsYjqyoeUmuR+FgrW@ers!MMMMTgq*;65 z|3vtos8*|tj*gPg=MSv4gVx%0?SVc7UU6`6!0_-e8yg$zz+G$Yq4q!@bai!6C=@6Z z3b#_J)DI%^Ktyh85A;cYe?PmsyDyE8j}NxAv{Xdow)Vg}IX*sSWMqW-`T4!eSZ`_% ztbJ9P;`6?Y6eI zLtqeS=vWx(3jCL`uxzcp1AL8qVIOpMcCxy08+&?ka`L+8c@-5{pU7$=k$A1Sxw)bd_RnS_k$6i)DnTrs zjH@-z^IT)h9T9mLUqt4JIYIqaE+ryWUI2{#ds~b~ITfe^6&0ugRiFw~ tRGKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0006aNklUTJNCX9*`F*imF4ODvXf~U*WHNaOtN_tK z?bqw|S=V)q*G8j}v2EL^>H#nxsN+e+Vlf(x29D!oDwWC(umj}%Fg!EOrc5S7yWOVU zZqMiQ`2lcuoQT1KJyj|d`u%=nZEbBi9*-XaH6Ri=7$6dfP^;A#4u@x|)#|!sSp(pF z;9yUQM1p3sNx$FE&&|y}2Ob02z`>q!xg6Wu+iY!ZUC3s$`@rpK?tjLwvRqhLz;T>Y zjYeZ79*@5QE`w#{HLNG&Zb-3J`tT;O0&sZ@$qt3|KZE0)XUU0@S98#vfg zp-`aH>9Db}aj{e?T?q~BX>oD!TesW&Fga(1zas+BFn0}7fNy& zW8MRoMWpyAsNasi1NTJarmBAY*Ji)K&wy1`-JkY=bKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000AWNklo2XizRSrb~okL7LFJ+@0@l%y9SJk38>v z&s{=|Mgv0obcq5HC;~;G2oyx12o!-LP!NG4Py~uVK?I6G5qNJDeZAl3^F^5XF*7SpjIg0I zFdB^_o6Rco^YhQTySpRI?01?#GGZ>&YPC1FKP#0=SXfxV*49=TKvLKBirEo1;#y6+ z3wym@Y;0^G9*;i?27{x_{G81kR!-T*gu`KInugWY)quz28E58UX6_P!EiySdi9(^^ zo|%~mG4mKRdu0aRF$3?SP$*z-ZVtP!k&zK(GMTQGm6hS1o}O`L9+U{T$;rtH78e(>wzgJjZhOiS;TGua?L{mWgQjVo za5(&unO`vT1Bq}OwJ;u!-_*j_%>2|!wa_;EuV^%id_M15US59EtcCqD1KXrjDq(49 z37eanM*tGHYoVDl(3S#kNTpJko}NZ7m)i%B(RKYoZXzuZ3WcC)8e*~7U|(Nfq!YE! z5s&mICMJ;2=Wl9Z1b|OwV4EBq9AI{K7CSpTB>*V^rxM{7@caGP-rk0)s@|cYp)mj< z0B(tJd$o{mY9WA!65%$f*XuQx%k|dncAx+6V=HhzWtYp9Wae|*yw4*5|00jV+`**mN1vUVD zZOW@zb&*yT_}8N-5%_O$JtLw$0N?F0m=%kNs}a#hBKiX0+D=;nD+t^tq6~lw*pN;N zJZf%BDzGt12jW^KA`L*%2_;-HQC$6x`gH||V3xpQ^IKPi!!TN41;Bd%Kj2UlgW`JG zY!Lf!I7Ypdb9b_S+5X2x_X+vCs|XZKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002%NklOo11=>1YW|`c>;VD@ zAbFKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00073NklIPn4^vvDPb+)r^DN}4 zQhSJwz1GGU(`hNuhq9+>U&mhhQ1Vnti0q-aOwD$`dz1Tp-@WI&gg7VPJ->YCp7Xz- zFEbvG3E3VHxCsCOAOHk_01yBIKmY`5Gp2#V;m{;3543{IPlfwYVz=4Ke2l(Y90Dw0dK3`le$Tff=2{YFK@*x8# z0`D~ZS}s(eO8{Bmg_;BE8vbj*De%k%fN2gw4Q|i>pIb=cE8rXONzD=0lOBX74Il?> z0h?1$aW@LY>%X|=KZs0(7_zD_U&Ff*Y=HGo4LoZzTy?5mEln}j`}pfd{fpY*gl4FaZ1E|DR0!guQ902N}-vJ8=0#Jyn4W`~~0JJfC z<~I#_+%^r)$V*d!n*b010zd!=00AHX1VFI%djP$_ebN-Rx|09^002ovPDHLkV1f)L BGIam| literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_more_join.png b/ui/images/hd/icon/vc_more_join.png new file mode 100755 index 0000000000000000000000000000000000000000..f0008d3f46bd1c979932a99fdc0113c3cf84fa12 GIT binary patch literal 3415 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 delta 66555 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 literal 0 HcmV?d00001 diff --git a/ui/images/hd/vc_lock_accept_icon.png b/ui/images/hd/vc_lock_accept_icon.png deleted file mode 100644 index a4367c624e0395955b50800f5b1597f7ae4264be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1276 zcmVR#tvHIXMZj zoK8Pbv-ML18XVA>-^mKCOEC4vcO%H-svOCS_B z7!2+y5lp*?Oo>)?s)30&S1PEgs>%~P^kx{QU2&7hqN1Wqu_w{#bYMxnlEAD;c&;WT zfjO9;pZ7{}qEIOGKv7_Jc6NeNoG2qBLx)}rN&&O%bUK4loebT&+foIL_M%&!R;z`V zL3GT03C~#pz$Nz&MYo2 z;?{;M8U+X!%onILN*v*esxhF#!om@PI-{z6rMtLmy$r(~sG|5r>@+?;et>gec6Ro) zRGJrwvQl^~Us3TI*GtLD8XBxbWT#}+8XBwwdXH--kl*irrV1;8^m=_K;X=59Rmt9U zImvcPqH7H;RtirJ$HvBf;vNilD38bUQ1MpcRI|UoAHdC;$-rgQpL&ktANwNksGc)s24b6#~*4EZ3 z(jESZiHYZm2ZL0yw6x@r3l6nl;JAi{h7KXUAwuD3&f4B`s0RZvG&J-*8E`aQ8*P1k z{inLRx|`I4K`PkX+&mHjXLNMbgb4*&Y5%p+Lg61{F4@!5^Cp(HWCsIb zHk4+uLXa6Aq`-+2r^8 zgRFciPt*#YC>0kM_hw~f-9Xm*A=4$~C2|E%lEo&k*W1pm2`59acGO9&m15N%x7%$= zFcd2+$kSSU<3+W{<8dY+OYTrPju8+BZlg}DUO+ZdIr0?~KA-O?_s}V+>~QCycCI8< z{eg#0xds6o+cZ8U}fi7AzZCsS>JiY|D%IEGZ*dUJInCzByVYvTJY7A`t(SgKdgKJiJdP@=tv zlT}*RrRL!5gG+wcRVbD|P`~>qefr!@k89Xp?MS`;Cg@#kUv1gBxSPt=)ygZ;g=+SU=?;zy8o-#b zvB?2~nV47`p_qk>i4}r5L|C{WSU`hA1cDU;1T-MnVSz#b2tPQ#kBNt2J-eXcm5mnn QfqrA~boFyt=akR{09FxaX#fBK diff --git a/ui/images/hd/vc_lock_left_bg.png b/ui/images/hd/vc_lock_left_bg.png deleted file mode 100644 index 539d1e161d3ef4ff3a67b918e1b19d2113cfa884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2726 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 B|Lp(( diff --git a/ui/images/hd/vc_lock_reject_icon.png b/ui/images/hd/vc_lock_reject_icon.png deleted file mode 100644 index 526b99cec6748d4610a20d85c5815a56db616cb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1906 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 delta 229 zcmew;_ESu;Gr-TCmrII^fq{Y7)59eQNC$v02OE&=6a2JxqvCw7`X!z&jv*Dd-rPCJ z*(T7$m7lK8J!|+_GWWCgfvwZjbsB(DA`U>3O94o-0(CVo!Ste=pwVCjRDET|jeF17 nV5Vvy40xb^7wFXg|Ct%wMff_B{;p#Lav3~b{an^LB{Ts5;vhdg diff --git a/ui/images/hd/vc_lock_reject_message_bg.png b/ui/images/hd/vc_lock_reject_message_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..4142cbc1463cec4fbfe0f6aeb3c980d336236ede GIT binary patch literal 3489 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 Q#S8#LT{E33h)c}B0Qc4l2mk;8 literal 0 HcmV?d00001 diff --git a/ui/images/hd/vc_lock_right_bg.png b/ui/images/hd/vc_lock_right_bg.png deleted file mode 100644 index 6f2f35e9a2d96fc300e5d640ecc8f382e1a19ab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2208 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 diff --git a/ui/images/wvga/icon/vc_record_icon.png b/ui/images/hd/vc_reject_msg_icon.png old mode 100644 new mode 100755 similarity index 80% rename from ui/images/wvga/icon/vc_record_icon.png rename to ui/images/hd/vc_reject_msg_icon.png index 470f482dc5916ad497efb3a1053a316c17470edb..24759b0abd7e529e992ba9276f367ba8e0fbc1a9 GIT binary patch delta 668 zcmV;N0%QHI8O|E8zY2c>c}YY;RCwC#n%j+|KoCXmSQ7wbKu54Rg0&?A@MHiP*b(dy zft>+t1a<%|nGB{gXlKx5;Qc99Wd`$pSfeh5osz?32OT_J|J-!e?z6XsBY2+#z?Vt1ATJ?of|2lQsoA>)`iN=7uS9Q z_v;W$XYqfpT8cYj5Psk7+cF;RPhAj?0a7RKsiL#^S0jjfsyG@cHf>#Y9f&F!x+ZZ? z5oaTX$2Nc52gEDf?S$g)Bz_v-oyTus)zt!(D2xBgNRii#^Y~_AU_mU11+gF&#DW0-1^^T`krp$4=CrZ^0000cp^apX+t1^Gs9fp%AbM1QhOWd?{{E#E{7O2G+=XFxBn;Za(a= zGw)8!jQdcDdr|=jNI(J-kbndvAOQ);jn(rf{23uR_knfb74Ux;=mRIfH{cWS!BkJ$ zYcKC}wG?LN8>*KBsDWk)&bLHtFC{xxHB+@?RohF+wnS_R&Vi=AzQ|mPL4buhIA~I` zvv%@-8)vH4q-1k&04&@Y2v9G=(SAz*1Y95cDcK?%O`lBXka=ikMO?+qPnKD?5TL)E z()c!r>DW$b3@m?p=HY(*J{8&A5K&LYhKN2FdEedF!KkJ!E5a)$2; zx86%KWQ7&R<3X4G$lwBYJpmW6D>)Ckej)(%2tHTvY}RtyNARVBmy+|)GnY~w;;@3X z42Lr=sly7^BYIRQ)R)HP6;Z@pxzN4@zIiHsJ@={CddR=XGpD;Oo`~bdATiv$x wE!OHv{Ph-)fCMBU0SQPz0uqpb{BQMp06!(RSQ=QgNB{r;07*qoM6N<$f=1fzga7~l diff --git a/ui/images/wvga/icon/vc_caller_info_icon.png b/ui/images/wvga/icon/vc_caller_info_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..2eb5522fb1351451ca0230a0e2c6a60af66f330e GIT binary patch literal 4137 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 Hu0mjfLQBrJ diff --git a/ui/org.tizen.call.desktop.in b/ui/org.tizen.call.desktop.in deleted file mode 100755 index b2f7cf7..0000000 --- a/ui/org.tizen.call.desktop.in +++ /dev/null @@ -1,10 +0,0 @@ -Name=Call -Type=Application -Exec=${PREFIX}/bin/voice-call-ui -MimeType=tel.uri -nodisplay=True -Version=0.2.0 -X-Tizen-TaskManage=False -X-Tizen-Multiple=False -X-Tizen-Removable=False -X-Tizen-Svc=http://tizen.org/appsvc/operation/call|tel|NULL diff --git a/ui/org.tizen.call.png b/ui/org.tizen.call.png new file mode 100755 index 0000000000000000000000000000000000000000..978e830f2dc575f0a1c3e2a9434d4af7d47414a8 GIT binary patch literal 5942 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 + + + Sung Joon Won + Jungmin Kim + Voice call Application + + org.tizen.call.png + + + + + + + diff --git a/ui/po/de_DE.po b/ui/po/de_DE.po index 619d86e..966dfbe 100755 --- a/ui/po/de_DE.po +++ b/ui/po/de_DE.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Annehmen" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Stumm" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Verbindung wird hergestellt..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Abgelehnt" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Gespeichert" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Sendevorgang läuft..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Ablehnungsnachricht erstellen" @@ -50,7 +68,7 @@ msgid "IDS_CALL_BUTTON_ACCEPT" msgstr "Annehmen" msgid "IDS_CALL_BUTTON_ADD_CALL" -msgstr "Anruf hin." +msgstr "Anruf hzfg." msgid "IDS_CALL_BUTTON_CONTACTS" msgstr "Kontakte" @@ -67,14 +85,11 @@ msgstr "Halten" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Konferenz" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Stumm" - msgid "IDS_CALL_BUTTON_REJECT" -msgstr "Abweisen" +msgstr "Ablehnen" msgid "IDS_CALL_BUTTON_SPEAKER" -msgstr "Lautsp." +msgstr "Lautspr." msgid "IDS_CALL_BUTTON_SPLIT" msgstr "Teilen" @@ -98,10 +113,10 @@ msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR" msgstr "Systemfehler" msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" -msgstr "Alle eingehenden Anrufe gesperrt" +msgstr "Alle eingehenden Anrufe blockiert" msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" -msgstr "Alle ausgehenden Anrufe gesperrt" +msgstr "Alle ausgehenden Anrufe blockiert" msgid "IDS_CALL_POP_CALLFAILED" msgstr "Anruf fehlgeschlagen" @@ -197,7 +212,7 @@ msgid "IDS_CALL_POP_PHONE_NOT_INITIALISED" msgstr "Telefon nicht initialisiert" msgid "IDS_CALL_POP_PS_REJECTED" -msgstr "4422341526 abgelehnt" +msgstr "%s abgelehnt" msgid "IDS_CALL_POP_REDIALLING" msgstr "Wahlwiederholung..." @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Dienst unzulässig" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Nur SOS-Anruf. SIM-Karte einsetzen, um Netzdienste zu nutzen" +msgstr "Nur SOS-Anruf.\nSIM-Karte einsetzen, um Netzdienste zu nutzen" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Teilen fehlgeschlagen" @@ -301,23 +316,11 @@ msgstr "Nicht genügend Speicher. Löschen Sie einige Elemente" msgid "IDS_CALL_SK3_END_CALL" msgstr "Beenden" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Ton" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Service nicht verfügbar" msgid "IDS_CALL_SK3_KEYPAD" -msgstr "Tasten-\nfeld" - -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Verbindung wird hergestellt..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Abgewiesen" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Sendevorgang läuft..." +msgstr "Tastenfeld" msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Tastatur ausbl." @@ -328,6 +331,183 @@ msgstr "Rec" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Unbekannten Anruf abgewiesen" -msgid "IDS_CALL_POP_SAVED" -msgstr "Gespeichert" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Umschalten" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Nummer auswählen" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "in %d Tagen" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Morgen" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "In einer Woche" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "%s halten" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Anruf beenden mit %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Anruf annehmen nach" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Alle Anrufe beenden" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Rauschverminderung aus" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Rauschverminderung ein" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Tiefen-Verstärkung" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Höhen-Verstärkung" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Optimiert für linkes Ohr" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Optimiert für rechtes Ohr" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Einschalten der Rauschverminderung bei aktivierter Extralautstärke nicht möglich." + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Einschalten der Rauschverminderung nicht möglich, wenn Kopfhörer angeschlossen sind." + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Einschalten der Rauschverminderung nicht möglich, wenn ein Bluetooth-Headset verbunden ist." + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Einschalten der Rauschverminderung während Breitband-Anrufen nicht möglich." + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Um diese Funktion zu nutzen, müssen Sie die EQ-Optimierung unter “Anrufeinstellungen” aktivieren." + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Gesprächston-EQ kann nicht aktiviert werden wenn der Lautsprecher eingeschaltet ist." + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Gesprächston-EQ kann nicht aktiviert werden wenn Kopfhörer angeschlossen sind." + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Gesprächston-EQ kann nicht aktiviert werden wenn Bluetooth-Headset eingeschaltet ist." + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Zusätzlicher Lautstärkebereich kann nicht verwendet werden, wenn Kopfhörer oder BT-Headset verwendet werden." + +msgid "IDS_CALL_POP_CALLING" +msgstr "Anrufen..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Konferenzanruf verwalten" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Gesprächston-EQ kann bei aktivierter Extralautstärke nicht aktiviert werden." + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Gesprächston-EQ kann während Breitband-Anrufen nicht aktiviert werden." + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Ton" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Einschalten der Rauschverminderung nicht möglich, wenn Lautsprecher eingeschaltet ist." + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Ablehnungsnachrichten" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Sprachanruf" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Videoanruf" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Senden via" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Tastenfeld" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Beenden" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Lautspr." + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Audioquelle" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Telefon" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Stumm" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Zu Kontakten hzfg." + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Anrufen" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Videoanr." + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Nachricht" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Zu Kontakten hzfg." + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Nachricht" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Tausch." + +msgid "IDS_CALL_SK3_MORE" +msgstr "Optionen" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Datei über ChatON freig." + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Senden via" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d Mal" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Gruppenanruf (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Gespeichertes Bild" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Gespeichertes Video" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Foto aufnehmen" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Live-Video" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Kontakt anz." + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d verpasste Anrufe" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Anr. in Abwesenheit" diff --git a/ui/po/el_GR.po b/ui/po/el_GR.po index 4923d0b..9b8c08c 100755 --- a/ui/po/el_GR.po +++ b/ui/po/el_GR.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Αποδ." + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Σίγαση" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Σύνδεση..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Απόρριψη" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Αποθηκεύτηκε" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Αποστολή..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Δημιουργία μηνύματος απόρριψης" @@ -67,9 +85,6 @@ msgstr "Αναμονή" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Ένωση" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Σίγαση" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Απόρριψη" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Δεν επιτρέπεται η υπηρεσία" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Μόνο κλήση SOS. Τοποθετήστε την κάρτα SIM για πρόσβαση στις υπηρεσίες δικτύου" +msgstr "Μόνο κλήση SOS.\nΤοποθετήστε την κάρτα SIM για πρόσβαση στις υπηρεσίες δικτύου" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Αποτυχία διαχωρισμού" @@ -301,24 +316,12 @@ msgstr "Δεν υπάρχει αρκετή μνήμη. Διαγράψτε ορι msgid "IDS_CALL_SK3_END_CALL" msgstr "Τερμ.κλ." -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Ήχος" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Μη διαθέσιμη λειτουργία" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Πληκτρολ." -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Σύνδεση..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Απόρριψη" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Αποστολή..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Απόκρ. πληκτρ." @@ -328,6 +331,183 @@ msgstr "Εγγρ." msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Άγνωστη κλήση απορρίφθηκε" -msgid "IDS_CALL_POP_SAVED" -msgstr "Αποθηκεύτηκε" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Αλλαγή" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Επιλογή αριθμού" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "σε %d ημέρες" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Αύριο" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Σε 1 εβδομάδα" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "Θέτοντας %s σε αναμονή" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Τερματισμός κλήσης με %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Αποδοχή κλήσης μετά" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Τερματ. όλων κλήσεων" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Απενεργοποίηση μείωσης θορύβου" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Η μείωση θορύβου ενεργοποιήθηκε" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Ενίσχ.χαμηλών τόνων" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Ενίσχ. υψηλών τόνων" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Βελτ. για το αριστ. αυτί" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Βελτιστ. για το δεξί αυτί" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Δεν είναι δυνατή η ενεργοποίηση της μείωσης θορύβου όταν είναι ενεργοποιημένη η επιλογή της επιπλέον έντασης" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Δεν είναι δυνατή η ενεργοποίηση της μείωσης θορύβου όταν είναι συνδεδεμένα τα ακουστικά" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Δεν είναι δυνατή η ενεργοποίηση της μείωσης θορύβου όταν είναι ενεργά τα ακουστικά Bluetooth" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Δεν είναι δυνατή η ενεργοποίηση της μείωσης θορύβου κατά τις ευρυζωνικές κλήσεις" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Για να χρησιμοποιήσετε αυτήν τη λειτουργία, θα πρέπει να επιλέξετε το στοιχείο “αυτόματη βελτιστοποίηση ισοσταθμιστή” από τις Ρυθμίσεις κλήσης" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Δεν είναι δυνατή η ενεργοποίηση του ισοσταθμιστή ήχου κατά την κλήση όταν το ηχείο είναι ενεργό" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Δεν είναι δυνατή η ενεργοποίηση του ισοσταθμιστή ήχου κατά την κλήση όταν είναι συνδεδεμένα τα ακουστικά" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Δεν είναι δυνατή η ενεργοποίηση του ισοσταθμιστή ήχου κατά την κλήση όταν είναι ενεργό το ακουστικό Bluetooth" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Δεν είναι δυνατή η χρήση του εύρους επιπλέον έντασης όταν είναι συνδεδεμένα ακουστικά ή ακουστικό BT" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Κλήση..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Διαχείριση τηλεφωνικής συνδιάσκεψης" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Δεν είναι δυνατή η ενεργοποίηση του ισοσταθμιστή ήχου κατά την κλήση όταν έχει ενεργοποιηθεί η επιπλέον ένταση" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Δεν είναι δυνατή η ενεργοποίηση του ισοσταθμιστή ήχου κατά τις ευρυζωνικές κλήσεις" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Ήχος" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Δεν είναι δυνατή η ενεργοποίηση της μείωσης θορύβου όταν είναι ενεργοποιημένο το ηχείο" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Απόρριψη μηνυμάτων" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Φωνητική κλήση" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Κλήση βίντεο" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Κοινόχρηστο" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Πληκτ/γιο" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Τερμ.κλ." + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Ηχείο" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Πηγή ήχου" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Τηλέφωνο" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Σίγαση" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Προσθ. στις Επαφ." + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Φωνητική κλήση" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Κλ.βίντεο" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Μήνυμα" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Πρ. στις Επαφές" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Μήνυμα" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Εναλλ." + +msgid "IDS_CALL_SK3_MORE" +msgstr "Περισσότ." + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Κοινή χρ.αρχ. μέσω ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Κοινόχρηστο" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d φορές" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Ομαδική κλήση (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Αποθηκευμένη εικόνα" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Αποθηκευμένο βίντεο" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Λήψη εικόνας" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Ζωντ. βίντεο" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Προβολή επαφής" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d αναπάντητες κλήσεις" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Αναπάντητη κλήση" diff --git a/ui/po/en.po b/ui/po/en.po index c0c7a85..771ec70 100755 --- a/ui/po/en.po +++ b/ui/po/en.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Accept" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Mute" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Connecting..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Rejected" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Saved" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Sending..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Create reject message" @@ -67,9 +85,6 @@ msgstr "Hold" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Join" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Mute" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Reject" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Service not allowed" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "SOS call only. Insert SIM card to access network services" +msgstr "SOS call only.\nInsert SIM card to access network services" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Split failed" @@ -301,24 +316,12 @@ msgstr "Not enough memory. Delete some items" msgid "IDS_CALL_SK3_END_CALL" msgstr "End call" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Sound" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Service not available" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Keypad" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Connecting..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Rejected" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Sending..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Hide keypad" @@ -328,6 +331,183 @@ msgstr "REC" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Unknown call rejected" -msgid "IDS_CALL_POP_SAVED" -msgstr "Saved" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Switch" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Select number" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "in %d days" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Tomorrow" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "In a week" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "Putting %s on hold" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Ending call with %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Accept call after" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "End all calls" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Noise reduction off" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Noise reduction on" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Boost low tones" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Boost high tones" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Optimised for left ear" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Optimised for right ear" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Unable to turn on noise reduction while extra volume is enabled" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Unable to turn on noise reduction when earphone connected" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Unable to turn on noise reduction when Bluetooth headset is on" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Unable to turn on noise reduction during wideband calls" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "To use this function, you have to check optimise EQ for me under call settings" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Unable to enable in-call sound EQ when speaker is on" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Unable to enable in-call sound EQ when earphones are connected" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Unable to enable in-call sound EQ when Bluetooth headset is on" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Unable to use extra volume range when earphones or BT headset are connected" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Calling..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Manage conference call" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Unable to enable in-call sound EQ while extra volume is enabled" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Unable to enable in-call sound EQ during wideband calls" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Sound" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Unable to turn on noise reduction when speaker is on" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Reject messages" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Voice call" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Video call" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Share" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Keypad" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "End call" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Speaker" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Audio source" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Phone" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Mute" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Add to Contacts" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Voice call" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Video call" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Message" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Add to Contacts" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Message" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Swap" + +msgid "IDS_CALL_SK3_MORE" +msgstr "More" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Share file via ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Share" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d times" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Group call (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Saved image" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Saved video" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Take a picture" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Live video" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "View contact" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d missed calls" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Missed call" diff --git a/ui/po/es_ES.po b/ui/po/es_ES.po index 15ca367..fa4ae2a 100755 --- a/ui/po/es_ES.po +++ b/ui/po/es_ES.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Aceptar" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Silencio" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Conectando..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Rechazado" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Guardado" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Enviando..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Crear mensaje para rechazar" @@ -59,7 +77,7 @@ msgid "IDS_CALL_BUTTON_END_M_CALL_BUTTON" msgstr "Finalizar" msgid "IDS_CALL_BUTTON_HEADSET" -msgstr "Auricul" +msgstr "Bluetooth" msgid "IDS_CALL_BUTTON_HOLD" msgstr "Retener" @@ -67,9 +85,6 @@ msgstr "Retener" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Enlazar" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Silencio" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Rechazar" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Servicio no permitido" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Sólo llamadas de emergencia. Inserte tarjeta SIM para acceder a los servicios de red" +msgstr "Sólo llamadas de emergencia.\nInserte tarjeta SIM para acceder a los servicios de red" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Error al dividir" @@ -263,7 +278,7 @@ msgid "IDS_CALL_POP_WRONG_GROUP" msgstr "Grupo erróneo" msgid "IDS_CST_BODY_REJECT_CALL_WITH_MESSAGE" -msgstr "Rechazar llamada con mensaje" +msgstr "Definir mens. de rechazo" msgid "IDS_CALL_POP_END_ACTIVE_CALL" msgstr "Finalizar llamada activa" @@ -301,24 +316,12 @@ msgstr "No hay memoria suficiente. Elimine algunos elementos" msgid "IDS_CALL_SK3_END_CALL" msgstr "Fin llam" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Sonido" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Servicio no disponible" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Teclado" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Conectando..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Rechazado" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Enviando..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Ocultar teclado" @@ -328,6 +331,183 @@ msgstr "REC" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Llamada desconocida rechazada" -msgid "IDS_CALL_POP_SAVED" -msgstr "Guardado" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Cambiar" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Seleccionar número" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "en %d días" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Mañana" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Dentro de 1 semana" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "Poniendo %s en espera" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Finalizar la llamada con %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Aceptar la llamada después de" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Fin todas llamadas" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Reducción de ruido desactivada" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Reducción de ruido activada" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Potenc tonos bajos" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Potenc tonos altos" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Optim para oído izquierdo" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Optim para oído derecho" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "No se puede activar la reducción de sonido mientras el volumen extra está habilitado" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "No se puede activar la reducción de sonido cuando el auricular está conectado" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "No se puede activar la reducción de sonido cuando los auriculares Bluetooth están activados" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "No se puede activar la reducción de sonido durante llamadas de banda ancha" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Para utilizar esta función, debe marcar optimizar EQ para mí en Ajustes de llamada" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "No se puede activar EQ de sonido de llamadas cuando el altavoz está encendido" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "No se puede activar EQ de sonido de llamadas cuando los auriculares están conectados" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "No se puede activar EQ de sonido de llamadas cuando los auriculares Bluetooth están activados" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "No se puede utilizar el intervalo de volumen extra cuando hay auriculares o un auricular BT conectados" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Llamando..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Administrar multiconferencia" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "No se puede activar EQ de sonido de llamadas mientras el volumen extra está habilitado" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "No se puede habilitar EQ de sonido de llamadas durante llamadas de banda ancha" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Sonido" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "No se puede activar la reducción de sonido cuando el altavoz está encendido" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Rechazar mensajes" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Llamada de voz" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Videollamada" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Compartir" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Teclado" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Finalizar" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Altavoz" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Origen audio" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Teléfono" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Silencio" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Añadir a Contactos" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Llamar" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Videoll." + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Mensaje" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Añad a Contacto" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Mensajes" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Cambiar" + +msgid "IDS_CALL_SK3_MORE" +msgstr "Más" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Compart archivo por ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Compartir" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d veces" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Llamada a grupo (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Imagen guardada" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Vídeo guardado" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Hacer una fotografía" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Vídeo direct" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Ver contacto" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d llamadas perdidas" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Llamada perdida" diff --git a/ui/po/fr_FR.po b/ui/po/fr_FR.po index 0316cf0..8617d24 100755 --- a/ui/po/fr_FR.po +++ b/ui/po/fr_FR.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Accepter" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Muet" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Connexion..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Rejeté" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Enregistré" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Envoi..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Créer un message de rejet" @@ -17,7 +35,7 @@ msgid "IDS_CALL_BODY_CALLENDED" msgstr "Fin d'appel" msgid "IDS_CALL_BODY_CALL_REJECTED" -msgstr "Appel refusé" +msgstr "Appel rejeté" msgid "IDS_CALL_BODY_DISCONNECTED" msgstr "Déconnecté" @@ -67,9 +85,6 @@ msgstr "Attente" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Rejoindre" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Muet" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Refuser" @@ -113,7 +128,7 @@ msgid "IDS_CALL_POP_CALLNOTCALLOWED" msgstr "Appel non autorisé" msgid "IDS_CALL_POP_CALL_BARRED" -msgstr "Appel interdit" +msgstr "Appel restreint" msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" msgstr "Renvoi d'appel activé : Toujours" @@ -197,7 +212,7 @@ msgid "IDS_CALL_POP_PHONE_NOT_INITIALISED" msgstr "Téléphone non initialisé" msgid "IDS_CALL_POP_PS_REJECTED" -msgstr "4422341526 refusé" +msgstr "%s rejeté" msgid "IDS_CALL_POP_REDIALLING" msgstr "Rappel..." @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Service non autorisé" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Appel d'urgence uniquement. Insérez la carte SIM pour accéder aux services réseau" +msgstr "Appel d'urgence uniquement.\nInsérez la carte SIM pour accéder aux services réseau" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Échec appel isolé" @@ -230,7 +245,7 @@ msgid "IDS_CALL_POP_SWITCHED_TO_PHONE" msgstr "Basculer sur le téléphone" msgid "IDS_CALL_POP_TRANSFER_FAILED" -msgstr "Erreur de transfert" +msgstr "Echec du transfert" msgid "IDS_CALL_POP_TRANSFER_NOT_SUPPORTED" msgstr "Transfert non supporté" @@ -266,7 +281,7 @@ msgid "IDS_CST_BODY_REJECT_CALL_WITH_MESSAGE" msgstr "Rejeter l'appel avec message" msgid "IDS_CALL_POP_END_ACTIVE_CALL" -msgstr "Terminer l'appel en cours" +msgstr "Fin de l'appel en cours" msgid "IDS_CALL_OPT_HOLDCALL" msgstr "Mettre l'appel en attente" @@ -301,24 +316,12 @@ msgstr "Mémoire insuffisante. Supprimez certains éléments" msgid "IDS_CALL_SK3_END_CALL" msgstr "Fin" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Son" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Service non disponible" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Clavier" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Connexion ..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Rejeté" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Envoi ..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Masquer clavier" @@ -326,8 +329,185 @@ msgid "IDS_CALL_SK_REC_ABB" msgstr "ENREG" msgid "IDS_CALL_POP_UNKNOWNREJECTED" -msgstr "Appelant inconnu\nrefusé" +msgstr "Appelant inconnu rejeté" -msgid "IDS_CALL_POP_SAVED" -msgstr "Enregistré" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Changement appli." + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Sélectionner numéro" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "dans %d jours" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Demain" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Dans une semaine" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "Mettre %s en attente" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Mettre fin à l'appel avec %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Accepter l'appel après" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Terminer tous les appels" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Désactiver réduction du bruit" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Activer réduction du bruit" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Augmenter tons bas" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Augm. tons élevés" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Optimisé pr oreille gche" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Optimisé pr oreille dte" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Impossible d'activer la réduction du bruit lorsque la fonction de volume supplémentaire est activée" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Impossible d'activer la réduction du bruit si l'écouteur est branché" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Impossible d'activer la réduction du bruit lorsque le casque Bluetooth est activé" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Impossible d'activer la réduction du bruit pendant des appels large bande" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Pour utiliser cette fonction, vous devez cocher Optimiser l'égaliseur pour moi dans les paramètres d'appel" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Impossible d'activer l'égaliseur de son des appels en cours lorsque le haut-parleur est activé" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Impossible d'activer l'égaliseur de son des appels en cours lorsque les écouteurs sont connectés" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Impossible d'activer l'égaliseur de son des appels en cours lorsque le casque Bluetooth est activé" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Impossible d'utiliser la fonction de volume supplémentaire lorsque des écouteurs ou le casque BT sont connectés" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Appel..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Gérer la conférence" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Impossible d'activer l'égaliseur de son des appels en cours lorsque la fonction de volume supplémentaire est activée" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Impossible d'activer l'égaliseur de son pendant les appels large bande" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Son" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Impossible d'activer la réduction du bruit si le haut-parleur est activé" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Messages de rejet" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Appel vocal" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Appel visio" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Partager" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Clavier" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Fin" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "HP" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Source audio" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Téléphone" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Muet" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Ajouter" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Appel vocal" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Visio" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Message" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Aj. aux contacts" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Message" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Perm." + +msgid "IDS_CALL_SK3_MORE" +msgstr "Plus" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Partager fich. via ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Partager" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d fois" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Appel de groupe (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Image enregistrée" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Vidéo enregistrée" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Prendre une photo" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Vidéo direct" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Aff. contact" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d appels manqués" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Appel manqué" diff --git a/ui/po/it_IT.po b/ui/po/it_IT.po index cdc7cfc..673df0b 100755 --- a/ui/po/it_IT.po +++ b/ui/po/it_IT.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Accetta" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Muto" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Connessione..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Rifiutata" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Salvato" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Invio..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Crea messaggio di rifiuto" @@ -67,9 +85,6 @@ msgstr "In attesa" msgid "IDS_CALL_BUTTON_JOIN" msgstr "In conf." -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Muto" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Rifiuta" @@ -98,10 +113,10 @@ msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR" msgstr "Errore di sistema" msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" -msgstr "Blocco di tutte le chiamate entranti" +msgstr "Tutte le chiamate in arrivo bloccate" msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" -msgstr "Blocco di tutte le chiamate uscenti" +msgstr "Tutte le chiamate in uscita bloccate" msgid "IDS_CALL_POP_CALLFAILED" msgstr "Chiamata non riuscita" @@ -191,13 +206,13 @@ msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" msgstr "Chiamate internazionali in uscita bloccate tranne verso proprio paese" msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" -msgstr "Uscenti internazionali bloccate" +msgstr "Chiamate internazionali in uscita bloccate" msgid "IDS_CALL_POP_PHONE_NOT_INITIALISED" msgstr "Telefono non inizializzato" msgid "IDS_CALL_POP_PS_REJECTED" -msgstr "4422341526 rifiutato" +msgstr "%s rifiutato" msgid "IDS_CALL_POP_REDIALLING" msgstr "Ricomposizione..." @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Servizio non consentito" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Solo chiamate di emergenza. Inserire scheda SIM per accedere ai servizi di rete" +msgstr "Solo chiamate di emergenza.\nInserire scheda SIM per accedere ai servizi di rete" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Divisione non eseguita" @@ -224,7 +239,7 @@ msgid "IDS_CALL_POP_SWAP_NOT_SUPPORTED" msgstr "Scambio non supportato" msgid "IDS_CALL_POP_SWITCHED_TO_BT_HEADSET" -msgstr "Commutato su auricolare BT" +msgstr "Commutato su auricolare Bluetooth" msgid "IDS_CALL_POP_SWITCHED_TO_PHONE" msgstr "Telefono attivato" @@ -301,24 +316,12 @@ msgstr "Memoria insufficiente. Eliminare alcuni elementi" msgid "IDS_CALL_SK3_END_CALL" msgstr "Termina" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Suono" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Servizio non disponibile" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Tastiera" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Connessione..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Rifiutata" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Invio..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Nasc. tastiera" @@ -328,6 +331,183 @@ msgstr "Reg" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Chiamata sconosciuta rifiutata" -msgid "IDS_CALL_POP_SAVED" -msgstr "Salvato" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Passa a" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Seleziona numero" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "tra %d giorni" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Domani" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Tra 1 settimana" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "Metti %s in attesa" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Fine chiamata con %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Accetta chiamata dopo" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Termina tutte le chiamate" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Disattiva riduzione disturbi" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Attiva riduzione disturbi" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Incrementa bassi" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Incrementa alti" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Ottimiz. per orecchio sx" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Ottimiz. per orecchio dx" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Impossibile attivare la riduzione rumore con volume aggiuntivo attivato" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Impossibile attivare la riduzione fruscio se è connesso l'auricolare" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Impossibile attivare la riduzione fruscio se è attivo l'auricolare Bluetooth" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Impossibile attivare la riduzione fruscio durante le chiamate a banda larga" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Per utilizzare questa funzione, è necessario verificare l'equalizzazione personale ottimale nelle impostazioni di chiamata" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Impossibile attivare equalizzatore audio in chiamata se l'altoparlante è attivo" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Impossibile attivare equalizzatore audio in chiamata se gli auricolari sono connessi" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Impossibile attivare equalizzatore audio in chiamata se l'auricolare Bluetooth è attivo" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Impossibile utilizzare l'intervallo di volume aggiuntivo se gli auricolari o l'auricolare Bluetooth sono connessi" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Chiamata..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Gestisci conferenza" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Impossibile attivare equalizzatore audio in chiamata con volume aggiuntivo attivato" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Impossibile attivare equalizzatore audio in chiamata durante le chiamate a banda larga" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Suono" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Impossibile attivare la riduzione fruscio se è attivo l'altoparlante" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Rifiuta messaggi" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Chiamata vocale" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Videochiamata" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Condividi" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Tastiera" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Termina" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Vivavoce" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Fonte audio" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Telefono" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Muto" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Aggiungi a Rubrica" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Chiama" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Videoch." + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Messaggio" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Agg. a Rubrica" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Messaggio" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Scambia" + +msgid "IDS_CALL_SK3_MORE" +msgstr "Altro" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Condividi file con ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Condividi" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d volte" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Chiamata gruppo (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Immagine salvata" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Video salvati" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Scatta una foto" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Video live" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Vedi contatto" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d chiamate senza risposta" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Chiamata persa" diff --git a/ui/po/ja_JP.po b/ui/po/ja_JP.po index 7b5ce4c..65b7c1a 100755 --- a/ui/po/ja_JP.po +++ b/ui/po/ja_JP.po @@ -1,14 +1,32 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "同意" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "消音" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "接続中..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "拒否されました。" + +msgid "IDS_CALL_POP_SAVED" +msgstr "保存​しま​した。" + +msgid "IDS_CALL_POP_SENDING" +msgstr "送信中..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" -msgstr "拒否​メッセージ​の​作成" +msgstr "着信​拒否​メッセージ​を​作成" msgid "IDS_CALL_POP_REJECT_MESSAGE_LIST_IS_EMPTY" -msgstr "拒否​メッセージ​リスト​は​空​です" +msgstr "着信​拒否​メッセージ​リスト​が​ありません。" msgid "IDS_VCALL_BUTTON_REJECT_WITH_MESSAGE" -msgstr "拒否してSMS送信" +msgstr "拒否してメッセージ送信" msgid "IDS_CALL_BODY_CALL" -msgstr "通話設定" +msgstr "通話" msgid "IDS_CALL_BODY_CALLED_PARTY_UNAVAILABLE" msgstr "発信​相手​は​電話​に​出られ​ません" @@ -23,7 +41,7 @@ msgid "IDS_CALL_BODY_DISCONNECTED" msgstr "切断しました。" msgid "IDS_CALL_BODY_INVALID_NUMBER" -msgstr "番号​が​無効​です" +msgstr "番号​が​無効​です。" msgid "IDS_CALL_BODY_IN_CALL" msgstr "通話中" @@ -38,7 +56,7 @@ msgid "IDS_CALL_BODY_NUMBER_CHANGED" msgstr "番号​が​変更​されました" msgid "IDS_CALL_BODY_NUMBER_DOES_NOT_EXIST" -msgstr "番号​が​存在​しません" +msgstr "番号​が​存在​しません。" msgid "IDS_CALL_BODY_ON_HOLD_ABB" msgstr "保留中" @@ -67,9 +85,6 @@ msgstr "保留" msgid "IDS_CALL_BUTTON_JOIN" msgstr "参加" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "ミュート" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "拒否" @@ -92,10 +107,10 @@ msgid "IDS_CALL_OPT_HOLD_CURRENT_CALL_N_ANSWER" msgstr "現在の通話を保留にして応答" msgid "IDS_CALL_OPT_PRIVATE" -msgstr "個人携帯" +msgstr "非公開" msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR" -msgstr "システム​エラー" +msgstr "システムエラー" msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" msgstr "全ての​着信​が​規制​されて​います" @@ -113,7 +128,7 @@ msgid "IDS_CALL_POP_CALLNOTCALLOWED" msgstr "通話​は​許可されて​いません" msgid "IDS_CALL_POP_CALL_BARRED" -msgstr "通話​は​規制​されて​います" +msgstr "通話は制限されています。" msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" msgstr "通話​を​転送する:常時" @@ -131,7 +146,7 @@ msgid "IDS_CALL_POP_CALL_IS_DIVERTED" msgstr "通話転送されました" msgid "IDS_CALL_POP_CAUSE_WRONG_NUMBER" -msgstr "番号​が​正しく​ありません" +msgstr "番号​が​正しく​ありません。" msgid "IDS_CALL_POP_CHANGEOFFLINEMODETOCALL" msgstr "オフライン​から​他の​ネットワーク​サービス​の​接続先​に​変更" @@ -143,7 +158,7 @@ msgid "IDS_CALL_POP_DTMFSENDING_FAIL" msgstr "送信​に​失敗​しました。​リトライ" msgid "IDS_CALL_POP_EMERGENCY_CALL" -msgstr "緊急通話" +msgstr "緊急通報" msgid "IDS_CALL_POP_FDNCALLONLY" msgstr "FDN電話​限定​です" @@ -176,13 +191,13 @@ msgid "IDS_CALL_POP_NETWORKBUSY" msgstr "ネットワーク​混雑中" msgid "IDS_CALL_POP_NETWORK_UNAVAILABLE" -msgstr "ネットワーク​を​利用​できません" +msgstr "ネットワーク​を​利用​できません。" msgid "IDS_CALL_POP_NOCREDITLEFT" msgstr "料金​上限​設定​を​超えて​います" msgid "IDS_CALL_POP_NOSERVICE" -msgstr "サービスが利用できません。" +msgstr "サービス​が​利用​でき​ません。" msgid "IDS_CALL_POP_OPERATION_REFUSED" msgstr "操作​は​拒否​されました" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "サービス​は​許可されて​いません" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "SOS​通話​のみ。​ SIM​​カード​を​挿入して、​ネットワーク​サービス​に​アクセス​します" +msgstr "SOS​通話​のみ。​\nSIM​​カード​を​挿入して、​ネットワーク​サービス​に​アクセス​します" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "分割​に​失敗​しました" @@ -230,7 +245,7 @@ msgid "IDS_CALL_POP_SWITCHED_TO_PHONE" msgstr "本体​に​切り​替え​ます" msgid "IDS_CALL_POP_TRANSFER_FAILED" -msgstr "転送​に​失敗​しました" +msgstr "転送​に​失敗​しました。" msgid "IDS_CALL_POP_TRANSFER_NOT_SUPPORTED" msgstr "転送​に​対応​して​いません" @@ -263,7 +278,7 @@ msgid "IDS_CALL_POP_WRONG_GROUP" msgstr "グループ​が​間違って​います" msgid "IDS_CST_BODY_REJECT_CALL_WITH_MESSAGE" -msgstr "着信拒否時にSMS送信" +msgstr "着信拒否時にメッセージ送信" msgid "IDS_CALL_POP_END_ACTIVE_CALL" msgstr "現在の​通話​を​終了" @@ -290,35 +305,23 @@ msgid "IDS_CALL_BUTTON_RECEIVER" msgstr "受話​器" msgid "IDS_CALL_BODY_FAILED_TO_REGISTER_ACCOUNT" -msgstr "アカウント​の​登録​に​失敗​しました" +msgstr "アカウント​の​登録​に​失敗​しました。" msgid "IDS_CALL_BODY_HOLD_ACTIVE_CALL_ABB" msgstr "現在の​通話​を​保留" msgid "IDS_CALL_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" -msgstr "メモリーが​不足​しています。​いくつかのアイテム​を​削除​してください" +msgstr "メモリが不足しています。不要なアイテムを削除してください。" msgid "IDS_CALL_SK3_END_CALL" msgstr "通話​を​終了​" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "サウンド" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "サービス​を​利用​できません" msgid "IDS_CALL_SK3_KEYPAD" msgstr "キーパッド" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "接続中..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "拒否されました。" - -msgid "IDS_CALL_POP_SENDING" -msgstr "送信中..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "キーパッド​を​非表示" @@ -328,6 +331,183 @@ msgstr "録音" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "非通知​通話​を​拒否​しました" -msgid "IDS_CALL_POP_SAVED" -msgstr "保存しました。" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "切替" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "番号​を​選択" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "%d日で" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "明日" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "一週間​以内" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "%sを保留にします。" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "%sとの通話を終了します。" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "通話状態の選択" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "全ての​相手​と​終話" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "ノイズキャンセラOFF" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "ノイズキャンセラON" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "低音強調" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "高音強調" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "左耳に最適化" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "右耳に最適化" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "最大音量制限が有効のときは、ノイズキャンセラをONにできません。" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "イヤホン​が​接続​されて​いる​とき​は、​ノイズ​キャンセラ​を​ON​に​できません。" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Bluetooth​ヘッドセット​が​ON​の​とき​は、​ノイズ​キャンセラ​を​ON​に​できません。" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "広帯域​で​通話中​は、​ノイズ​リダクション​を​ON​に​できません" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "この機能を使うには、通話設定の最適EQを確認する必要があります。" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "スピーカーがONのときは、通話音EQを有効にできません。" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "イヤホンが接続されているときは、通話音EQを有効にできません。" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "BluetoothヘッドセットがONのときは、通話音EQを有効にできません。" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "イヤホンまたはBTヘッドセットを接続しているときは、最大音量域を使用できません。" + +msgid "IDS_CALL_POP_CALLING" +msgstr "呼び出し中..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "グループ通話を​管理" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "最大音量制限が​​設定されている​​場合、​​通話音EQを​​有効に​​できません。" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "広帯域で通話中は、通話音EQを有効にできません。" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "サウンド" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "スピーカーがONのときは、ノイズキャンセラをONにできません。" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "着信拒否メッセージ" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "音声通話" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "テレビ電話" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "共有" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "キーパッド" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "通話​を​終了" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "スピーカー" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "オーディオ​ソース" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "本体" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "消音" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "連絡先に追加" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "発信" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "テレビ電話" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "メッセージ" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "新規電話帳​作成" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "メッセージ" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "通話相手を切替" + +msgid "IDS_CALL_SK3_MORE" +msgstr "その他" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "ChatONでファイルを共有" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "共有" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d回" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "グループ​通話​(%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "保存​画像" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "保存​動画" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "写真​を​撮影" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "ライブ​動画" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "連絡先を表示" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d​​件の不在着信" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "不在着信" diff --git a/ui/po/ko_KR.po b/ui/po/ko_KR.po index 1ec8536..d1225fc 100755 --- a/ui/po/ko_KR.po +++ b/ui/po/ko_KR.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "통화" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "송화음 차단" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "연결 중..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "수신 거부하였습니다" + +msgid "IDS_CALL_POP_SAVED" +msgstr "저장되었습니다" + +msgid "IDS_CALL_POP_SENDING" +msgstr "전송 중..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "수신 거부 메시지 작성" @@ -44,7 +62,7 @@ msgid "IDS_CALL_BODY_ON_HOLD_ABB" msgstr "보류됨" msgid "IDS_CALL_BODY_PEOPLE" -msgstr "인원" +msgstr "사람" msgid "IDS_CALL_BUTTON_ACCEPT" msgstr "통화" @@ -65,16 +83,13 @@ msgid "IDS_CALL_BUTTON_HOLD" msgstr "일시중단" msgid "IDS_CALL_BUTTON_JOIN" -msgstr "연결" - -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "음소거" +msgstr "가입하기" msgid "IDS_CALL_BUTTON_REJECT" msgstr "거절" msgid "IDS_CALL_BUTTON_SPEAKER" -msgstr "스피커" +msgstr "한뼘통화" msgid "IDS_CALL_BUTTON_SPLIT" msgstr "통화 분리" @@ -301,24 +316,12 @@ msgstr "저장 공간이 없습니다. 필요 없는 파일을 삭제하세요" msgid "IDS_CALL_SK3_END_CALL" msgstr "통화 종료" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "소리" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "서비스를 사용할 수 없습니다" msgid "IDS_CALL_SK3_KEYPAD" msgstr "키패드" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "연결 중..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "수신 거부하였습니다" - -msgid "IDS_CALL_POP_SENDING" -msgstr "전송 중..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "키패드 숨기기" @@ -328,6 +331,183 @@ msgstr "녹음" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "발신자 번호가 없는 전화를 거부하였습니다" -msgid "IDS_CALL_POP_SAVED" -msgstr "저장되었습니다" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "전환" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "번호를 선택하세요" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "%d일 안에" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "내일" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "1주 후" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "일시중단 %s" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "종료 %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "대기 통화 설정" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "모든 통화 종료" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "소음제거 해제" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "소음제거 실행" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "낮은 음 강조" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "높은 음 강조" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "왼쪽 귀를 위해 최적화" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "오른쪽 귀를 위해 최적화" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "추가 음량을 이용 중일 때는 소음 제거를 실행할 수 없습니다" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "이어폰이 연결되어 있을 때는 소음 제거를 실행할 수 없습니다" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "블루투스 헤드셋을 사용할 때는 소음 제거를 실행할 수 없습니다" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "광대역 통화를 이용 중일 때는 소음 제거를 실행할 수 없습니다" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "이 기능을 사용하려면 [통화] 설정에서 통화 음질 최적화를 확인해야 합니다" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "스피커가 켜져 있으면 통화 음질 설정을 실행할 수 없습니다" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "이어폰이 연결되어 있으면 통화 음질 설정을 실행할 수 없습니다" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "블루투스 헤드셋이 켜져 있으면 통화 음질 설정을 실행할 수 없습니다" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "이어폰 또는 블루투스 헤드셋에 연결되어 있을 때에는 추가 음량을 사용할 수 없습니다" + +msgid "IDS_CALL_POP_CALLING" +msgstr "전화를 거는 중..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "회의통화 관리" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "추가 음량을 이용 중일 때는 통화 음질 설정을 실행할 수 없습니다" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "광대역 통화 중에는 통화 음질 설정을 실행할 수 없습니다" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "소리" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "스피커를 사용할 때는 소음 제거를 실행할 수 없습니다" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "거절 메시지" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "음성통화" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "영상통화" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "공유" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "키패드" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "통화 종료" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "한뼘통화" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "음성 소스" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "휴대폰" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "송화음 차단" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "연락처에 추가" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "음성통화" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "영상통화" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "메시지" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "연락처에 추가" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "메시지" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "전환" + +msgid "IDS_CALL_SK3_MORE" +msgstr "더보기" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "ChatON으로 파일 공유" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "공유" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d회" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "그룹 통화(%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "저장된 이미지" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "저장된 영상" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "사진 촬영" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "라이브 영상" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "연락처 보기" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "부재중 전화 %d통" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "부재중 전화" diff --git a/ui/po/nl_NL.po b/ui/po/nl_NL.po index db8d6b0..467a877 100755 --- a/ui/po/nl_NL.po +++ b/ui/po/nl_NL.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "OK" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Stil" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Verbinden..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Geweigerd" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Opgeslagen" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Verzenden..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Weigeringsbericht maken" @@ -50,7 +68,7 @@ msgid "IDS_CALL_BUTTON_ACCEPT" msgstr "Opnemen" msgid "IDS_CALL_BUTTON_ADD_CALL" -msgstr "Nwe oproep" +msgstr "Nieuwe opr." msgid "IDS_CALL_BUTTON_CONTACTS" msgstr "Contacten" @@ -67,9 +85,6 @@ msgstr "In wacht" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Deeln." -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Dempen" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Weigeren" @@ -134,7 +149,7 @@ msgid "IDS_CALL_POP_CAUSE_WRONG_NUMBER" msgstr "Nummer onjuist" msgid "IDS_CALL_POP_CHANGEOFFLINEMODETOCALL" -msgstr "Voor netwerkdiensten vliegtuigprofiel in ander profiel wijzigen" +msgstr "Voor netwerkdiensten offlineprofiel in ander profiel wijzigen" msgid "IDS_CALL_POP_DIALLING" msgstr "Kiezen..." @@ -197,7 +212,7 @@ msgid "IDS_CALL_POP_PHONE_NOT_INITIALISED" msgstr "Telefoon niet geïnitialiseerd" msgid "IDS_CALL_POP_PS_REJECTED" -msgstr "4422341526 geweigerd" +msgstr "%s geweigerd" msgid "IDS_CALL_POP_REDIALLING" msgstr "Opnieuw kiezen..." @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Dienst niet toegestaan" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Alleen noodoproepen mogelijk. Voor netwerkdiensten SIM-kaart plaatsen" +msgstr "Alleen noodoproepen mogelijk.\nVoor netwerkdiensten SIM-kaart plaatsen" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Uit multiparty halen mislukt" @@ -260,7 +275,7 @@ msgid "IDS_CALL_POP_WAITING_ACTIVE" msgstr "Wisselgesprek" msgid "IDS_CALL_POP_WRONG_GROUP" -msgstr "Groep onjuist" +msgstr "Onjuiste groep" msgid "IDS_CST_BODY_REJECT_CALL_WITH_MESSAGE" msgstr "Oproep met bericht weigeren" @@ -301,23 +316,11 @@ msgstr "Onvoldoende geheugen. Wis een aantal items" msgid "IDS_CALL_SK3_END_CALL" msgstr "Einde" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Geluid" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Service niet beschikbaar" msgid "IDS_CALL_SK3_KEYPAD" -msgstr "Toetsen-\nbord" - -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Verbinden..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Geweigerd" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Verzenden..." +msgstr "Toetsenbord" msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Verberg toetsen" @@ -328,6 +331,183 @@ msgstr "Opn." msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Onbekende oproep geweigerd" -msgid "IDS_CALL_POP_SAVED" -msgstr "Opgeslagen" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Wisselen" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Selecteer nummer" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "over %d dagen" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Morgen" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Over een week" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "%s in de wacht zetten" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Oproep beëindigen met %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Oproep accepteren na" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Alle gespr. beëindigen" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Ruisonderdrukking uit" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Ruisonderdrukking aan" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Lage tonen boost" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Hoge tonen boost" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Optimaal voor linkeroor" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Optimaal voor rechteroor" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Kan ruisreductie niet activeren terwijl extra volume is ingeschakeld" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Kan ruisreductie niet activeren wanneer oortelefoon is aangesloten" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Kan ruisreductie niet activeren wanneer Bluetooth-headset is ingeschakeld" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Kan ruisreductie niet inschakelen tijdens breedbandoproepen" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Als u deze functie wilt gebruiken, moet u EQ voor mij optimaliseren inschakelen onder Oproepinstellingen" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Kan EQ toon tijdens gesprek niet activeren wanneer luidspreker is ingeschakeld" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Kan EQ toon tijdens gesprek niet activeren wanneer headset is aangesloten" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Kan EQ toon tijdens gesprek niet activeren wanneer Bluetooth-headset is ingeschakeld" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Kan extra volumebereik niet gebruiken wanneer BT-headset of oortjes zijn aangesloten" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Bellen..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Vergaderoproep beheren" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Kan EQ toon tijdens gesprek niet activeren wanneer extra volume is ingeschakeld" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Kan EQ toon tijdens gesprek niet activeren tijdens breedbandoproepen" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Geluid" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Kan ruisreductie niet activeren wanneer luidspreker is ingeschakeld" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Weigerberichten" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Spraakoproep" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Video-oproep" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Delen" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Toetsenbord" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Einde opr." + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Speaker" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Audiobron" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Telefoon" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Stil" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Toevoegen aan contacten" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Spraakopr." + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Video" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Bericht" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Toev. aan cont." + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Bericht" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Wissel" + +msgid "IDS_CALL_SK3_MORE" +msgstr "Meer" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Bestand delen via ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Delen" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d keer" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Groepsoproep (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Opgesl. afbeelding" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Opgeslagen video" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Foto nemen" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Live video" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Contact tonen" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d gemiste opr." + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Gemiste oproep" diff --git a/ui/po/pt_PT.po b/ui/po/pt_PT.po index 7d23966..ff93542 100755 --- a/ui/po/pt_PT.po +++ b/ui/po/pt_PT.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Aceitar" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Silenciar" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "A ligar..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Rejeitado" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Guardado" + +msgid "IDS_CALL_POP_SENDING" +msgstr "A enviar..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Criar mensagem de rejeição" @@ -50,7 +68,7 @@ msgid "IDS_CALL_BUTTON_ACCEPT" msgstr "Aceitar" msgid "IDS_CALL_BUTTON_ADD_CALL" -msgstr "Ad. cham." +msgstr "Adicionar" msgid "IDS_CALL_BUTTON_CONTACTS" msgstr "Contactos" @@ -59,7 +77,7 @@ msgid "IDS_CALL_BUTTON_END_M_CALL_BUTTON" msgstr "Terminar" msgid "IDS_CALL_BUTTON_HEADSET" -msgstr "Auric." +msgstr "Auricular" msgid "IDS_CALL_BUTTON_HOLD" msgstr "Reter" @@ -67,14 +85,11 @@ msgstr "Reter" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Aderir" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Desl. mic." - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Rejeitar" msgid "IDS_CALL_BUTTON_SPEAKER" -msgstr "Altifal." +msgstr "Altifalante" msgid "IDS_CALL_BUTTON_SPLIT" msgstr "Dividir" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Serviço não permitido" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Apenas chamada SOS. Insira o cartão SIM para aceder aos serviços de rede" +msgstr "Apenas chamada SOS.\nInsira o cartão SIM para aceder aos serviços de rede" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Falha ao dividir" @@ -301,24 +316,12 @@ msgstr "Memória insuficiente. Apague alguns itens" msgid "IDS_CALL_SK3_END_CALL" msgstr "Ter. ch." -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Som" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Serviço não disponível" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Teclado" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "A ligar..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Rejeitado" - -msgid "IDS_CALL_POP_SENDING" -msgstr "A enviar..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Ocultar teclado" @@ -328,6 +331,183 @@ msgstr "GRAV." msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Chamada anónima rejeitada" -msgid "IDS_CALL_POP_SAVED" -msgstr "Guardado" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Trocar" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Seleccionar número" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "dentro de %d dias" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Amanhã" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Dentro de uma semana" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "Colocar %s em espera" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Terminar chamada com %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Aceitar chamada depois de" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Terminar todas chamadas" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Desligar redução de ruído" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Ligar redução de ruído" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Ampl. tons graves" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Ampl. tons agudos" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Optimizada p/ ouvido esq." + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Optimizada p/ ouvido dir." + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Impossível ligar a redução de ruído quando o volume extra está activado" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Impossível ligar a redução de ruído quando o auricular está ligado" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Impossível ligar a redução de ruído quando o auricular Bluetooth está ligado" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Impossível ligar a redução de ruído durante as chamadas de banda larga" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Para utilizar esta função, tem de marcar Optimizar EQ para mim nas definições de Chamada" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Impossível activar o EQ do som de chamada recebida quando o altifalante está ligado" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Impossível activar o EQ do som de chamada recebida quando os auscultadores estão ligados" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Impossível activar o EQ do som de chamada recebida quando o auricular Bluetooth está ligado" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Impossível utilizar o intervalo de volume extra quando estão ligados auscultadores ou auriculares BT" + +msgid "IDS_CALL_POP_CALLING" +msgstr "A chamar..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Gerir chamada de conferência" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Impossível activar o EQ do som de chamada recebida quando o volume extra está activado" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Impossível activar o EQ do som de chamada recebida durante chamadas de banda larga" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Som" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Impossível ligar a redução de ruído quando o altifalante está ligado" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Mensagens de rejeição" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Chamada de voz" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Vídeochamada" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Partilhar" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Teclado" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Terminar" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Altifal." + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Fonte áudio" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Telefone" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Silenciar" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Adic. a Contactos" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Chamada de voz" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Ch. víd." + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Mensagem" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Adic. a Contact." + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Mensagem" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Alter." + +msgid "IDS_CALL_SK3_MORE" +msgstr "Mais" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Partilhar fich. via ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Partilhar" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d vezes" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Chamada grupo (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Imagem guardada" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Vídeo guardado" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Tirar uma fotografia" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Vídeo direc." + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Ver contacto" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d chamadas perdidas" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Chamada não atendida" diff --git a/ui/po/ru_RU.po b/ui/po/ru_RU.po index 728cde0..0760c07 100755 --- a/ui/po/ru_RU.po +++ b/ui/po/ru_RU.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Принять" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Звук" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Подключение..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Отклонено" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Соxранено" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Отправка..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Создать сообщение для отклонения вызова" @@ -67,9 +85,6 @@ msgstr "Удержать" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Конф." -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Звук" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Отказ" @@ -101,7 +116,7 @@ msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" msgstr "Все входящие вызовы запрещены" msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" -msgstr "Все исходящие вызовы\nзапрещены" +msgstr "Все исходящие вызовы запрещены" msgid "IDS_CALL_POP_CALLFAILED" msgstr "Сбой вызова" @@ -191,22 +206,22 @@ msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" msgstr "Запрет исходящих международных вызовов, кроме домашних" msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" -msgstr "Исходящие международные\nвызовы запрещены" +msgstr "Исходящие международные вызовы запрещены" msgid "IDS_CALL_POP_PHONE_NOT_INITIALISED" msgstr "Телефон не инициализирован" msgid "IDS_CALL_POP_PS_REJECTED" -msgstr "4422341526 отклонен" +msgstr "%s отклонен" msgid "IDS_CALL_POP_REDIALLING" msgstr "Повторный набор..." msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" -msgstr "Сервис запрещен" +msgstr "Услуга запрещена" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Только экстренный вызов. Для доступа к услугам сети вставьте SIM-карту" +msgstr "Только экстренный вызов.\nДля доступа к услугам сети вставьте SIM-карту" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Сбой разделения" @@ -230,7 +245,7 @@ msgid "IDS_CALL_POP_SWITCHED_TO_PHONE" msgstr "Переключено на телефон" msgid "IDS_CALL_POP_TRANSFER_FAILED" -msgstr "Сбой перевода" +msgstr "Сбой передачи" msgid "IDS_CALL_POP_TRANSFER_NOT_SUPPORTED" msgstr "Перевод не поддерживается" @@ -263,7 +278,7 @@ msgid "IDS_CALL_POP_WRONG_GROUP" msgstr "Неверная грyппа" msgid "IDS_CST_BODY_REJECT_CALL_WITH_MESSAGE" -msgstr "Отклонить и сообщение" +msgstr "Отклонить вызов с сообщением" msgid "IDS_CALL_POP_END_ACTIVE_CALL" msgstr "Завершить активный вызов" @@ -301,24 +316,12 @@ msgstr "Недостаточно памяти. Удалите некоторые msgid "IDS_CALL_SK3_END_CALL" msgstr "Заверш." -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Звук" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Услуга недоступна" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Клавиатура" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Подключение..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Отклонено" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Отправка..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Скрыть клавиатуру" @@ -328,6 +331,183 @@ msgstr "Зап." msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Неизвестный вызов отклонен" -msgid "IDS_CALL_POP_SAVED" -msgstr "Соxранено" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Переключение" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Выбор номера" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "через %d дн." + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Завтра" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Через неделю" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "Помещение вызова %s на удержание" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "Завершение разговора с %s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Принять вызов через" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Завершить все вызовы" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Выключить шумоподавление" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Включить шумоподавление" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Усил. низкие тоны" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Усил. высокие тоны" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Оптим. для лев. наушника" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Оптим. для прав. наушника" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Невозможно включить шумоподавление, если включена дополнительная громкость" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Невозможно включить шумоподавление, если подключены наушники" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Невозможно включить шумоподавление, если включена гарнитура Bluetooth" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Невозможно включить шумоподавление, если используется WCDMA" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Чтобы воспользоваться этой функцией, необходимо поставить флажок рядом с пунктом \"Оптимизировать пользовательский эквалайзер\" в настройках вызова" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Включить эквалайзер звука во время вызова при работающем динамике нельзя" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Включить эквалайзер звука во время вызова при подключенных наушниках нельзя" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Включить эквалайзер звука во время вызова при подключенной Bluetooth-гарнитуре нельзя" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Невозможно использовать дополнительный диапазон громкости, если подключены наушники или гарнитура Bluetooth" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Вызов..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Управление конференцией" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Включить эквалайзер звука во время вызова при использовании дополнительной громкости нельзя" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Невозможно включить эквалайзер звука во время вызова, если используется WCDMA" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Звук" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Невозможно включить шумоподавление, если включен динамик" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Сообщения для отклонения" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Голосовой вызов" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Видеовызов" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Отправить" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Клавиатура" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Завершить" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Динамик" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Источн. звука" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Телефон" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Выкл. микр." + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Добав. в конт." + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Голосовой вызов" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Видеовыз." + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Сообщение" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Доб. в контакты" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Сообщение" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Перекл." + +msgid "IDS_CALL_SK3_MORE" +msgstr "Опции" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "Отправить через ChatON" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Доступ" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d раз." + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Групповой вызов (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Сохраненное фото" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Сохраненное видео" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Сделать снимок" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Трансляция" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Просм. контакт" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "Пропущено вызовов: %d" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Пропущенный вызов" diff --git a/ui/po/tr_TR.po b/ui/po/tr_TR.po index b6264cb..255dbca 100755 --- a/ui/po/tr_TR.po +++ b/ui/po/tr_TR.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "Kabul et" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "Sessiz" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "Bağlanılıyor..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "Reddedildi" + +msgid "IDS_CALL_POP_SAVED" +msgstr "Kaydedildi" + +msgid "IDS_CALL_POP_SENDING" +msgstr "Gönderiliyor..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "Reddetme mesajı oluştur" @@ -67,9 +85,6 @@ msgstr "Beklet" msgid "IDS_CALL_BUTTON_JOIN" msgstr "Katıl" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "Sessiz" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "Reddet" @@ -155,7 +170,7 @@ msgid "IDS_CALL_POP_HOLD_FAILED" msgstr "Tutma başarısız" msgid "IDS_CALL_POP_HOLD_NOT_SUPPORTED" -msgstr "Tutma desteklenmiyor" +msgstr "Arama bekletme desteklenmiyor" msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" msgstr "Geçiş yaparken gelen arama engelleme" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "Servise izin yok" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "Yalnızca acil aramalar. Şebeke servislerine erişmek için SIM kartını takın" +msgstr "Yalnızca acil aramalar.\nŞebeke servislerine erişmek için SIM kartını takın" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "Ayırma başarısız" @@ -301,24 +316,12 @@ msgstr "Yeterli hafıza yok. Bazı öğeleri silin." msgid "IDS_CALL_SK3_END_CALL" msgstr "Bitir" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "Ses" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "Servis Kullanılamıyor" msgid "IDS_CALL_SK3_KEYPAD" msgstr "Tuşlar" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "Bağlanılıyor..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "Reddedildi" - -msgid "IDS_CALL_POP_SENDING" -msgstr "Gönderiliyor..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "Tuş takmını gzle" @@ -328,6 +331,183 @@ msgstr "Kayıt" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "Bilinmeyen arama reddedildi" -msgid "IDS_CALL_POP_SAVED" -msgstr "Kaydedildi" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "Kısayollar" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "Numara seçin" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "%d gün içinde" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "Yarın" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "Bir hafta içerisinde" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "%s bekletiliyor" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "%s araması bitiriliyor" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "Aramayı sonra kabul et" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "Tüm çağrıları sonlandır" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "Parazit azaltma kapalı" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "Parazit azaltma açık" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "Düşük tonları güçlendirin" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "Yüksek tonları güçlendirin" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "Sol kulak için optimum" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "Sağ kulak için optimun" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Ekstra ses etkinken parazit azaltma açılamıyor" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "Kulaklık takılıyken parazit azaltma açılamıyor" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Bluetooth kulaklık açıkken parazit azaltma açılamıyor" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "Geniş bant araması sırasında parazit azaltma açılamıyor" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "Bu işlevi kullanmak için, Arama ayarları altında benim için EQ'yu optimize et seçeneğini işaretlemeniz gerekir" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "Hoparlör açıkken Gelen arama sesi EQ etkinleştirilemiyor" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "Kulaklıklar takılıyken Gelen arama sesi EQ etkinleştirilemiyor" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "Bluetooth kulaklık açıkken Gelen arama sesi EQ etkinleştirilemiyor" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "Kulaklıklar veya BT kulaklık takılı olduğunda ekstra ses düzeyi aralığı kullanılamıyor" + +msgid "IDS_CALL_POP_CALLING" +msgstr "Arıyor..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "Konferans görüşmesini yönet" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "Ekstra ses etkinken gelen arama sesi EQ etkinleştirilemiyor" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "Geniş bant aramaları sırasında gelen arama sesi EQ etkinleştirilemiyor" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "Ses" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "Hoparlör açıkken parazit azaltma açılamıyor" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "Mesajları reddet" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "Sesli arama" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "Video arama" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "Paylaşıma aç" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "Tuşlar" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "Kapat" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "Hoparlör" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "Ses kaynağı" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "Telefon" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "Sessiz" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "Kişilere Ekle" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "Sesli arama" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "Video arm" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "Mesaj" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "Kişilere Ekle" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "Mesaj" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "Dğştr" + +msgid "IDS_CALL_SK3_MORE" +msgstr "Diğer" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "ChatON ile dosya paylaş" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "Paylaşıma aç" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d kere" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "Grup arama (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "Kaydedilmiş resim" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "Kaydedilmiş video" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "Resim çekin" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "Canlı video" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "Kişiyi göster" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d Cevapsız arama" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "Cevapsız arama" diff --git a/ui/po/zh_CN.po b/ui/po/zh_CN.po index 7f216ad..4455484 100755 --- a/ui/po/zh_CN.po +++ b/ui/po/zh_CN.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "接受" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "静音" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "连接中..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "被拒绝" + +msgid "IDS_CALL_POP_SAVED" +msgstr "已保存" + +msgid "IDS_CALL_POP_SENDING" +msgstr "发送中…" + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "新建拒绝信息" @@ -5,7 +23,7 @@ msgid "IDS_CALL_POP_REJECT_MESSAGE_LIST_IS_EMPTY" msgstr "拒绝信息列表空" msgid "IDS_VCALL_BUTTON_REJECT_WITH_MESSAGE" -msgstr "带信息拒绝" +msgstr "拒绝并发送短信" msgid "IDS_CALL_BODY_CALL" msgstr "通话" @@ -67,9 +85,6 @@ msgstr "保持" msgid "IDS_CALL_BUTTON_JOIN" msgstr "加入" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "静音" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "拒绝" @@ -92,7 +107,7 @@ msgid "IDS_CALL_OPT_HOLD_CURRENT_CALL_N_ANSWER" msgstr "保持当前电话并应答" msgid "IDS_CALL_OPT_PRIVATE" -msgstr "个人通话" +msgstr "私人" msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR" msgstr "系统出错" @@ -301,24 +316,12 @@ msgstr "存储空间不足。请删除部分项目" msgid "IDS_CALL_SK3_END_CALL" msgstr "结束通话" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "声音" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "服务无法正常提供" msgid "IDS_CALL_SK3_KEYPAD" msgstr "键盘" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "连接中..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "被拒绝" - -msgid "IDS_CALL_POP_SENDING" -msgstr "发送中…" - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "隐藏键盘" @@ -328,6 +331,183 @@ msgstr "录音" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "已拒绝未知来电" -msgid "IDS_CALL_POP_SAVED" -msgstr "已存储" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "切换" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "选择号码" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "%d 天内" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "明天" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "在一周里" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "保持%s" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "结束%s" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "接听来电" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "结束所有呼叫" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "噪声降低关" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "噪声降低开" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "加强低音" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "加强高音" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "已针对左耳优化" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "已针对右耳优化" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "无法在启用超大音量时开启减噪" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "当连接耳机时,无法打开噪音降低" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "当蓝牙耳机启动时,无法打开噪音降低" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "宽带通话期间无法打开噪音降低" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "若要使用该功能,您必须在呼叫设置下勾选“优化我的 EQ”" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "当扬声器开启时无法启用来电声音 EQ" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "当耳机连接时无法启用来电声音 EQ" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "当蓝牙耳机开启时无法启用来电声音 EQ" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "当耳机或蓝牙耳机连接时无法使用超大音量范围" + +msgid "IDS_CALL_POP_CALLING" +msgstr "正在呼叫..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "管理电话会议" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "当超大音量启用时无法启用来电声音 EQ" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "无法在宽带通话期间启用通话中声音效果" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "声音" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "当扬声器启动时,无法打开噪音降低" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "拒绝信息" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "语音通话" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "视频通话" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "共享" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "键盘" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "结束通话" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "扬声器" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "音源" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "手机" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "静音" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "添加到联系人" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "语音通话" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "视频通话" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "信息" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "添加到联系人" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "信息" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "切换" + +msgid "IDS_CALL_SK3_MORE" +msgstr "更多" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "通过 ChatON 共享文件" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "共享" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d 次" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "群组通话 (%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "已保存图片" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "已保存视频" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "拍照" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "实时视频" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "查看联系人" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d 个未接来电" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "未接来电" diff --git a/ui/po/zh_HK.po b/ui/po/zh_HK.po index 04228e0..714d086 100755 --- a/ui/po/zh_HK.po +++ b/ui/po/zh_HK.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "接受" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "靜音" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "連接中..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "已拒絕" + +msgid "IDS_CALL_POP_SAVED" +msgstr "已儲存" + +msgid "IDS_CALL_POP_SENDING" +msgstr "正在發送..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "建立拒絕訊息" @@ -20,7 +38,7 @@ msgid "IDS_CALL_BODY_CALL_REJECTED" msgstr "通話已拒絕" msgid "IDS_CALL_BODY_DISCONNECTED" -msgstr "已中斷" +msgstr "已中斷連接" msgid "IDS_CALL_BODY_INVALID_NUMBER" msgstr "號碼無效" @@ -67,9 +85,6 @@ msgstr "保留" msgid "IDS_CALL_BUTTON_JOIN" msgstr "加入" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "靜音" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "拒絕" @@ -83,7 +98,7 @@ msgid "IDS_CALL_BUTTON_UNHOLD" msgstr "不保留" msgid "IDS_CALL_OPT_CONFERENCE_CALL" -msgstr "會議通話" +msgstr "電話會議" msgid "IDS_CALL_OPT_END_CURRENT_CALL_N_ANSWER" msgstr "結束目前通話並接聽" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "服務不允許" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "只限 SOS 通話。 請插入 SIM 卡以存取網絡服務" +msgstr "只限 SOS 通話。\n請插入 SIM 卡以存取網絡服務" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "分割失敗" @@ -301,24 +316,12 @@ msgstr "記憶體不足。請刪除一些項目" msgid "IDS_CALL_SK3_END_CALL" msgstr "結束通話" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "聲音" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "無可用服務" msgid "IDS_CALL_SK3_KEYPAD" msgstr "鍵盤" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "連接中..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "已拒絕" - -msgid "IDS_CALL_POP_SENDING" -msgstr "正在發送..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "隱藏鍵盤" @@ -328,6 +331,183 @@ msgstr "錄音" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "已拒絕不明來電" -msgid "IDS_CALL_POP_SAVED" -msgstr "已儲存" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "切換" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "選擇號碼" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "在 %d 天後" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "明天" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "一週內" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "保留與 %s 的通話" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "結束與 %s 的通話" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "稍後接聽來電" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "結束全部通話" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "減少噪音關" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "減少噪音開" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "加強低音" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "加強高音" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "已針對左耳優化" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "已針對右耳優化" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "啟用最大音量時無法開啟減少噪音" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "耳機連接時無法開啟減少噪音" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "藍牙耳機啟用時無法開啟減少噪音" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "寬頻通話期間無法開啟減少噪音" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "欲使用此功能,必須檢查通話設定下的優化我的均衡器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "當揚聲器開啟時無法啟用來電音效均衡器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "當耳機連接時無法啟用來電音效均衡器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "當藍牙耳機開啟時無法啟用來電音效均衡器" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "當耳機或藍牙耳機已連接時無法使用增強音量" + +msgid "IDS_CALL_POP_CALLING" +msgstr "正在通話..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "管理電話會議" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "額外音量啟用時無法啟用來電音效均衡器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "無法在寬頻通話期間啟用來電音效均衡器" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "聲音" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "揚聲器啟用時無法開啟減少噪音" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "拒絕訊息" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "語音通話" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "視像通話" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "分享" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "鍵盤" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "結束通話" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "揚聲器" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "音源" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "電話" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "靜音" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "加到聯絡人" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "語音通話" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "視像通話" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "訊息" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "加入到聯絡人" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "訊息" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "切換" + +msgid "IDS_CALL_SK3_MORE" +msgstr "更多" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "透過 ChatON 分享檔案" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "共享" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d 次" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "群組通話(%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "儲存的圖像" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "儲存的視像" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "拍照" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "即時視像" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "檢視聯絡人" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d 個未接電話" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "未接電話" diff --git a/ui/po/zh_TW.po b/ui/po/zh_TW.po index 3483c0b..ab66960 100755 --- a/ui/po/zh_TW.po +++ b/ui/po/zh_TW.po @@ -1,3 +1,21 @@ +msgid "IDS_CALL_SK_ACCEPT" +msgstr "接受" + +msgid "IDS_CALL_BUTTON_MUTE_ABB" +msgstr "靜音" + +msgid "IDS_CALL_POP_CONNECTING" +msgstr "連線中..." + +msgid "IDS_CALL_POP_REJECTED" +msgstr "已拒絕" + +msgid "IDS_CALL_POP_SAVED" +msgstr "已儲存" + +msgid "IDS_CALL_POP_SENDING" +msgstr "正在傳送..." + msgid "IDS_CALL_HEADER_CREATE_REJECT_MESSAGE" msgstr "建立拒絕訊息" @@ -17,7 +35,7 @@ msgid "IDS_CALL_BODY_CALLENDED" msgstr "通話已結束" msgid "IDS_CALL_BODY_CALL_REJECTED" -msgstr "通話遭拒" +msgstr "已拒接來電" msgid "IDS_CALL_BODY_DISCONNECTED" msgstr "已中斷連線" @@ -50,7 +68,7 @@ msgid "IDS_CALL_BUTTON_ACCEPT" msgstr "接受" msgid "IDS_CALL_BUTTON_ADD_CALL" -msgstr "增加電話" +msgstr "新增通話" msgid "IDS_CALL_BUTTON_CONTACTS" msgstr "聯絡人" @@ -67,20 +85,17 @@ msgstr "保留" msgid "IDS_CALL_BUTTON_JOIN" msgstr "加入" -msgid "IDS_CALL_BUTTON_MUTE_ABB" -msgstr "靜音" - msgid "IDS_CALL_BUTTON_REJECT" msgstr "拒絕" msgid "IDS_CALL_BUTTON_SPEAKER" -msgstr "揚聲器" +msgstr "喇叭" msgid "IDS_CALL_BUTTON_SPLIT" msgstr "分割" msgid "IDS_CALL_BUTTON_UNHOLD" -msgstr "不保留" +msgstr "取消保留" msgid "IDS_CALL_OPT_CONFERENCE_CALL" msgstr "電話會議" @@ -140,7 +155,7 @@ msgid "IDS_CALL_POP_DIALLING" msgstr "正在撥號..." msgid "IDS_CALL_POP_DTMFSENDING_FAIL" -msgstr "傳送失敗。請重試" +msgstr "傳送失敗。再試一次" msgid "IDS_CALL_POP_EMERGENCY_CALL" msgstr "緊急電話" @@ -173,7 +188,7 @@ msgid "IDS_CALL_POP_JOIN_NOT_SUPPORTED" msgstr "不支援加入" msgid "IDS_CALL_POP_NETWORKBUSY" -msgstr "網路忙碌" +msgstr "網路繁忙" msgid "IDS_CALL_POP_NETWORK_UNAVAILABLE" msgstr "無可用網路" @@ -206,7 +221,7 @@ msgid "IDS_CALL_POP_SERVICE_NOT_ALLOWED" msgstr "不允許的服務" msgid "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE" -msgstr "僅限 SOS 通話。 請插入 SIM 卡以存取網路服務" +msgstr "僅限 SOS 通話。\n請插入 SIM 卡以存取網路服務" msgid "IDS_CALL_POP_SPLIT_FAILED" msgstr "分割失敗" @@ -218,13 +233,13 @@ msgid "IDS_CALL_POP_SWAPPED" msgstr "已交換" msgid "IDS_CALL_POP_SWAP_FAILED" -msgstr "交換失敗" +msgstr "切換失敗" msgid "IDS_CALL_POP_SWAP_NOT_SUPPORTED" -msgstr "不支援交換" +msgstr "不支援切換" msgid "IDS_CALL_POP_SWITCHED_TO_BT_HEADSET" -msgstr "下載項目中斷。再試一次?" +msgstr "已切換至藍芽耳機" msgid "IDS_CALL_POP_SWITCHED_TO_PHONE" msgstr "已切換到手機" @@ -278,10 +293,10 @@ msgid "IDS_CALL_OPT_END_ALL_CALLS" msgstr "結束所有通話" msgid "IDS_CALL_BODY_END_ACTIVE_CALLS_HPD" -msgstr "結束當前通話(%d)" +msgstr "結束當前通話 (%d)" msgid "IDS_CALL_BODY_END_HELD_CALLS_HPD" -msgstr "結束保留的通話(%d)" +msgstr "結束保留的通話 (%d)" msgid "IDS_CALL_BUTTON_HEADPHONES" msgstr "耳機" @@ -301,24 +316,12 @@ msgstr "記憶體不足。請刪除部分項目" msgid "IDS_CALL_SK3_END_CALL" msgstr "結束通話" -msgid "IDS_MSGC_OPT_SOUND" -msgstr "聲音" - msgid "IDS_CALL_BODY_SERVICE_UNAVAILABLE" msgstr "無法使用服務" msgid "IDS_CALL_SK3_KEYPAD" msgstr "鍵盤" -msgid "IDS_CALL_POP_CONNECTING" -msgstr "連線中..." - -msgid "IDS_CALL_POP_REJECTED" -msgstr "已拒絕" - -msgid "IDS_CALL_POP_SENDING" -msgstr "正在傳送..." - msgid "IDS_CALL_BUTTON2_HIDE_KEYPAD" msgstr "隱藏鍵盤" @@ -328,6 +331,183 @@ msgstr "錄影" msgid "IDS_CALL_POP_UNKNOWNREJECTED" msgstr "已拒接不明來電" -msgid "IDS_CALL_POP_SAVED" -msgstr "已儲存" +msgid "IDS_CALL_OPT_SWITCH" +msgstr "開關" + +msgid "IDS_CALL_HEADER_SELECT_NUMBER" +msgstr "選擇號碼" + +msgid "IDS_CALL_BODY_IN_PD_DAYS" +msgstr "在 %d 天後" + +msgid "IDS_CALL_BODY_TOMORROW" +msgstr "明天" + +msgid "IDS_CALL_POP_IN_A_WEEK" +msgstr "一週內" + +msgid "IDS_CALL_BODY_PUTTING_PS_ON_HOLD" +msgstr "保留與 %s 的通話" + +msgid "IDS_CALL_BODY_ENDING_CALL_WITH_PS" +msgstr "結束與 %s 的通話" + +msgid "IDS_CALL_HEADER_ACCEPT_CALL_AFTER" +msgstr "稍後應答來電" + +msgid "IDS_CALL_BODY_END_ALL_CALLS" +msgstr "結束所有通話" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_OFF" +msgstr "關閉減少雜訊" + +msgid "IDS_CALL_OPT_NOISE_REDUCTION_ON" +msgstr "開啟減少雜訊" + +msgid "IDS_CST_OPT_BOOST_LOW_TONES_ABB" +msgstr "加強低音" + +msgid "IDS_CST_OPT_BOOST_HIGH_TONES_ABB" +msgstr "加強高音" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_LEFT_EAR" +msgstr "最佳化左耳使用" + +msgid "IDS_CST_MBODY_OPTIMISED_FOR_RIGHT_EAR" +msgstr "最佳化右耳使用" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "啟用最大音量時無法開啟減少雜訊" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_EARPHONE_CONNECTED" +msgstr "耳機連接時無法開啟減少雜訊功能" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "藍牙耳機啟用時無法開啟降噪功能" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_DURING_WIDEBAND_CALLS" +msgstr "寬頻通話期間無法開啟減少雜訊功能" + +msgid "IDS_CALL_POP_TO_USE_THIS_FUNCTION_YOU_HAVE_TO_CHECK_OPTIMISE_EQ_FOR_ME_UNDER_CALL_SETTINGS" +msgstr "欲使用此功能,必須檢查通話設定下的最佳化個人等化器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_SPEAKER_IS_ON" +msgstr "揚聲器開啟時無法啟用來電音效等化器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_EARPHONES_ARE_CONNECTED" +msgstr "耳機連接時無法啟用來電音效等化器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHEN_BLUETOOTH_HEADSET_IS_ON" +msgstr "藍牙耳機開啟時無法啟用來電音效等化器" + +msgid "IDS_CALL_POP_UNABLE_TO_USE_EXTRA_VOLUME_RANGE_WHEN_EARPHONES_OR_BT_HEADSET_ARE_CONNECTED" +msgstr "連接耳機或藍牙耳機時無法使用增強音量" + +msgid "IDS_CALL_POP_CALLING" +msgstr "正在通話..." + +msgid "IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL" +msgstr "管理電話會議" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_WHILE_EXTRA_VOLUME_IS_ENABLED" +msgstr "增強音量開啟時無法啟用來電音效等化器" + +msgid "IDS_CALL_POP_UNABLE_TO_ENABLE_IN_CALL_SOUND_EQ_DURING_WIDEBAND_CALLS" +msgstr "寬頻通話期間無法啟用來電音效等化器" + +msgid "IDS_CALL_BUTTON_SOUND_ABB" +msgstr "音效" + +msgid "IDS_CALL_POP_UNABLE_TO_TURN_ON_NOISE_REDUCTION_WHEN_SPEAKER_IS_ON" +msgstr "喇叭啟用時無法開啟減少雜訊功能" + +msgid "IDS_CALL_HEADER_REJECT_MESSAGES" +msgstr "拒接訊息" + +msgid "IDS_CALL_OPT_VOICE_CALL" +msgstr "語音通話" + +msgid "IDS_CALL_OPT_VIDEO_CALL" +msgstr "視訊通話" + +msgid "IDS_CALL_SK3_SHARE" +msgstr "分享" + +msgid "IDS_CALL_BUTTON_KEYPAD" +msgstr "鍵盤" + +msgid "IDS_CALL_BUTTON_END_CALL" +msgstr "結束通話" + +msgid "IDS_CALL_BUTTON_SPEAKER_ABB" +msgstr "喇叭" + +msgid "IDS_CALL_BUTTON_AUDIO_SOURCE" +msgstr "音源" + +msgid "IDS_CALL_OPT_PHONE" +msgstr "電話" + +msgid "IDS_CALL_BUTTON_MUTE" +msgstr "靜音" + +msgid "IDS_CALL_BUTTON_ADD_TO_CONTACTS" +msgstr "新增至聯絡人" + +msgid "IDS_CALL_SK3_VOICE_CALL" +msgstr "語音通話" + +msgid "IDS_CALL_BUTTON_VIDEO_CALL" +msgstr "視訊通話" + +msgid "IDS_CALL_SK3_MESSAGE" +msgstr "訊息" + +msgid "IDS_CALL_SK3_ADD_TO_CONTACTS" +msgstr "新增至聯絡人" + +msgid "IDS_CALL_OPT_MESSAGE" +msgstr "訊息" + +msgid "IDS_CALL_SK_SWAP_ABB" +msgstr "切換" + +msgid "IDS_CALL_SK3_MORE" +msgstr "更多" + +msgid "IDS_CALL_OPT_SHARE_FILE_VIA_CHATON_ABB" +msgstr "透過 ChatON 分享檔案" + +msgid "IDS_CALL_HEADER_SHARE_ABB" +msgstr "分享" + +msgid "IDS_CALL_BODY_PD_TIMES" +msgstr "%d 次" + +msgid "IDS_QP_BODY_GROUP_CALL_HPD_ABB" +msgstr "群組通話(%d)" + +msgid "IDS_CALL_OPT1_SAVED_IMAGE" +msgstr "儲存的圖像" + +msgid "IDS_CALL_OPT1_SAVED_VIDEO" +msgstr "儲存的視訊" + +msgid "IDS_CALL_OPT1_TAKE_A_PICTURE" +msgstr "拍照" + +msgid "IDS_CALL_BUTTON2_LIVE_VIDEO" +msgstr "即時視訊" + +msgid "IDS_CALL_BUTTON_VIEW_CONTACT" +msgstr "檢視聯絡人" + +msgid "IDS_CALL_HEADER_MY_CALL_SOUND_ABB" +msgstr "My call sound" + +msgid "IDS_CALL_HEADER_PD_MISSED_CALLS" +msgstr "%d 通未接電話" + +msgid "IDS_CALL_POP_CALLMISSED" +msgstr "未接電話" diff --git a/ui/vcui-app-data.h b/ui/src/include/vcui-app-data.h similarity index 68% rename from ui/vcui-app-data.h rename to ui/src/include/vcui-app-data.h index 8ff4314..4db0d50 100755 --- a/ui/vcui-app-data.h +++ b/ui/src/include/vcui-app-data.h @@ -18,6 +18,22 @@ #ifndef _VCUI_APP_DATA_H_ #define _VCUI_APP_DATA_H_ +#include +#include "voice-call-engine.h" +#include "vcui-doc-launch.h" + +#define TIME_END_START 1 +#define TIME_END_NO 0 +#define TIME_END_MAX_SHOW 8 + +#define MY_HANDLE 252 +#define ALL_HANDLE 253 +#define NO_HANDLE 254 +#define NO_STATUS 254 + +#define WIN_HIDE 0 +#define WIN_SHOW 1 + typedef enum { CALL_LOCK = 1, CALL_UNLOCK @@ -33,31 +49,33 @@ typedef enum { CALL_UNHOLD } vcui_app_call_status_t; -#define TIME_END_START 1 -#define TIME_END_NO 0 -#define TIME_END_MAX_SHOW 8 - -#define MY_HANDLE 252 -#define ALL_HANDLE 253 -#define NO_HANDLE 254 -#define NO_STATUS 254 - -#define WIN_HIDE 0 -#define WIN_SHOW 1 - typedef enum { VIEW_DIALLING_VIEW = 0, - VIEW_INCOMING_VIEW, VIEW_INCOMING_LOCK_VIEW, VIEW_INCALL_ONECALL_VIEW, VIEW_INCALL_MULTICALL_SPLIT_VIEW, VIEW_INCALL_MULTICALL_CONF_VIEW, VIEW_INCALL_MULTICALL_LIST_VIEW, - VIEW_INCALL_KEYPAD_VIEW, VIEW_ENDCALL_VIEW, - VIEW_MAX + VIEW_QUICKPANEL_VIEW, + VIEW_MAX } vcui_app_call_view_id_t; +typedef enum _vcui_snd_path_type_t { + VCUI_SND_PATH_NONE, + VCUI_SND_PATH_HEADSET, + VCUI_SND_PATH_RECEIVER_EARJACK, + VCUI_SND_PATH_SPEAKER, + VCUI_SND_PATH_MAX, +} vcui_snd_path_type_t; + +typedef enum _vcui_vol_type_t { + VCUI_VOL_RING, + VCUI_VOL_VOICE, + VCUI_VOL_HEADSET, + VCUI_VOL_MAX +} vcui_vol_type_t; + typedef struct _appdata { Evas *evas; Evas_Object *win_main; @@ -83,8 +101,8 @@ typedef struct _appdata { int headset_status; int speaker_status; int mute_status; + int wbamr_status; - int brecord_voice; int show_flag; int ball_view_hide; @@ -92,7 +110,6 @@ typedef struct _appdata { struct _view_data *view_st[VIEW_MAX]; vcui_app_call_view_id_t view_top; vcui_app_call_view_id_t view_before_top; - vcui_app_call_view_id_t view_before_reject_view; Ecore_Timer *popup_delay; @@ -112,6 +129,11 @@ typedef struct _appdata { /* for one-call view */ int beffect_needed; + /* for keypad and UG*/ + int beffect_show; + int badd_call_clicked; + int bcontact_clicked; + /* Volume Control */ int bmute_ringtone; int vol_key_status; @@ -137,17 +159,24 @@ typedef struct _appdata { Evas_Object *vol_bt_popup_eo; Ecore_Timer *vol_bt_popup_del_timer; - struct ui_gadget *contact_ug; + ui_gadget_h contact_ug; Evas_Object *ly; struct vcui_ugs_array ugs_array_data; int call_end_type; + Evas_Object *win_quickpanel; + Evas_Object *quickpanel_layout; + char *quickpanel_text; + Ecore_Event_Handler *downkey_handler; Ecore_Event_Handler *upkey_handler; Ecore_Event_Handler *mouse_evnt_handler; + Ecore_Event_Handler *focus_in; + Ecore_Event_Handler *focus_out; + int rotate_angle; Ecore_Timer *ticker_tm; } vcui_app_call_data_t; @@ -165,4 +194,35 @@ typedef struct _view_data { void *priv; } voice_call_view_data_t; +typedef struct _vcui_call_mo_data_t { + char call_number[VC_PHONE_NUMBER_LENGTH_MAX]; + int ct_index; +} vcui_call_mo_data_t; + +typedef struct _vcui_call_mt_data_t { + int call_handle; + int call_type; + int cli_presentation_indicator; + char call_num[VC_PHONE_NUMBER_LENGTH_MAX]; + int calling_name_mode; + char calling_name[VC_PHONE_NAME_LENGTH_MAX]; + char redirected_number[VC_PHONE_NUMBER_LENGTH_MAX]; + char redirected_sub_address[VC_PHONE_SUBADDRESS_LENGTH_MAX]; + int cli_cause; + int bfwded; + int active_line; +} vcui_call_mt_data_t; + +typedef struct _vcui_call_ecc_data_t { + char call_number[VC_PHONE_NUMBER_LENGTH_MAX]; +} vcui_call_ecc_data_t; + +typedef struct _vcui_call_sat_data_t { + int command_id; /** - + #include #include @@ -51,21 +51,18 @@ #include #include "appcore-efl.h" +#include "vcui-app-data.h" #include "vcui-doc-launch.h" #include "voice-call-engine-msg.h" -#include "vcui-app-data.h" #include "vcui-document.h" #include "vcui-view-choice.h" -#include "vcui-engine-interface.h" #include "vcui-view-common.h" #include "vcui-view-elements.h" #include "vcui-view-popup.h" #include -#include "ui-gadget.h" /*for UG_INIT_EFL() & ug usage*/ - #include "libintl.h" #define DIALER_PKG "org.tizen.phone" @@ -107,51 +104,100 @@ #define GRP_MULTICALL_SPLIT2 "multicall-split2" #define GRP_MULTICALL_CONF "multicall-conf" #define GRP_MULTICALL "multicall-list" +#define GRP_REJECT_MSG "reject_with_msg" #define GRP_UG_EFFECT "ug_effect" #define GRP_END_SINGLECALL "end-singlecall" #define GRP_END_CONFCALL "end-confcall" - +#define GRP_QUICKPANEL "quickpanel" +#define GRP_QUICKPANEL_LSCAPE "quickpanel-lscape" +#define GRP_SEPARATOR_LAYOUT "separator-layout" +#define GRP_SEPARATOR_LAYOUT_3BUTTON "separator-layout-3button" +#define GRP_BUTTON_LAYOUT "button-layout" +#define GRP_CALLER_INFO "caller-info" +#define GRP_KEYPAD_SEP_LAYOUT "keypad-separator" +#define GRP_ALERTS_LAYOUT "sns-alerts-layout" + #define GRP_LOCK_ACCEPT "lock_accept" #define GRP_LOCK_REJECT "lock_reject" +#define GRP_LOCK_REJECT_WITH_MSG "lock_reject_with_msg" -#define QP_NOIMG_ICON IMGDIR"/vc_qp_caller_ID.png" -#define QP_CONF_ICON IMGDIR"/vc_qp_caller_ID_group.png" +#define QP_NOIMG_ICON IMGDIR"/vc_qp_caller_ID.png" +#define QP_CONF_ICON IMGDIR"/vc_qp_caller_ID_group.png" +#define QP_CALL_ICON ICONDIR"/org.tizen.call.png" #define NOIMG_ICON IMGDIR"/vc_normal_caller_ID.png" #define CONF_ICON IMGDIR"/vc_normal_caller_ID_group.png" #define PRIVATE_ICON IMGDIR"/vc_conference_private.png" -#define HOLD_ICON IMGDIR"/vc_icon_hold.png" -#define UNHOLD_ICON IMGDIR"/vc_icon_unhold.png" +#define CALLER_ID_DEFAULT IMGDIR"/vc_caller_ID_default.png" + #define KEYPAD_ICON IMGDIR"/vc_keypad_icon.png" #define CONTACT_ICON IMGDIR"/vc_contact_icon.png" #define ADDCALL_ICON IMGDIR"/vc_add_icon.png" #define JOIN_ICON IMGDIR"/vc_join_icon.png" +#define END_CALL_ICON IMGDIR"/vc_end_call_icon.png" #define SPEAKER_ICON IMGDIR"/vc_speaker_icon.png" #define MUTE_ICON IMGDIR"/vc_mute_icon.png" -#define PLAY_ICON IMGDIR"/vc_icon_play.png" -#define PAUSE_ICON IMGDIR"/vc_icon_pause.png" -#define MORE_ICON IMGDIR"/vc_btn_more.png" #define CONF_CALL_END_ICON IMGDIR"/vc_icon_conf_call_end.png" #define CALLING_NAME_BG_IMAGE IMGDIR"/vc_calling_name_BG_image.png" +#define BDAY_ICON IMGDIR"/vc_birthday_icon.png" +#define MO_NOCALLER_ID_ICON IMGDIR"/vc_outgoingcall_No_caller_ID.png" +#define CALLER_INFO_ICON IMGDIR"/vc_caller_info_icon.png" +#define NOIMG_SPLIT_ICON IMGDIR"/vc_caller_ID_split.png" +#define CONF_SPLIT_ICON IMGDIR"/vc_caller_ID_split_group.png" + +#define SPEAKER_PRESS_ICON IMGDIR"/vc_speaker_on_icon.png" +#define MUTE_PRESS_ICON IMGDIR"/vc_mute_on_icon.png" -#define HOLD_DISABLED_ICON IMGDIR"/vc_icon_hold_dim.png" -#define UNHOLD_DISABLED_ICON IMGDIR"/vc_icon_unhold_dim.png" #define KEYPAD_DISABLED_ICON IMGDIR"/vc_keypad_icon_dim.png" #define CONTACT_DISABLED_ICON IMGDIR"/vc_contact_icon_dim.png" #define ADDCALL_DISABLED_ICON IMGDIR"/vc_add_icon_dim.png" #define JOIN_DISABLED_ICON IMGDIR"/vc_join_icon_dim.png" +#define END_CALL_DISABLED_ICON IMGDIR"/vc_end_call_icon_dim.png" #define SPEAKER_DISABLED_ICON IMGDIR"/vc_speaker_icon_dim.png" #define MUTE_DISABLED_ICON IMGDIR"/vc_mute_icon_dim.png" -#define CONF_LIST_HOLD_ICON IMGDIR"/vc_icon_conf_list_hold.png" -#define CONF_LIST_UNHOLD_ICON IMGDIR"/vc_icon_conf_list_unhold.png" +#define SHARE_DISABLED_ICON IMGDIR"/vc_rcs_share_icon_dim.png" + +#define HOLD_ICON IMGDIR"/vc_icon_hold_call.png" +#define UNHOLD_ICON IMGDIR"/vc_icon_unhold_call.png" +#define SWAP_ICON IMGDIR"/vc_icon_swap_call.png" #define VOLUME_ICON IMGDIR"/vc_volume_icon.png" #define VOLUME_MUTE_ICON IMGDIR"/vc_volume_mute_icon.png" -#define NVAI_CONTROL_OTHER_ICON IMGDIR"/vc_reject_with_msg_header_icon_others.png" +#define VOICE_CALL_ICON IMGDIR"/vc_voice_call_icon.png" +#define VIDEO_CALL_ICON IMGDIR"/vc_video_call_icon.png" +#define MESSAGE_ICON IMGDIR"/vc_msg_icon.png" + +#define REJ_MSG_BACK_ICON IMGDIR"/vc_reject_back_icon.png" +#define REJ_MSG_CREATE_ICON IMGDIR"/vc_reject_create_icon.png" + +#define CALL_BG_IMG IMGDIR"/vc_call_bg_img.png" +#define CALL_NOT_SAVED_BG_IMG IMGDIR"/vc_call_not_saved_bg_img.png" + +#define MORE_MANAGE_CONF_ICON IMGDIR"/vc_more_manage_conf.png" +#define MORE_ADD_CALL_ICON IMGDIR"/vc_more_add_call.png" +#define MORE_JOIN_ICON IMGDIR"/vc_more_join.png" +#define MORE_CONTACTS_ICON IMGDIR"/vc_more_contacts.png" + +#define QP_MUTE_ICON IMGDIR"/vc_qp_mute_on.png" + +#define NOTIFY_MISSED_CALL_ICON IMGDIR"/vc_notify_missed_call.png" +#define NOTIFY_SUB_MISSED_CALL_ICON IMGDIR"/vc_notify_sub_missed_call.png" #define MINI_CONTROLLER_WIDTH (480) #define MINI_CONTROLLER_HEIGHT (42) +#define MAIN_WIN_HD_W 720 +#define MAIN_WIN_HD_H 1280 +#define MAIN_WIN_WVGA_W 480 +#define MAIN_WIN_WVGA_H 800 + +#define QUICKPANEL_WIDTH (720) +#define LSCAPE_QUICKPANEL_WIDTH (1280) +#define QUICKPANEL_HEIGHT (170) + +#define MORE_MENU_CTXPOPUP_X 660 +#define MORE_MENU_CTXPOPUP_Y 175 + #define DEF_BUF_LEN (128) #define DEF_BUF_LEN_LONG (256) @@ -197,7 +243,7 @@ #ifdef CALL_DEBUG_ON_DLOG #define CALL_UI_DEBUG(frmt, args...) do { LOG(LOG_DEBUG, TAG_CALL, "[vcui] [%s:%d] "frmt"\n", __func__, __LINE__, ##args); } while (0) -#define CALL_UI_KPI(frmt, args...) do { LOG(LOG_DEBUG, TAG_CALL_LAUNCH, "[VC_KPI] [%s:%d] "frmt"\n", __func__, __LINE__, ##args); } while (0) +#define CALL_UI_KPI(frmt, args...) do { LOG(LOG_DEBUG, TAG_CALL_LAUNCH, "[VC_KPI] [%s:%d] "frmt"\n", __func__, __LINE__, ##args); } while (0) #else #define CALL_UI_DEBUG(args...) #endif @@ -282,7 +328,6 @@ typedef enum { CALL_END_TYPE_CONF_CALL, } voice_call_end_type_t; -/************************************************************************************/ void _create_main_ui_set_flag(); void _create_main_ui_real(); void _vcui_show_main_ui_set_flag(); @@ -315,4 +360,4 @@ char *_vcui_get_endcause_string(int end_cause, char *data); Evas_Object *_vcui_load_edj(Evas_Object *parent, const char *file, const char *group); -#endif /* __VCUI_MAIN_H_ */ +#endif /* _VCUI_APPLICATION_H_ */ diff --git a/ui/vcui-doc-launch.h b/ui/src/include/vcui-doc-launch.h similarity index 84% rename from ui/vcui-doc-launch.h rename to ui/src/include/vcui-doc-launch.h index 5ccaa70..97dc13e 100755 --- a/ui/vcui-doc-launch.h +++ b/ui/src/include/vcui-doc-launch.h @@ -15,19 +15,18 @@ */ -#include "ui-gadget.h" - -#ifndef _VCUI_DOC_LAUNCH_ -#define _VCUI_DOC_LAUNCH_ +#ifndef _VCUI_DOC_LAUNCH_H_ +#define _VCUI_DOC_LAUNCH_H_ #define PKGNAME_CONTACT_UG "contacts-list-efl" -#define PKGNAME_DIALER_UG "phoneui-efl" +#define PKGNAME_DIALER_UG "phone-tabui-efl" typedef enum { VCUI_UG_TYPE_NOE = 0, VCUI_UG_TYPE_CONTACT_LIST, VCUI_UG_TYPE_ADD_CALL, VCUI_UG_TYPE_ADD_TO_CONTACTS, + VCUI_UG_TYPE_VIEW_CONTACT, VCUI_UG_TYPE_MAX } vcui_ug_type; @@ -51,6 +50,7 @@ struct vcui_ug_priv_data { void _vcui_doc_launch_contact_list_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data); void _vcui_doc_launch_phoneui_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data); void _vcui_doc_launch_add_to_contacts_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data, void *data); +void _vcui_doc_launch_view_contact_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data, void *data); void _vcui_doc_launch_msg_composer(void *data, char *number); void _vcui_doc_launch_destroy_ug_all(void *ugs_array_data); diff --git a/ui/src/include/vcui-document.h b/ui/src/include/vcui-document.h new file mode 100755 index 0000000..a45da8d --- /dev/null +++ b/ui/src/include/vcui-document.h @@ -0,0 +1,474 @@ +/* + * 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 _VCUI_DOCUMENT_H_ +#define _VCUI_DOCUMENT_H_ + +typedef struct _call_data_t call_data_t; + +/** + * This function initializes the data structure pointers maintained in the document file + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_data_init(); + +/** + * This function allocates memory for the call data structure - call_data_t + * + * @return pointer to the memory allocated for call-data structure, or NULL if memory allocation fails + * @param[in] nothing +*/ +call_data_t *_vcui_doc_allocate_call_data_memory(void); + +/** + * This function retrieves the value of the call handle + * + * @return value of the call handle + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_handle(call_data_t *pcall_data); + +/** + * This function assigns the value of call handle for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] call_handle new value of the call handle +*/ +void _vcui_doc_set_call_handle(call_data_t *pcall_data, int call_handle); + +/** + * This function retrieves the value of the call number + * + * @return pointer to the call number string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_call_number(call_data_t *pcall_data); + +/** + * This function assigns the value of call number for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pnumber pointer to the call number string +*/ +void _vcui_doc_set_call_number(call_data_t *pcall_data, char *pnumber); + +/** + * This function retrieves the value of the call name (available from contact DB) + * + * @return pointer to the call name string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_call_display_name(call_data_t *pcall_data); + +/** + * This function assigns the value of contact name for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pname pointer to the call number string +*/ +void _vcui_doc_set_call_display_name(call_data_t *pcall_data, char *pname); + +/** + * This function retrieves the caller-ID file path (caller-ID for split screen) + * + * @return pointer to the caller-ID file path string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_caller_id_file_path(call_data_t *pcall_data); + +/** + * This function assigns the value of caller-ID file-path for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pfile_path pointer to the caller-ID file-path string +*/ +void _vcui_doc_set_caller_id_file_path(call_data_t *pcall_data, char *pfile_path); + +/** + * This function retrieves the caller-ID full file path (caller-ID for full screen) + * + * @return pointer to the caller-ID full file path string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_caller_id_full_file_path(call_data_t *pcall_data); + +/** + * This function assigns the value of caller-ID full file-path for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pfull_file_path pointer to the caller-ID full file-path string +*/ +void _vcui_doc_set_caller_id_full_file_path(call_data_t *pcall_data, char *pfull_file_path); + +/** + * This function retrieves the value of the call start time + * + * @return value of the call start time + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_start_time(call_data_t *pcall_data); + +/** + * This function assigns the value of call start time for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure +*/ +void _vcui_doc_set_call_start_time(call_data_t *pcall_data); + +/** + * This function retrieves the value of the contact index + * + * @return value of the contact index + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_contact_index(call_data_t *pcall_data); + +/** + * This function assigns the value of contact index for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] contact_index value of the contact index +*/ +void _vcui_doc_set_contact_index(call_data_t *pcall_data, int contact_index); + +/** + * This function retrieves the value of the contact phone type + * + * @return value of the contact phone type + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_contact_phone_type(call_data_t *pcall_data); + +/** + * This function assigns the value of contact phone type for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] phone_type value of the contact phone type +*/ +void _vcui_doc_set_contact_phone_type(call_data_t *pcall_data, int phone_type); + +/** + * This function retrieves the value of the remaining days for the contact birthday + * + * @return value of the contact remaining days in birthday + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_birthday_remaining_days(call_data_t *pcall_data); + +/** + * This function assigns the value of birthday remaining days for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] bday_rem_days value of the birthday remaining days +*/ +void _vcui_doc_set_birthday_remaining_days(call_data_t *pcall_data, int bday_rem_days); + +/** + * This function retrieves the value of the auto reject status + * + * @return value of the auto reject status + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_auto_reject_status(call_data_t *pcall_data); + +/** + * This function assigns the value of auto reject status for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] bauto_rejected value of the auto reject status +*/ +void _vcui_doc_set_auto_reject_status(call_data_t *pcall_data, gboolean bauto_rejected); + +/** + * This function retrieves if a call is MO or MT type + * + * @return value of the call type - MO or MT + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_type(call_data_t *pcall_data); + +/** + * This function assigns the value of call type for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] call_type type of call, MO or MT +*/ +void _vcui_doc_set_call_type(call_data_t *pcall_data, int call_type); + +/** + * This function retrieves the call status of a particular call data structure (HOLD/UNHOLD) + * + * @return value of the call status, HOLD/UNHOLD + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_status(call_data_t *pcall_data); + +/** + * This function assigns the value of call status for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] call_status status of call, active/held +*/ +void _vcui_doc_set_call_status(call_data_t *pcall_data, int call_status); + +/** + * This function retrieves the pointer to the most recent MO(outgoing) call data + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_recent_mo_call_data(); + +/** + * This function assigns the pointer of the most recent MO(outgoing) call data + * to the pointer stored in the vcui-document file (recent_mo) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be copied/assigned +*/ +void _vcui_doc_set_recent_mo_call_data(call_data_t *in); + +/** + * This function retrieves the pointer to the most recent MT(incoming) call data + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_recent_mt_call_data(); + +/** + * This function assigns the pointer of the most recent MT(incoming) call data + * to the pointer stored in the vcui-document file (recent_mt) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be copied/assigned +*/ +void _vcui_doc_set_recent_mt_call_data(call_data_t *in); + +/** + * This function retrieves the pointer to the most recent call data, either MT(incoming)/MO(outgoing) + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_recent_call_data(); + +/** + * This function assigns the pointer of the most recent MT(incoming)/MO(outgoing) call data + * to the pointer stored in the vcui-document file (recent_call) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be copied/assigned +*/ +void _vcui_doc_set_all_recent(call_data_t *in); + +/** + * This function adds the call data structure to the list of call data maintained in the + * vcui-document file (caller_list link list) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be added +*/ +void _vcui_doc_add_call_data(call_data_t *in); + +/** + * This function updates the call data structure contained in the list of call data maintained in the + * vcui-document file (caller_list link list) with the new call-data structure + * + * @return nothing + * @param[in] in pointer to the call-data structure to be updated +*/ +void _vcui_doc_update_call_data(call_data_t *in); + +/** + * This function checks if the call data pointer data is valid and present in the 'caller_list' list + * + * @return TRUE if the call-data is present and FALSE if there is no such call-data in the list + * @param[in] in pointer to the call-data structure +*/ +Eina_Bool _vcui_doc_is_valid_call_data(call_data_t *in); + +/** + * This function removes the call data structure from the list of call data maintained in the + * vcui-document file (caller_list link list) and frees the call data structure + * + * @return nothing + * @param[in] in pointer to the call-data structure to be added +*/ +void _vcui_doc_remove_call_data(call_data_t *in); + +/** + * This function removes the call data structure from the list of call data maintained in the + * vcui-document file (caller_list link list) + * + * @return a pointer to the call data structure which is passed + * @param[in] in pointer to the call-data structure to be added +*/ +call_data_t *_vcui_doc_remove_call_data_from_list(call_data_t *in); + +/** + * This function removes all the call data from list and frees the memory + * + * @return nothing + * @param[in] void +*/ +void _vcui_doc_remove_all_call_data(); + +/** + * This function retrieves the earliest call data based on the call status + * + * @return pointer to the call data structure + * @param[in] call_status value of the call status (hold/unhold) +*/ +call_data_t *_vcui_doc_get_call_data_by_call_status(int call_status); + +/** + * This function retrieves the most recent MO call data + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_call_data_mo_type(); + +/** + * This function retrieves the first call data in the list + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_first_call_data_from_list(); + +/** + * This function retrieves the first call data in the list which is of UNHOLD status + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_first_call_data_by_unhold_status(); + +/** + * This function retrieves the call data based on the given call handle + * + * @return pointer to the call data structure + * @param[in] handle value of the call handle +*/ +call_data_t *_vcui_doc_get_call_data_by_handle(int handle); + +/** + * This function retrieves the count of call data which are in HOLD status + * + * @return count of held call data + * @param[in] nothing +*/ +int _vcui_doc_get_hold_call_data_count(); + +/** + * This function retrieves the count of call data which are in UNHOLD status + * + * @return count of active call data + * @param[in] nothing +*/ +int _vcui_doc_get_unhold_call_data_count(); + +/** + * This function retrieves the count of call data which are in NO status (neither hold/unhold) + * + * @return count of 'no status' call data + * @param[in] nothing +*/ +int _vcui_doc_get_no_status_call_data_count(); + +/** + * This function retrieves the count of all call data in the list + * + * @return count of all call data + * @param[in] nothing +*/ +int _vcui_doc_get_all_call_data_count(); + +/** + * This function retrieves the call status of a group (greater than 1 member group) + * + * @return value of the call status (HOLD/UNHOLD) + * @param[in] nothing +*/ +int _vcui_doc_get_group_call_status(); + +/** + * This function retrieves the pointer to the list containing the call data with HOLD status + * + * @return pointer to the HOLD call data list + * @param[in] nothing +*/ +Eina_List *_vcui_doc_get_caller_list_with_hold_status(); + +/** + * This function retrieves the pointer to the list containing the call data with UNHOLD status + * + * @return pointer to the UNHOLD call data list + * @param[in] nothing +*/ +Eina_List *_vcui_doc_get_caller_list_with_unhold_status(); + +/** + * This function prints all the call data structure members + * + * @return nothing + * @param[in] msg_pos type of message +*/ +void _vcui_doc_print_all_call_data(char *msg_pos); + +/** + * This function assigns UNHOLD call status to all the call data in the list + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_set_all_call_data_to_unhold_status(); + +/** + * This function assigns HOLD call status to all the call data in the list + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_set_all_call_data_to_hold_status(); + +/** + * This function swaps the HOLD and UNHOLD calls in the call list + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_swap_all_call_data_status(); + +#endif + diff --git a/ui/vcui-view-callend.h b/ui/src/include/vcui-view-callend.h similarity index 60% rename from ui/vcui-view-callend.h rename to ui/src/include/vcui-view-callend.h index df0dceb..a533129 100755 --- a/ui/vcui-view-callend.h +++ b/ui/src/include/vcui-view-callend.h @@ -15,11 +15,15 @@ */ -typedef struct { - Evas_Object *contents; - Evas_Object *ic; /* small size call image */ - Evas_Object *record_btn; - vcui_app_call_status_t call_status; -} endcall_view_priv_t; +#ifndef _VCUI_VIEW_CALLEND_H_ +#define _VCUI_VIEW_CALLEND_H_ + voice_call_view_data_t *_vcui_view_callend_new(vcui_app_call_data_t *ad); +int _vc_ui_view_callend_check_valid_eo(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_callend_get_layout(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_callend_get_button_layout(voice_call_view_data_t *vd); +void _vc_ui_view_callend_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur); +Evas_Object *_vc_ui_view_callend_get_caller_info(voice_call_view_data_t *vd); + +#endif diff --git a/ui/vcui-view-choice.h b/ui/src/include/vcui-view-choice.h similarity index 93% rename from ui/vcui-view-choice.h rename to ui/src/include/vcui-view-choice.h index f50d019..ed6ac86 100755 --- a/ui/vcui-view-choice.h +++ b/ui/src/include/vcui-view-choice.h @@ -23,5 +23,6 @@ void _vcui_view_auto_change(); void _vcui_view_update(); void _vcui_view_all_hide(); void _vcui_view_destroy(vcui_app_call_view_id_t view_id); - +void _vcui_view_quickpanel_change(); + #endif /*_VCUI_VIEW_CHOICE_H_*/ diff --git a/ui/vcui-view-common.h b/ui/src/include/vcui-view-common.h similarity index 91% rename from ui/vcui-view-common.h rename to ui/src/include/vcui-view-common.h index e3f10cf..39f8831 100755 --- a/ui/vcui-view-common.h +++ b/ui/src/include/vcui-view-common.h @@ -15,8 +15,8 @@ */ -#ifndef _VOICE_CALL_UI_INCALL_ -#define _VOICE_CALL_UI_INCALL_ +#ifndef _VCUI_VIEW_COMMON_H_ +#define _VCUI_VIEW_COMMON_H_ #include @@ -66,4 +66,7 @@ void _vcui_view_common_timer_redial_reset(); int _vcui_view_common_call_terminate_or_view_change(void); +void _vcui_view_common_show_noid_image(Evas_Object *layout); +void _vcui_view_common_update_mute_btn(void); + #endif diff --git a/ui/vcui-view-dialing.h b/ui/src/include/vcui-view-dialing.h similarity index 60% rename from ui/vcui-view-dialing.h rename to ui/src/include/vcui-view-dialing.h index f90d6b1..9084a5b 100755 --- a/ui/vcui-view-dialing.h +++ b/ui/src/include/vcui-view-dialing.h @@ -15,21 +15,16 @@ */ -#ifndef _VCUI_VIEW_DIALING_ -#define _VCUI_VIEW_DIALING_ +#ifndef _VCUI_VIEW_DIALING_H_ +#define _VCUI_VIEW_DIALING_H_ -typedef struct { - Evas_Object *contents; - Evas_Object *ic; - call_data_t *now_data; -} vcui_view_dialing_priv_t; - - -voice_call_view_data_t * _vcui_view_dialing_new(vcui_app_call_data_t * ad); +voice_call_view_data_t *_vcui_view_dialing_new(vcui_app_call_data_t *ad); void _vcui_view_dialing_draw_txt_ended(voice_call_view_data_t *vd, int end_type); -void _vcui_view_dialing_draw_txt_connecting(voice_call_view_data_t *vd); -void _vcui_view_dialing_draw_txt_dialing(voice_call_view_data_t *vd); +int _vc_ui_view_dialing_check_valid_eo(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_dialing_get_layout(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_dialing_get_button_layout(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_dialing_get_caller_info(voice_call_view_data_t *vd); #endif diff --git a/ui/vcui-view-elements.h b/ui/src/include/vcui-view-elements.h similarity index 55% rename from ui/vcui-view-elements.h rename to ui/src/include/vcui-view-elements.h index 466edf7..1e1961e 100755 --- a/ui/vcui-view-elements.h +++ b/ui/src/include/vcui-view-elements.h @@ -15,12 +15,19 @@ */ -#ifndef _VOICE_CALL_UI_CALLBACK_ -#define _VOICE_CALL_UI_CALLBACK_ +#ifndef _VCUI_VIEW_ELEMENTS_H_ +#define _VCUI_VIEW_ELEMENTS_H_ + void _vcui_swap_btn_cb(void *data, Evas_Object * obj, void *event_info); void _vcui_conf_img_cb(void *data, Evas_Object * obj, void *event_info); + +#ifdef _VC_CONTACT_OPT_ +Evas_Object *_vcui_create_contact_button(void *data); +Evas_Object *_vcui_create_contact_button_disabled(void *data); +#endif /*_VC_CONTACT_OPT_*/ + Evas_Object *_vcui_create_top_left_button(void *data); Evas_Object *_vcui_create_top_left_button_disabled(void *data); Evas_Object *_vcui_create_top_middle_button(void *data); @@ -33,24 +40,36 @@ Evas_Object *_vcui_create_bottom_middle_button(void *data); Evas_Object *_vcui_create_bottom_middle_button_disabled(void *data); Evas_Object *_vcui_create_bottom_right_button(void *data); Evas_Object *_vcui_create_bottom_right_button_disabled(void *data); + Evas_Object *_vcui_create_button_bigend(void *data); Evas_Object *_vcui_create_button_bigend_disabled(void *data); Evas_Object *_vcui_create_conf_list_button_hold(void *data); -Evas_Object *_vcui_create_button_accept(void *data); -Evas_Object *_vcui_create_button_reject(void *data); -Evas_Object *_vcui_create_button_second_incoming_reject(void *data, char *text, char *part_name); -Evas_Object *_vcui_create_button_second_incoming_hold_and_accept(void *data, char *text); -Evas_Object *_vcui_create_button_second_incoming_end_and_accept(void *data, char *text); -Evas_Object *_vcui_create_button_second_incoming_end_active_and_accept(void *data, char *text); -Evas_Object *_vcui_create_button_second_incoming_end_hold_and_accept(void *data, char *text); -Evas_Object *_vcui_create_button_second_incoming_end_all_and_accept(void *data, char *text); - Evas_Object *_vcui_show_wallpaper_image(Evas_Object *contents); void _vcui_delete_contact_image(Evas_Object *contents); Evas_Object *_vcui_show_contact_image(Evas_Object *contents, Evas_Object *win_main, char *path); Evas_Object *_vcui_show_default_image(Evas_Object *contents, Evas_Object *win_main, char *path); -void _vcui_set_full_image(Evas_Object *contents, Evas_Object *win_main, char *img_path); -Evas_Object *_vcui_show_calling_name_bg(Evas_Object *contents); -#endif /* _VOICE_CALL_UI_CALLBACK_ */ +Evas_Object *_vcui_show_calling_name_bg(Evas_Object *contents); + +Evas_Object *_vcui_create_videocall_button(void *data, char *number); +Evas_Object *_vcui_create_voicecall_button(void *data, char *number); +Evas_Object *_vcui_create_message_button(void *data, char *number); +Evas_Object *_vcui_create_add_to_contacts_button(void *data, char *number); +Evas_Object *_vcui_create_view_contact_button(void *data, int ct_id); + +Evas_Object *_vcui_create_quickpanel_mute_button(void *data); +Evas_Object *_vcui_create_quickpanel_unhold_button(void *data); +Evas_Object *_vcui_create_quickpanel_end_button(void *data); + +Evas_Object *_vcui_create_hold_swap_button(void *data); +void _vcui_show_caller_info_name(void *data, const char *name, Eina_Bool bhold); +void _vcui_show_caller_info_number(void *data, const char *number, Eina_Bool bhold); +Evas_Object *_vcui_show_caller_info_icon(void *data, Eina_Bool bhold); +Evas_Object *_vcui_show_caller_info_status(void *data, const char *status, Eina_Bool bhold); +Evas_Object *_vcui_show_contact_image_split(Evas_Object *contents, const char *path, const char *full_path, Eina_Bool bhold); +Evas_Object *_vcui_show_call_bg_img(Evas_Object *contents); +Evas_Object *_vcui_show_call_not_saved_bg_img(Evas_Object *contents); +void _vcui_elements_check_keypad_n_hide(void *data); + +#endif /* _VCUI_VIEW_ELEMENTS_H_ */ diff --git a/ui/vcui-view-incoming-lock.h b/ui/src/include/vcui-view-incoming-lock.h similarity index 64% rename from ui/vcui-view-incoming-lock.h rename to ui/src/include/vcui-view-incoming-lock.h index 57df16f..0ad1b09 100755 --- a/ui/vcui-view-incoming-lock.h +++ b/ui/src/include/vcui-view-incoming-lock.h @@ -15,25 +15,13 @@ */ -#ifndef _VOICE_CALL_UI_INCOMING_LOCK_VIEW_ -#define _VOICE_CALL_UI_INCOMING_LOCK_VIEW_ +#ifndef _VCUI_VIEW_INCOMING_LOCK_H_ +#define _VCUI_VIEW_INCOMING_LOCK_H_ -typedef struct { - Evas_Object *contents; - Evas_Object *ic; - - Evas_Object *lock_accept; - int accept_start_x; - int accept_cur_x; - - Evas_Object *lock_reject; - int reject_start_x; - int reject_cur_x; - - call_data_t *now_data; - -} incoming_lock_view_priv_t; voice_call_view_data_t *_vcui_view_incoming_lock_new(vcui_app_call_data_t *ad); +int _vc_ui_view_incoming_lock_check_valid_eo(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_incoming_lock_get_caller_info(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_incoming_lock_get_layout(voice_call_view_data_t *vd); #endif diff --git a/ui/vcui-view-keypad.h b/ui/src/include/vcui-view-keypad.h similarity index 56% rename from ui/vcui-view-keypad.h rename to ui/src/include/vcui-view-keypad.h index 7cc4f03..d0540d3 100755 --- a/ui/vcui-view-keypad.h +++ b/ui/src/include/vcui-view-keypad.h @@ -15,32 +15,28 @@ */ -#ifndef _VCUI_VIEW_KEYPAD_ -#define _VCUI_VIEW_KEYPAD_ +#ifndef _VCUI_VIEW_KEYPAD_H_ +#define _VCUI_VIEW_KEYPAD_H_ #ifndef STRLEN -#define STRLEN(str) (((str) == NULL) ? 0: strlen(str)) +#define STRLEN(str) (((str) == NULL) ? 0 : strlen(str)) #endif -#define CURSOR_BEGIN -1 -#define CURSOR_END -2 +#define CURSOR_BEGIN -1 +#define CURSOR_END -2 -#define MAX_DIAL_NUMBER_FONT_SIZE 70 -#define KEYPAD_STR_DEFINE_OPEN_SIZE 73 +#define MAX_DIAL_NUMBER_FONT_SIZE 70 +#define KEYPAD_STR_DEFINE_OPEN_SIZE 73 #define KEYPAD_STR_DEFINE_CLOSE_SIZE 43 -#define KEYPAD_ENTRY_DISP_DATA_SIZE 1024 +#define KEYPAD_ENTRY_DISP_DATA_SIZE 1024 #define KEYPAD_ENTRY_SET_DATA_SIZE (KEYPAD_STR_DEFINE_OPEN_SIZE + KEYPAD_STR_DEFINE_CLOSE_SIZE + KEYPAD_ENTRY_DISP_DATA_SIZE) -typedef struct { - Evas_Object *contents; - Evas_Object *ic; - call_data_t *now_data; - Evas_Object *entry; - int data_len; - char entry_disp_data[KEYPAD_ENTRY_DISP_DATA_SIZE+1]; -} vcui_view_keypad_priv_t; +void _vcui_keypad_create_layout(void *data, Evas_Object *parent_ly); +Eina_Bool _vcui_keypad_get_show_status(void); +void _vcui_keypad_set_show_status(Eina_Bool bkeypad_status); +void _vcui_keypad_show_hide_effect(void *data, Evas_Object *parent_ly); +void _vcui_keypad_delete_layout(Evas_Object *parent_ly); +void _vcui_keypad_show_layout(void *data); #endif - -voice_call_view_data_t *_vcui_view_keypad_new(vcui_app_call_data_t *ad); diff --git a/ui/src/include/vcui-view-layout-hd.h b/ui/src/include/vcui-view-layout-hd.h new file mode 100755 index 0000000..34fac15 --- /dev/null +++ b/ui/src/include/vcui-view-layout-hd.h @@ -0,0 +1,1958 @@ +/* + * 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 _VCUI_VIEW_LAYOUT_HD_H_ +#define _VCUI_VIEW_LAYOUT_HD_H_ + +#define COLOR_DEFAULT 0 0 0 255 +#define COLOR_BG_ALPHA 0 0 0 0 +#define COLOR_BG_FOR_HELD_CALL_DIM 0 0 0 150 + +#define FONT_SLP_Bold "SLP:style=Bold" +#define FONT_SLP_Medium "SLP:style=Medium" +#define FONT_SLP_Roman "SLP:style=Roman" +#define FONT_SLP_Light "SLP:style=Light" +#define FONT_SLP_Regular "SLP:style=Regular" + +#define TEXT_CLASS_SLP_BOLD "slp_bold" +#define TEXT_CLASS_SLP_MEDIUM "slp_medium" +#define TEXT_CLASS_SLP_ROMAN "slp_roman" +#define TEXT_CLASS_SLP_LIGHT "slp_light" +#define TEXT_CLASS_SLP_REGULAR "slp_regular" + +/*#define BTN_EDGE_W 9*/ + +/* + * NBEAT-HD GUI Widget Dimensions + * In Portrait mode + */ +#define MAIN_SCREEN_W 720 +#define MAIN_SCREEN_H 1280 + +#define INDICATOR_HEIGHT 50 +#define NAVIFRAME_TITLE_HEIGHT 100 + +#define MAIN_NAVIFRAME_W MAIN_SCREEN_W +#define MAIN_NAVIFRAME_H (MAIN_SCREEN_H-INDICATOR_HEIGHT-NAVIFRAME_TITLE_HEIGHT) +#define NAVIFRAME_T_PAD 50 + +#define QP_WIN_W MAIN_SCREEN_W +#define QP_WIN_H 170 + +#define CALLER_INFO_L_PAD 0 +#define CALLER_INFO_WIDTH MAIN_SCREEN_W +#define CALLER_INFO_T_PAD 50 +#define CALLER_INFO_HEIGHT 162 + +#define CALLER_INFO_MAIN_WIDTH 680 +#define CALLER_INFO_MAIN_GAP 16 + +#define CALLER_INFO_TOP_PAD_HEIGHT 10 + +#define CALLER_INFO_NAME_L_PAD 24 +#define CALLER_INFO_NAME_WIDTH 595 +#define CALLER_INFO_NAME_T_PAD 24 +#define CALLER_INFO_NAME_HEIGHT 69 + +#define CALLER_INFO_VERT_SEP_L_PAD 600 +#define CALLER_INFO_VERT_SEP_WIDTH 2 +#define CALLER_INFO_VERT_SEP_T_PAD 24 +#define CALLER_INFO_VERT_SEP_HEIGHT 70 + +#define CALLER_INFO_ICON_L_PAD 626 +#define CALLER_INFO_ICON_WIDTH 70 +#define CALLER_INFO_ICON_T_PAD CALLER_INFO_NAME_T_PAD +#define CALLER_INFO_ICON_HEIGHT 70 + +#define CALLER_INFO_NUMBER_L_PAD CALLER_INFO_NAME_L_PAD +#define CALLER_INFO_NUMBER_WIDTH (CALLER_INFO_MAIN_WIDTH-CALLER_INFO_MAIN_GAP-250) +#define CALLER_INFO_NUMBER_T_PAD (CALLER_INFO_NAME_T_PAD+CALLER_INFO_NAME_HEIGHT+CALLER_INFO_MAIN_GAP) +#define CALLER_INFO_NUMBER_HEIGHT 28 + +#define CALLER_INFO_TIME_L_PAD (CALLER_INFO_NAME_L_PAD+CALLER_INFO_NUMBER_WIDTH+CALLER_INFO_MAIN_GAP) +#define CALLER_INFO_TIME_WIDTH 250 +#define CALLER_INFO_TIME_T_PAD CALLER_INFO_NUMBER_T_PAD +#define CALLER_INFO_TIME_HEIGHT CALLER_INFO_NUMBER_HEIGHT + +#define DIALING_STATUS_L_PAD 0 +#define DIALING_STATUS_WIDTH MAIN_SCREEN_W +#define DIALING_STATUS_T_PAD 868 +#define DIALING_STATUS_HEIGHT 52 + +#define CALL_NAME_L_PAD 20 +#define CALL_NAME_WIDTH 680 +#define CALL_NAME_T_PAD 83 +#define CALL_NAME_HEIGHT 80 + +#define CALL_NUMBER_T_GAP 6 + +#define CALL_NUMBER_L_PAD CALL_NAME_L_PAD +#define CALL_NUMBER_WIDTH CALL_NAME_WIDTH +#define CALL_NUMBER_T_PAD (CALL_NAME_T_PAD+CALL_NAME_HEIGHT+CALL_NUMBER_T_GAP) +#define CALL_NUMBER_HEIGHT 52 + +#define CALLER_ID_L_PAD 208 +#define CALLER_ID_WIDTH 304 +#define CALLER_ID_T_PAD 268 +#define CALLER_ID_HEIGHT 304 + +#define ENDCALL_CALLER_ID_L_PAD 150 +#define ENDCALL_CALLER_ID_WIDTH 420 +#define ENDCALL_CALLER_ID_T_PAD 292 +#define ENDCALL_CALLER_ID_HEIGHT 420 + +#define ENDCALL_BTN_BG_L_PAD 0 +#define ENDCALL_BTN_BG_WIDTH 720 +#define ENDCALL_BTN_BG_T_PAD 1058 +#define ENDCALL_BTN_BG_HEIGHT 222 + +#define NOIMAGE_L_PAD 0 +#define NOIMAGE_WIDTH 720 +#define NOIMAGE_T_PAD 212 +#define NOIMAGE_HEIGHT 500 + +#define BACKGROUND_CID_L_PAD 0 +#define BACKGROUND_CID_WIDTH MAIN_SCREEN_W +#define BACKGROUND_CID_T_PAD 0 +#define BACKGROUND_CID_HEIGHT MAIN_SCREEN_H + +#define MT_CALLING_NAME_BG_WIDTH MAIN_SCREEN_W +#define MT_CALLING_NAME_BG_HEIGHT 590 + +#define MTLOCK_ACCEPT_OUTER_CIRCLE_BG_L_PAD (-152) +#define MTLOCK_ACCEPT_OUTER_CIRCLE_BG_WIDTH 526 +#define MTLOCK_ACCEPT_OUTER_CIRCLE_BG_T_PAD 775 +#define MTLOCK_ACCEPT_OUTER_CIRCLE_BG_HEIGHT 526 + +#define MTLOCK_ACCEPT_INNER_CIRCLE_BG_L_PAD 14 +#define MTLOCK_ACCEPT_INNER_CIRCLE_BG_WIDTH 194 +#define MTLOCK_ACCEPT_INNER_CIRCLE_BG_T_PAD 941 +#define MTLOCK_ACCEPT_INNER_CIRCLE_BG_HEIGHT 194 + +#define MTLOCK_ACCEPT_ICON_L_PAD 60 +#define MTLOCK_ACCEPT_ICON_WIDTH 102 +#define MTLOCK_ACCEPT_ICON_T_PAD 987 +#define MTLOCK_ACCEPT_ICON_HEIGHT 102 + +#define MTLOCK_ACCEPT_ARROW1_L_PAD 228 +#define MTLOCK_ACCEPT_ARROW1_WIDTH 20 +#define MTLOCK_ACCEPT_ARROW1_T_PAD 1022 +#define MTLOCK_ACCEPT_ARROW1_HEIGHT 32 + +#define MTLOCK_ACCEPT_ARROW2_L_PAD 276 +#define MTLOCK_ACCEPT_ARROW2_WIDTH MTLOCK_ACCEPT_ARROW1_WIDTH +#define MTLOCK_ACCEPT_ARROW2_T_PAD MTLOCK_ACCEPT_ARROW1_T_PAD +#define MTLOCK_ACCEPT_ARROW2_HEIGHT MTLOCK_ACCEPT_ARROW1_HEIGHT + +#define MTLOCK_ACCEPT_ARROW3_L_PAD 324 +#define MTLOCK_ACCEPT_ARROW3_WIDTH MTLOCK_ACCEPT_ARROW1_WIDTH +#define MTLOCK_ACCEPT_ARROW3_T_PAD MTLOCK_ACCEPT_ARROW1_T_PAD +#define MTLOCK_ACCEPT_ARROW3_HEIGHT MTLOCK_ACCEPT_ARROW1_HEIGHT + +#define MTLOCK_REJECT_OUTER_CIRCLE_BG_L_PAD 346 +#define MTLOCK_REJECT_OUTER_CIRCLE_BG_WIDTH MTLOCK_ACCEPT_OUTER_CIRCLE_BG_WIDTH +#define MTLOCK_REJECT_OUTER_CIRCLE_BG_T_PAD MTLOCK_ACCEPT_OUTER_CIRCLE_BG_T_PAD +#define MTLOCK_REJECT_OUTER_CIRCLE_BG_HEIGHT MTLOCK_ACCEPT_OUTER_CIRCLE_BG_HEIGHT + +#define MTLOCK_REJECT_INNER_CIRCLE_BG_L_PAD 512 +#define MTLOCK_REJECT_INNER_CIRCLE_BG_WIDTH MTLOCK_ACCEPT_INNER_CIRCLE_BG_WIDTH +#define MTLOCK_REJECT_INNER_CIRCLE_BG_T_PAD MTLOCK_ACCEPT_INNER_CIRCLE_BG_T_PAD +#define MTLOCK_REJECT_INNER_CIRCLE_BG_HEIGHT MTLOCK_ACCEPT_INNER_CIRCLE_BG_HEIGHT + +#define MTLOCK_REJECT_ICON_R_PAD 60 +#define MTLOCK_REJECT_ICON_WIDTH MTLOCK_ACCEPT_ICON_WIDTH +#define MTLOCK_REJECT_ICON_L_PAD (MAIN_SCREEN_W-MTLOCK_REJECT_ICON_R_PAD-MTLOCK_REJECT_ICON_WIDTH) +#define MTLOCK_REJECT_ICON_T_PAD MTLOCK_ACCEPT_ICON_T_PAD +#define MTLOCK_REJECT_ICON_HEIGHT MTLOCK_ACCEPT_ICON_HEIGHT + +#define MTLOCK_REJECT_ARROW1_L_PAD 376 +#define MTLOCK_REJECT_ARROW1_WIDTH 20 +#define MTLOCK_REJECT_ARROW1_T_PAD MTLOCK_ACCEPT_ARROW1_T_PAD +#define MTLOCK_REJECT_ARROW1_HEIGHT MTLOCK_ACCEPT_ARROW1_HEIGHT + +#define MTLOCK_REJECT_ARROW2_L_PAD 424 +#define MTLOCK_REJECT_ARROW2_WIDTH MTLOCK_REJECT_ARROW1_WIDTH +#define MTLOCK_REJECT_ARROW2_T_PAD MTLOCK_REJECT_ARROW1_T_PAD +#define MTLOCK_REJECT_ARROW2_HEIGHT MTLOCK_REJECT_ARROW1_HEIGHT + +#define MTLOCK_REJECT_ARROW3_L_PAD 472 +#define MTLOCK_REJECT_ARROW3_WIDTH MTLOCK_REJECT_ARROW1_WIDTH +#define MTLOCK_REJECT_ARROW3_T_PAD MTLOCK_REJECT_ARROW1_T_PAD +#define MTLOCK_REJECT_ARROW3_HEIGHT MTLOCK_REJECT_ARROW1_HEIGHT + +#define MTLOCK_REJECT_MSG_BG_L_PAD 0 +#define MTLOCK_REJECT_MSG_BG_WIDTH MAIN_SCREEN_W +#define MTLOCK_REJECT_MSG_BG_HEIGHT 92 +#define MTLOCK_REJECT_MSG_BG_T_PAD (MAIN_SCREEN_H-MTLOCK_REJECT_MSG_BG_HEIGHT) + +#define MTLOCK_REJECT_MSG_ARW_L_PAD 351 +#define MTLOCK_REJECT_MSG_ARW_WIDTH 18 +#define MTLOCK_REJECT_MSG_ARW_T_PAD (MTLOCK_REJECT_MSG_BG_T_PAD+12) +#define MTLOCK_REJECT_MSG_ARW_HEIGHT 12 + +#define MTLOCK_REJECT_MSG_TEXT_L_PAD 0 +#define MTLOCK_REJECT_MSG_TEXT_WIDTH MAIN_SCREEN_W +#define MTLOCK_REJECT_MSG_TEXT_T_PAD (MTLOCK_REJECT_MSG_BG_T_PAD+24) +#define MTLOCK_REJECT_MSG_TEXT_HEIGHT 68 + +#define MTLOCK_REJECT_MSG_ICON_WIDTH 50 +#define MTLOCK_REJECT_MSG_ICON_HEIGHT 50 + +#define MTLOCK_REJECT_MSG_PAD 20 + +#define MTLOCK_REJECT_MSG_LIST_L_PAD 0 +#define MTLOCK_REJECT_MSG_LIST_WIDTH MAIN_SCREEN_W +#define MTLOCK_REJECT_MSG_LIST_T_PAD MAIN_SCREEN_H +#define MTLOCK_REJECT_MSG_ONE_LINE_LIST_HEIGHT 118 +#define MTLOCK_REJECT_MSG_TWO_LINE_LIST_HEIGHT 230 +#define MTLOCK_REJECT_MSG_THREE_LINE_LIST_HEIGHT 342 +#define MTLOCK_REJECT_MSG_FOUR_LINE_LIST_HEIGHT 454 +#define MTLOCK_REJECT_MSG_FIVE_LINE_LIST_HEIGHT 566 +#define MTLOCK_REJECT_MSG_SIX_LINE_LIST_HEIGHT 678 + +#define MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT 114 + +#define SNS_ALERTS_LAYOUT_L_PAD 0 +#define SNS_ALERTS_LAYOUT_WIDTH MAIN_SCREEN_W +#define SNS_ALERTS_LAYOUT_T_PAD 586 +#define SNS_ALERTS_LAYOUT_SHIFT_T_PAD 696 +#define SNS_ALERTS_LAYOUT_HEIGHT 170 + +#define SNS_ALERTS_LAYOUT_SHIFT_EXPANDED_T_PAD 494 +#define SNS_ALERTS_LAYOUT_EXPANDED_T_PAD 362 +#define SNS_ALERTS_LAYOUT_EXPANDED_HEIGHT 380 + +#define BIRTHDAY_ICON_L_PAD 20 +#define BIRTHDAY_ICON_WIDTH 55 +#define BIRTHDAY_ICON_T_PAD 0 //584 +#define BIRTHDAY_ICON_HEIGHT 55 + +/*#define BIRTHDAY_ICON_SHIFT_L_PAD 20 +#define BIRTHDAY_ICON_SHIFT_WIDTH 55 +#define BIRTHDAY_ICON_SHIFT_T_PAD 716 +#define BIRTHDAY_ICON_SHIFT_HEIGHT 55*/ + +#define BIRTHDAY_TEXT_L_PAD (BIRTHDAY_ICON_L_PAD+BIRTHDAY_ICON_WIDTH+16) +#define BIRTHDAY_TEXT_WIDTH 609 +#define BIRTHDAY_TEXT_T_PAD (BIRTHDAY_ICON_T_PAD+20) +#define BIRTHDAY_TEXT_HEIGHT 42 + +/*#define BIRTHDAY_TEXT_SHIFT_L_PAD (BIRTHDAY_ICON_SHIFT_L_PAD+BIRTHDAY_ICON_SHIFT_WIDTH+16) +#define BIRTHDAY_TEXT_SHIFT_WIDTH 609 +#define BIRTHDAY_TEXT_SHIFT_T_PAD (BIRTHDAY_ICON_SHIFT_T_PAD+20) +#define BIRTHDAY_TEXT_SHIFT_HEIGHT 42*/ + +#define SNS_STATUS_ICON_L_PAD 20 +#define SNS_STATUS_ICON_WIDTH 55 +#define SNS_STATUS_ICON_T_PAD (BIRTHDAY_ICON_T_PAD+BIRTHDAY_ICON_HEIGHT+22) +#define SNS_STATUS_ICON_HEIGHT 55 + +#define SNS_STATUS_TEXT_L_PAD BIRTHDAY_TEXT_L_PAD +#define SNS_STATUS_TEXT_WIDTH BIRTHDAY_TEXT_WIDTH +#define SNS_STATUS_TEXT_T_PAD (BIRTHDAY_TEXT_T_PAD+BIRTHDAY_TEXT_HEIGHT+24) +#define SNS_STATUS_TEXT_HEIGHT (42*2) + +#define SNS_STATUS_ARROW_WIDTH 52 +#define SNS_STATUS_ARROW_L_PAD (MAIN_SCREEN_W-20-SNS_STATUS_ARROW_WIDTH) +#define SNS_STATUS_ARROW_T_PAD (BIRTHDAY_TEXT_T_PAD+BIRTHDAY_TEXT_HEIGHT+38) +#define SNS_STATUS_ARROW_HEIGHT 52 + +#define SNS_STATUS_EXPANDED_TEXT_WIDTH (BIRTHDAY_TEXT_WIDTH-SNS_STATUS_ARROW_WIDTH-16) +#define SNS_STATUS_EXPANDED_TEXT_HEIGHT (42*7) + +#define ACCEPT_BTN_L_PAD 40 +#define ACCEPT_BTN_WIDTH 300 +#define ACCEPT_BTN_T_PAD 992 +#define ACCEPT_BTN_HEIGHT 112 + +#define REJECT_BTN_L_GAP 40 + +#define REJECT_BTN_L_PAD (ACCEPT_BTN_L_PAD+ACCEPT_BTN_WIDTH+REJECT_BTN_L_GAP) +#define REJECT_BTN_WIDTH ACCEPT_BTN_WIDTH +#define REJECT_BTN_T_PAD ACCEPT_BTN_T_PAD +#define REJECT_BTN_HEIGHT ACCEPT_BTN_HEIGHT + +#define REJECT_W_MSG_BTN_T_GAP 40 + +#define REJECT_W_MSG_BTN_L_PAD ACCEPT_BTN_L_PAD +#define REJECT_W_MSG_BTN_WIDTH 640 +#define REJECT_W_MSG_BTN_T_PAD (ACCEPT_BTN_T_PAD+ACCEPT_BTN_HEIGHT+REJECT_W_MSG_BTN_T_GAP) +#define REJECT_W_MSG_BTN_HEIGHT 90 + +#define INCALL_EXTRA_VOL_BTN_L_PAD 636 +#define INCALL_EXTRA_VOL_BTN_WIDTH 64 +#define INCALL_EXTRA_VOL_BTN_T_PAD 236 +#define INCALL_EXTRA_VOL_BTN_HEIGHT 64 + +#define INCALL_HOLD_BTN_L_PAD 475 +#define INCALL_HOLD_BTN_WIDTH 78 +#define INCALL_HOLD_BTN_T_PAD 852 +#define INCALL_HOLD_BTN_HEIGHT 78 + +#define INCALL_HOLD_TXT_L_PAD 573 +#define INCALL_HOLD_TXT_WIDTH 147 +#define INCALL_HOLD_TXT_T_PAD 852 +#define INCALL_HOLD_TXT_HEIGHT 78 + +#define INCALL_TIMER_L_PAD 40 +#define INCALL_TIMER_WIDTH 640 +#define INCALL_TIMER_T_PAD 687 +#define INCALL_TIMER_HEIGHT 52 + +#define INCALL_NOISE_ICN_L_PAD 18 +#define INCALL_NOISE_ICN_WIDTH 58 +#define INCALL_NOISE_ICN_T_PAD 852 +#define INCALL_NOISE_ICN_HEIGHT 58 + +#define INCALL_SOUND_EQ_ICN_L_PAD 72 +#define INCALL_SOUND_EQ_ICN_WIDTH 58 +#define INCALL_SOUND_EQ_ICN_T_PAD INCALL_NOISE_ICN_T_PAD +#define INCALL_SOUND_EQ_ICN_HEIGHT 58 + +#define INCALL_SHARE_BG_T_PAD 584 +#define INCALL_SHARE_BG_HEIGHT 654 + +#define KEYPAD_ENTRY_TXT_L_PAD 40 +#define KEYPAD_ENTRY_TXT_WIDTH 640 +#define KEYPAD_ENTRY_TXT_T_PAD 0 +#define KEYPAD_ENTRY_TXT_HEIGHT 100 + +#define KEYPAD_AREA_L_PAD 0 +#define KEYPAD_AREA_WIDTH MAIN_SCREEN_W +#define KEYPAD_AREA_T_PAD 252 +#define KEYPAD_AREA_HEIGHT 662 + +#define KEYPAD_BTNS_BG_L_PAD 40 +#define KEYPAD_BTNS_BG_WIDTH 640 +#define KEYPAD_BTNS_BG_T_PAD 112 +#define KEYPAD_BTNS_BG_HEIGHT 550 + +#define KEYPAD_EACH_BTN_WIDTH 212 +#define KEYPAD_EACH_BTN_HEIGHT 134 + +#define KEYPAD_COL1_BTN_L_PAD 40 +#define KEYPAD_COL2_BTN_L_PAD 254 +#define KEYPAD_COL3_BTN_L_PAD 468 + +#define KEYPAD_BTN_TXT_REGION_HEIGHT 112 + +#define KEYPAD_ROW1_BTN_T_PAD 116 /*w.r.t button region layout*/ +#define KEYPAD_ROW2_BTN_T_PAD 252 +#define KEYPAD_ROW3_BTN_T_PAD 388 +#define KEYPAD_ROW4_BTN_T_PAD 524 + +#define KP_LVERT_SEP1_L_PAD 212 +#define KP_RVERT_SEP1_L_PAD 426 +#define KP_ROW1_VERT_SEP_T_PAD 17 +#define KP_ROW2_VERT_SEP_T_PAD 153 +#define KP_ROW3_VERT_SEP_T_PAD 289 +#define KP_ROW4_VERT_SEP_T_PAD 425 + +#define KP_HORIZ_SEP_L_PAD 14 +#define KP_ROW1_HORIZ_SEP_T_PAD 138 +#define KP_ROW2_HORIZ_SEP_T_PAD 274 +#define KP_ROW3_HORIZ_SEP_T_PAD 410 + +#define KEYPAD_VERT_SEP_WIDTH 1 +#define KEYPAD_VERT_SEP_HEIGHT 108 +#define KEYPAD_HORIZ_SEP_WIDTH 612 +#define KEYPAD_HORIZ_SEP_HEIGHT 1 + +#define RIGHT_ICON_L_PAD 18 +#define RIGHT_ICON_WIDTH 94 +#define RIGHT_ICON_HEIGHT 36 + +#define LEFT_TXT_L_PAD 24 +#define LEFT_TXT_WIDTH 64 +#define RIGHT_TXT_TYPE1_L_PAD 18 +#define RIGHT_TXT_TYPE2_L_PAD 18 + +#define SPLIT_CID1_L_PAD 0 +#define SPLIT_CID1_WIDTH CALLER_INFO_WIDTH +#define SPLIT_CID1_T_PAD INDICATOR_HEIGHT +#define SPLIT_CID1_HEIGHT 445 + +#define SPLIT_PAUSE_L_PAD (SPLIT_CID1_L_PAD+8) +#define SPLIT_PAUSE_WIDTH 62 +#define SPLIT_PAUSE_HEIGHT 62 +#define SPLIT_PAUSE_T_PAD (SPLIT_CID1_T_PAD+SPLIT_CID1_HEIGHT-8-SPLIT_PAUSE_HEIGHT) + +#define CALLER_INFO_HOLD_T_PAD (CALLER_INFO_T_PAD+SPLIT_CID1_HEIGHT) + +#define SPLIT_CID2_L_PAD 0 +#define SPLIT_CID2_WIDTH CALLER_INFO_WIDTH +#define SPLIT_CID2_T_PAD CALLER_INFO_HOLD_T_PAD +#define SPLIT_CID2_HEIGHT 445 + +#define SPLIT_PLAY_L_PAD (SPLIT_CID2_L_PAD+12) +#define SPLIT_PLAY_WIDTH 40 +#define SPLIT_PLAY_HEIGHT 40 +#define SPLIT_PLAY_T_PAD (SPLIT_CID2_T_PAD+SPLIT_CID2_HEIGHT-8-SPLIT_PLAY_HEIGHT) + +#define SPLIT_NAME1_L_PAD 38 +#define SPLIT_NAME1_WIDTH 364 +#define SPLIT_NAME1_T_PAD 145 +#define SPLIT_NAME1_HEIGHT 58 + +#define SPLIT_NAME2_L_PAD (SPLIT_NAME1_L_PAD+SPLIT_NAME1_WIDTH+22) +#define SPLIT_NAME2_WIDTH 258 +#define SPLIT_NAME2_T_PAD 217 +#define SPLIT_NAME2_HEIGHT 40 + +#define SPLIT_EXTRA_VOL_T_PAD 650 + +#define SPLIT_TIMER_TXT_T_PAD 549 +#define SPLIT_TIMER_TXT_HEIGHT 46 + +#define SPLIT_MORE_BTN_WIDTH 40 +#define SPLIT_MORE_BTN_L_PAD (SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) +#define SPLIT_ONHOLD_TXT_W_ICON_WIDTH (SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) +#define SPLIT_ONHOLD_TXT_T_PAD 492 +#define SPLIT_ONHOLD_TXT_HEIGHT 40 + +#define SPLIT_SWAP_CID1_L_PAD 70 +#define SPLIT_SWAP_CID1_WIDTH 208 + +#define SPLIT_SWAP_PLAY_L_PAD (SPLIT_SWAP_CID1_L_PAD+12) +#define SPLIT_SWAP_PLAY_WIDTH 40 + +#define SPLIT_SWAP_CID2_L_PAD 336 +#define SPLIT_SWAP_CID2_WIDTH 304 + +#define SPLIT_SWAP_PAUSE_L_PAD (SPLIT_SWAP_CID2_L_PAD+8) +#define SPLIT_SWAP_PAUSE_WIDTH 62 + +#define SPLIT_SWAP_NAME1_L_PAD 38 +#define SPLIT_SWAP_NAME1_WIDTH 258 + +#define SPLIT_SWAP_NAME2_L_PAD (SPLIT_SWAP_NAME1_L_PAD+SPLIT_SWAP_NAME1_WIDTH+22) +#define SPLIT_SWAP_NAME2_WIDTH 364 + +#define SPLIT_SWAP_MORE_BTN_WIDTH 60 +#define SPLIT_SWAP_MORE_BTN_L_PAD (SPLIT_SWAP_CID2_L_PAD+SPLIT_SWAP_CID2_WIDTH-SPLIT_SWAP_MORE_BTN_WIDTH) +#define SPLIT_SWAP_MORE_BTN_T_PAD (SPLIT_TIMER_TXT_T_PAD-7) +#define SPLIT_SWAP_MORE_BTN_HEIGHT 60 +#define SPLIT_TIMER_TXT_W_ICON_WIDTH (SPLIT_SWAP_CID2_WIDTH-SPLIT_SWAP_MORE_BTN_WIDTH) + +#define MULTI_LIST_HEIGHT 1008 + +#define CONF_LIST_T_PAD 0 +#define CONF_LIST_HEIGHT 565 + +#define CONF_HOLD_WIDTH 82 +#define CONF_HOLD_L_PAD (MAIN_SCREEN_W-40-CONF_HOLD_WIDTH) +#define CONF_HOLD_T_PAD 674 +#define CONF_HOLD_HEIGHT 78 + +#define CONF_TIMER_T_PAD 674 +#define CONF_TIMER_HEIGHT 78 + +#define CONF_CALL_BIG_END_L_PAD 16 +#define CONF_CALL_BIG_END_T_PAD 870 +#define CONF_CALL_BIG_END_WIDTH 688 + +#define REJ_MSG_NEW_BTN_L_PAD 40 +#define REJ_MSG_NEW_BTN_WIDTH 640 +#define REJ_MSG_NEW_BTN_T_PAD 120 +#define REJ_MSG_NEW_BTN_HEIGHT 128 + +#define REJ_MSG_LIST_T_PAD 32 +#define REJ_MSG_LIST_HEIGHT 1096 + +#define SIX_BTN_LAYOUT_L_PAD 0 +#define SIX_BTN_LAYOUT_WIDTH 720 +#define SIX_BTN_LAYOUT_T_PAD 940 +#define SIX_BTN_LAYOUT_HEIGHT 340 + +#define THREE_BTN_LAYOUT_WIDTH MAIN_SCREEN_W +#define THREE_BTN_LAYOUT_HEIGHT 222 + +#define BTN_LAYOUT_SINGLE_BTN_WIDTH 216 +#define BTN_LAYOUT_SINGLE_BTN_HEIGHT 168 +#define BTN_LAYOUT_BTN_GAP 2 + +#define BTN_LAYOUT_LEFT_BTN_L_PAD 34 +#define BTN_LAYOUT_MIDDLE_BTN_L_PAD (BTN_LAYOUT_LEFT_BTN_L_PAD+BTN_LAYOUT_SINGLE_BTN_WIDTH+BTN_LAYOUT_BTN_GAP) +#define BTN_LAYOUT_RIGHT_BTN_L_PAD (BTN_LAYOUT_MIDDLE_BTN_L_PAD+BTN_LAYOUT_SINGLE_BTN_WIDTH+BTN_LAYOUT_BTN_GAP) + +#define BTN_LAYOUT_TOP_BTN_T_PAD 0 +#define BTN_LAYOUT_BOTTOM_BTN_T_PAD (BTN_LAYOUT_TOP_BTN_T_PAD+BTN_LAYOUT_SINGLE_BTN_HEIGHT+BTN_LAYOUT_BTN_GAP) + +#define LEFT_VERT_SEP_L_PAD 250 +#define RIGHT_VERT_SEP_L_PAD 468 +#define TOP_VERT_SEP_T_PAD 22 +#define BOTTOM_VERT_SEP_T_PAD 192 +#define HORIZ_SEP_L_PAD 34 +#define TOP_HORIZ_SEP_T_PAD 168 +#define BOTTOM_HORIZ_SEP_T_PAD 338 +#define SEPARTOR_WIDTH 1 +#define VERT_SEP_HEIGHT 124 +#define HORIZ_SEP_WIDTH 652 + +#define ENDCALL_LEFT_VERT_SEP_L_PAD 250 +#define ENDCALL_SEPARTOR_WIDTH 1 +#define ENDCALL_VERT_SEP_T_PAD 49 +#define ENDCALL_VERT_SEP_HEIGHT 124 +#define ENDCALL_RIGHT_VERT_SEP_L_PAD 468 + +#define CALL_BIG_END_L_PAD 40 +#define CALL_BIG_END_WIDTH 640 +#define CALL_BIG_END_T_PAD 1140 +#define CALL_BIG_END_HEIGHT 112 + +#define INCMG_CALL_BTN1_T_PAD 700 +#define INCMG_CALL_BTN_HEIGHT CALL_BIG_END_HEIGHT +#define INCMG_CALL_BTN2_T_PAD 838 +#define INCMG_CALL_BTN3_T_PAD 976 + +#define ENDCALL_VOICE_BTN_L_PAD 34 +#define ENDCALL_VOICE_BTN_WIDTH 216 +#define ENDCALL_VOICE_BTN_T_PAD 1058 +#define ENDCALL_VOICE_BTN_HEIGHT 222 +#define ENDCALL_VIDEO_BTN_L_PAD (ENDCALL_VOICE_BTN_L_PAD+ENDCALL_VOICE_BTN_WIDTH+2) +#define ENDCALL_MSG_BTN_L_PAD (ENDCALL_VIDEO_BTN_L_PAD+ENDCALL_VOICE_BTN_WIDTH+2) + +#define ENDCALL_CONTACT_BTN_L_PAD 40 +#define ENDCALL_CONTACT_BTN_WIDTH 640 +#define ENDCALL_CONTACT_BTN_T_PAD 896 +#define ENDCALL_CONTACT_BTN_HEIGHT 92 + +#define QP_CID_L_PAD 16 +#define QP_CID_WIDTH 105 +#define QP_CID_T_PAD 33 +#define QP_CID_HEIGHT 105 + +#define QP_MUTE_BTN_L_PAD 172 +#define QP_MUTE_BTN_WIDTH 256 +#define QP_MUTE_BTN_T_PAD 78 +#define QP_MUTE_BTN_HEIGHT 74 + +#define QP_END_BTN_L_PAD 448 +#define QP_END_BTN_WIDTH QP_MUTE_BTN_WIDTH +#define QP_END_BTN_T_PAD QP_MUTE_BTN_T_PAD +#define QP_END_BTN_HEIGHT QP_MUTE_BTN_HEIGHT + +#define QP_NAME_L_PAD QP_MUTE_BTN_L_PAD +#define QP_NAME_WIDTH 532 +#define QP_NAME_T_PAD 22 +#define QP_NAME_HEIGHT 36 + +#define QP_STR_MIN_WIDTH 50 +/* + * End of NBEAT-HD GUI Widget Dimensions + */ + + +/* + * Relative positions + * In Portrait mode + */ +/* Relative X & Y positions of widgets w.r.t. Full Screen */ +#define REL_W(x) ((x)/MAIN_SCREEN_W) +#define REL_H(y) ((y)/MAIN_SCREEN_H) + +/* Relative X & Y positions of widgets w.r.t. Navi-frame layout */ +/*#define WL_NB_H 94*/ +#define REL_NAVIFRAME_W(x) ((x)/MAIN_NAVIFRAME_W) +#define REL_NAVIFRAME_H(y) ((y)/MAIN_NAVIFRAME_H) + +/* Relative X & Y positions of widgets w.r.t. ACC/REJ ICON layout */ +#define REL_LOCK_W(x) ((x)/483) +#define REL_LOCK_H(y) ((y)/198) +/* Relative X & Y positions of widgets w.r.t. REJ-W-MSG ICON layout */ +#define REL_LOCK_MSG_W(x) ((x)/348) +#define REL_LOCK_MSG_H(y) ((y)/200) + +/* Relative X & Y positions of widgets w.r.t. Keypad layout */ +#define REL_KEYPAD_W(x) ((x)/KEYPAD_AREA_WIDTH) +#define REL_KEYPAD_H(y) ((y)/KEYPAD_AREA_HEIGHT) + +/* Relative X & Y positions of widgets w.r.t. Keypad Buttons layout */ +#define REL_KEYPAD_BTNS_W(x) ((x)/KEYPAD_BTNS_BG_WIDTH) +#define REL_KEYPAD_BTNS_H(y) ((y)/KEYPAD_BTNS_BG_HEIGHT) + +/* Relative X & Y positions of widgets w.r.t. Quick-panel layout */ +#define REL_QP_W(x) ((x)/QP_WIN_W) +#define REL_QP_H(y) ((y)/QP_WIN_H) + +/* Relative X & Y positions of buttons w.r.t. Six-Button layout */ +#define REL_BTN_LY_W(x) ((x)/SIX_BTN_LAYOUT_WIDTH) +#define REL_BTN_LY_H(y) ((y)/SIX_BTN_LAYOUT_HEIGHT) + +/* Relative X & Y positions of buttons w.r.t. Three-Button layout of ENDCALL*/ +#define REL_THREE_BTN_LY_W(x) ((x)/THREE_BTN_LAYOUT_WIDTH) +#define REL_THREE_BTN_LY_H(y) ((y)/THREE_BTN_LAYOUT_HEIGHT) + +/* Relative X position of elements w.r.t. Keypad-Button layout */ +#define REL_KEYPAD_BTN_W(x) ((x)/KEYPAD_EACH_BTN_WIDTH) + +/*Relative Y postions of elements w.r.t. Caller info layout*/ +#define REL_CALLER_INFO_H(y) ((y)/CALLER_INFO_HEIGHT) + +/*Relative Y postions of elements w.r.t. Multi list layout*/ +#define REL_MULTI_LIST_H(y) ((y)/MULTI_LIST_HEIGHT) + +/*Relative X and Y positions of elements w.r.t. SNS-Alerts layout*/ +#define REL_ALERTS_LY_W(x) ((x)/SNS_ALERTS_LAYOUT_WIDTH) +#define REL_ALERTS_LY_H(y) ((y)/SNS_ALERTS_LAYOUT_HEIGHT) +#define REL_ALERTS_EXP_LY_H(y) ((y)/SNS_ALERTS_LAYOUT_EXPANDED_HEIGHT) +/* + * End of Relative positions + */ + + +/* + * MO/Dialing view & MT/Incoming view + * In Portrait mode + */ + +#define DIALLING_CID_L REL_W(CALLER_ID_L_PAD) +#define DIALLING_CID_R REL_W(CALLER_ID_L_PAD+CALLER_ID_WIDTH) +#define DIALLING_CID_T REL_H(CALLER_ID_T_PAD) +#define DIALLING_CID_B REL_H(CALLER_ID_T_PAD+CALLER_ID_HEIGHT) + +#define DIALLING_CID_NOIMAGE_L REL_W(NOIMAGE_L_PAD) +#define DIALLING_CID_NOIMAGE_R REL_W(NOIMAGE_L_PAD+NOIMAGE_WIDTH) +#define DIALLING_CID_NOIMAGE_T REL_H(NOIMAGE_T_PAD) +#define DIALLING_CID_NOIMAGE_B REL_H(NOIMAGE_T_PAD+NOIMAGE_HEIGHT) + +#define DIALLING_BACKGROUND_CID_L REL_W(BACKGROUND_CID_L_PAD) +#define DIALLING_BACKGROUND_CID_R REL_W(BACKGROUND_CID_L_PAD+BACKGROUND_CID_WIDTH) +#define DIALLING_BACKGROUND_CID_T REL_H(BACKGROUND_CID_T_PAD) +#define DIALLING_BACKGROUND_CID_B REL_H(BACKGROUND_CID_T_PAD+BACKGROUND_CID_HEIGHT) + +#define MT_CALLING_BG_L REL_W(0) +#define MT_CALLING_BG_R REL_W(0+MT_CALLING_NAME_BG_WIDTH) +#define MT_CALLING_BG_T REL_H(0) +#define MT_CALLING_BG_B REL_H(0+MT_CALLING_NAME_BG_HEIGHT) + +/* accept - MT view */ +#define DIALLING_MT_BTN1_L REL_W(ACCEPT_BTN_L_PAD) +#define DIALLING_MT_BTN1_R REL_W(ACCEPT_BTN_L_PAD+ACCEPT_BTN_WIDTH) +#define DIALLING_MT_BTN1_T REL_H(ACCEPT_BTN_T_PAD) +#define DIALLING_MT_BTN1_B REL_H(ACCEPT_BTN_T_PAD+ACCEPT_BTN_HEIGHT) + +/* reject - MT view */ +#define DIALLING_MT_BTN2_L REL_W(REJECT_BTN_L_PAD) +#define DIALLING_MT_BTN2_R REL_W(REJECT_BTN_L_PAD+REJECT_BTN_WIDTH) +#define DIALLING_MT_BTN2_T REL_H(REJECT_BTN_T_PAD) +#define DIALLING_MT_BTN2_B REL_H(REJECT_BTN_T_PAD+REJECT_BTN_HEIGHT) + +/* reject with msg - MT view */ +#define DIALLING_MT_BTN3_L REL_W(REJECT_W_MSG_BTN_L_PAD) +#define DIALLING_MT_BTN3_R REL_W(REJECT_W_MSG_BTN_L_PAD+REJECT_W_MSG_BTN_WIDTH) +#define DIALLING_MT_BTN3_T REL_H(REJECT_W_MSG_BTN_T_PAD) +#define DIALLING_MT_BTN3_B REL_H(REJECT_W_MSG_BTN_T_PAD+REJECT_W_MSG_BTN_HEIGHT) + +#define DIALLING_MT_SNS_ALERTS_LAYOUT_L REL_W(SNS_ALERTS_LAYOUT_L_PAD) +#define DIALLING_MT_SNS_ALERTS_LAYOUT_R REL_W(SNS_ALERTS_LAYOUT_L_PAD+SNS_ALERTS_LAYOUT_WIDTH) +#define DIALLING_MT_SNS_ALERTS_LAYOUT_T REL_H(SNS_ALERTS_LAYOUT_T_PAD) +#define DIALLING_MT_SNS_ALERTS_LAYOUT_B REL_H(SNS_ALERTS_LAYOUT_T_PAD+SNS_ALERTS_LAYOUT_HEIGHT) + +#define DIALLING_MT_SNS_ALERTS_LAYOUT_EXPANDED_T REL_H(SNS_ALERTS_LAYOUT_EXPANDED_T_PAD) +#define DIALLING_MT_SNS_ALERTS_LAYOUT_EXPANDED_B REL_H(SNS_ALERTS_LAYOUT_EXPANDED_T_PAD+SNS_ALERTS_LAYOUT_EXPANDED_HEIGHT) + +#define DIALLING_MT_SNS_ALERTS_LAYOUT_SHIFT_T REL_H(SNS_ALERTS_LAYOUT_SHIFT_T_PAD) +#define DIALLING_MT_SNS_ALERTS_LAYOUT_SHIFT_B REL_H(SNS_ALERTS_LAYOUT_SHIFT_T_PAD+SNS_ALERTS_LAYOUT_HEIGHT) + +#define DIALLING_MT_SNS_ALERTS_LAYOUT_SHIFT_EXPANDED_T REL_H(SNS_ALERTS_LAYOUT_SHIFT_EXPANDED_T_PAD) +#define DIALLING_MT_SNS_ALERTS_LAYOUT_SHIFT_EXPANDED_B REL_H(SNS_ALERTS_LAYOUT_SHIFT_EXPANDED_T_PAD+SNS_ALERTS_LAYOUT_EXPANDED_HEIGHT) +/* +#define DIALLING_MT_BDAY_ICON_L REL_W(BIRTHDAY_ICON_L_PAD) +#define DIALLING_MT_BDAY_ICON_R REL_W(BIRTHDAY_ICON_L_PAD+BIRTHDAY_ICON_WIDTH) +#define DIALLING_MT_BDAY_ICON_T REL_H(BIRTHDAY_ICON_T_PAD) +#define DIALLING_MT_BDAY_ICON_B REL_H(BIRTHDAY_ICON_T_PAD+BIRTHDAY_ICON_HEIGHT) + +#define DIALLING_MT_BDAY_ICON_SHIFT_L REL_W(BIRTHDAY_ICON_SHIFT_L_PAD) +#define DIALLING_MT_BDAY_ICON_SHIFT_R REL_W(BIRTHDAY_ICON_SHIFT_L_PAD+BIRTHDAY_ICON_SHIFT_WIDTH) +#define DIALLING_MT_BDAY_ICON_SHIFT_T REL_H(BIRTHDAY_ICON_SHIFT_T_PAD) +#define DIALLING_MT_BDAY_ICON_SHIFT_B REL_H(BIRTHDAY_ICON_SHIFT_T_PAD+BIRTHDAY_ICON_SHIFT_HEIGHT) + +#define DIALLING_MT_BDAY_TEXT_L REL_W(BIRTHDAY_TEXT_L_PAD) +#define DIALLING_MT_BDAY_TEXT_R REL_W(BIRTHDAY_TEXT_L_PAD+BIRTHDAY_TEXT_WIDTH) +#define DIALLING_MT_BDAY_TEXT_T REL_H(BIRTHDAY_TEXT_T_PAD) +#define DIALLING_MT_BDAY_TEXT_B REL_H(BIRTHDAY_TEXT_T_PAD+BIRTHDAY_TEXT_HEIGHT) + +#define DIALLING_MT_BDAY_TEXT_SHIFT_L REL_W(BIRTHDAY_TEXT_SHIFT_L_PAD) +#define DIALLING_MT_BDAY_TEXT_SHIFT_R REL_W(BIRTHDAY_TEXT_SHIFT_L_PAD+BIRTHDAY_TEXT_SHIFT_WIDTH) +#define DIALLING_MT_BDAY_TEXT_SHIFT_T REL_H(BIRTHDAY_TEXT_SHIFT_T_PAD) +#define DIALLING_MT_BDAY_TEXT_SHIFT_B REL_H(BIRTHDAY_TEXT_SHIFT_T_PAD+BIRTHDAY_TEXT_SHIFT_HEIGHT) +*/ +/* + * End of MO/Dialing view & MT/Incoming view + */ + +/* + * Endcall view + * In Portrait mode + */ +#define ENDCALL_DIALLING_CID_L REL_W(ENDCALL_CALLER_ID_L_PAD) +#define ENDCALL_DIALLING_CID_R REL_W(ENDCALL_CALLER_ID_L_PAD+ENDCALL_CALLER_ID_WIDTH) +#define ENDCALL_DIALLING_CID_T REL_H(ENDCALL_CALLER_ID_T_PAD) +#define ENDCALL_DIALLING_CID_B REL_H(ENDCALL_CALLER_ID_T_PAD+ENDCALL_CALLER_ID_HEIGHT) + +#define ENDCALL_DIALLING_BTN_BG_L REL_W(ENDCALL_BTN_BG_L_PAD) +#define ENDCALL_DIALLING_BTN_BG_R REL_W(ENDCALL_BTN_BG_L_PAD+ENDCALL_BTN_BG_WIDTH) +#define ENDCALL_DIALLING_BTN_BG_T REL_H(ENDCALL_BTN_BG_T_PAD) +#define ENDCALL_DIALLING_BTN_BG_B REL_H(ENDCALL_BTN_BG_T_PAD+ENDCALL_BTN_BG_HEIGHT) + +/* + * End of Endcall view + */ + +/* + * MT LOCK View - check + * In Portrait mode + */ +#define INCOMING_LOCK_ACCEPT_BG_L REL_W(-273) +#define INCOMING_LOCK_ACCEPT_BG_R REL_W(210) +#define INCOMING_LOCK_ACCEPT_BG_T REL_H(945) +#define INCOMING_LOCK_ACCEPT_BG_B REL_H(1144) + +#define INCOMING_LOCK_ACCEPT_ICON_L REL_LOCK_W(303) +#define INCOMING_LOCK_ACCEPT_ICON_R REL_LOCK_W(408) +#define INCOMING_LOCK_ACCEPT_ICON_T REL_LOCK_H(37) +#define INCOMING_LOCK_ACCEPT_ICON_B REL_LOCK_H(149) + +#define INCOMING_LOCK_ACCEPT_TEXT_L REL_LOCK_W(45) +#define INCOMING_LOCK_ACCEPT_TEXT_R REL_LOCK_W(273) +#define INCOMING_LOCK_ACCEPT_TEXT_T INCOMING_LOCK_ACCEPT_ICON_T +#define INCOMING_LOCK_ACCEPT_TEXT_B INCOMING_LOCK_ACCEPT_ICON_B + +#define INCOMING_LOCK_REJECT_BG_L REL_W(510) +#define INCOMING_LOCK_REJECT_BG_R REL_W(993) +#define INCOMING_LOCK_REJECT_BG_T INCOMING_LOCK_ACCEPT_BG_T +#define INCOMING_LOCK_REJECT_BG_B INCOMING_LOCK_ACCEPT_BG_B + +#define INCOMING_LOCK_REJECT_ICON_L REL_LOCK_W(75) +#define INCOMING_LOCK_REJECT_ICON_R REL_LOCK_W(180) +#define INCOMING_LOCK_REJECT_ICON_T INCOMING_LOCK_ACCEPT_ICON_T +#define INCOMING_LOCK_REJECT_ICON_B INCOMING_LOCK_ACCEPT_ICON_B + +#define INCOMING_LOCK_REJECT_TEXT_L REL_LOCK_W(195) +#define INCOMING_LOCK_REJECT_TEXT_R REL_LOCK_W(423) +#define INCOMING_LOCK_REJECT_TEXT_T INCOMING_LOCK_REJECT_ICON_T +#define INCOMING_LOCK_REJECT_TEXT_B INCOMING_LOCK_REJECT_ICON_B + +#define INCOMING_LOCK_REJECT_WITH_MSG_BG_L REL_W(186) +#define INCOMING_LOCK_REJECT_WITH_MSG_BG_R REL_W(534) +#define INCOMING_LOCK_REJECT_WITH_MSG_BG_T REL_H(1208) +#define INCOMING_LOCK_REJECT_WITH_MSG_BG_B REL_H(1408) + +#define INCOMING_LOCK_REJECT_WITH_MSG_TEXT_L REL_LOCK_MSG_W(0) +#define INCOMING_LOCK_REJECT_WITH_MSG_TEXT_R REL_LOCK_MSG_W(348) +#define INCOMING_LOCK_REJECT_WITH_MSG_TEXT_T REL_LOCK_MSG_H(0) +#define INCOMING_LOCK_REJECT_WITH_MSG_TEXT_B REL_LOCK_MSG_H(72) + +#define MTLOCK_ACCEPT_INNER_CIRCLE_L REL_W(MTLOCK_ACCEPT_INNER_CIRCLE_BG_L_PAD) +#define MTLOCK_ACCEPT_INNER_CIRCLE_R REL_W(MTLOCK_ACCEPT_INNER_CIRCLE_BG_L_PAD+MTLOCK_ACCEPT_INNER_CIRCLE_BG_WIDTH) +#define MTLOCK_ACCEPT_INNER_CIRCLE_T REL_H(MTLOCK_ACCEPT_INNER_CIRCLE_BG_T_PAD) +#define MTLOCK_ACCEPT_INNER_CIRCLE_B REL_H(MTLOCK_ACCEPT_INNER_CIRCLE_BG_T_PAD+MTLOCK_ACCEPT_INNER_CIRCLE_BG_HEIGHT) + +#define MTLOCK_ACCEPT_ICON_L REL_W(MTLOCK_ACCEPT_ICON_L_PAD) +#define MTLOCK_ACCEPT_ICON_R REL_W(MTLOCK_ACCEPT_ICON_L_PAD+MTLOCK_ACCEPT_ICON_WIDTH) +#define MTLOCK_ACCEPT_ICON_T REL_H(MTLOCK_ACCEPT_ICON_T_PAD) +#define MTLOCK_ACCEPT_ICON_B REL_H(MTLOCK_ACCEPT_ICON_T_PAD+MTLOCK_ACCEPT_ICON_HEIGHT) + +#define MTLOCK_ACCEPT_OUTER_CIRCLE_L REL_W(MTLOCK_ACCEPT_OUTER_CIRCLE_BG_L_PAD) +#define MTLOCK_ACCEPT_OUTER_CIRCLE_R REL_W(MTLOCK_ACCEPT_OUTER_CIRCLE_BG_L_PAD+MTLOCK_ACCEPT_OUTER_CIRCLE_BG_WIDTH) +#define MTLOCK_ACCEPT_OUTER_CIRCLE_T REL_H(MTLOCK_ACCEPT_OUTER_CIRCLE_BG_T_PAD) +#define MTLOCK_ACCEPT_OUTER_CIRCLE_B REL_H(MTLOCK_ACCEPT_OUTER_CIRCLE_BG_T_PAD+MTLOCK_ACCEPT_OUTER_CIRCLE_BG_HEIGHT) + +#define MTLOCK_ACCEPT_ARROW1_L REL_W(MTLOCK_ACCEPT_ARROW1_L_PAD) +#define MTLOCK_ACCEPT_ARROW1_R REL_W(MTLOCK_ACCEPT_ARROW1_L_PAD+MTLOCK_ACCEPT_ARROW1_WIDTH) +#define MTLOCK_ACCEPT_ARROW1_T REL_H(MTLOCK_ACCEPT_ARROW1_T_PAD) +#define MTLOCK_ACCEPT_ARROW1_B REL_H(MTLOCK_ACCEPT_ARROW1_T_PAD+MTLOCK_ACCEPT_ARROW1_HEIGHT) + +#define MTLOCK_ACCEPT_ARROW2_L REL_W(MTLOCK_ACCEPT_ARROW2_L_PAD) +#define MTLOCK_ACCEPT_ARROW2_R REL_W(MTLOCK_ACCEPT_ARROW2_L_PAD+MTLOCK_ACCEPT_ARROW2_WIDTH) +#define MTLOCK_ACCEPT_ARROW2_T REL_H(MTLOCK_ACCEPT_ARROW2_T_PAD) +#define MTLOCK_ACCEPT_ARROW2_B REL_H(MTLOCK_ACCEPT_ARROW2_T_PAD+MTLOCK_ACCEPT_ARROW2_HEIGHT) + +#define MTLOCK_ACCEPT_ARROW3_L REL_W(MTLOCK_ACCEPT_ARROW3_L_PAD) +#define MTLOCK_ACCEPT_ARROW3_R REL_W(MTLOCK_ACCEPT_ARROW3_L_PAD+MTLOCK_ACCEPT_ARROW3_WIDTH) +#define MTLOCK_ACCEPT_ARROW3_T REL_H(MTLOCK_ACCEPT_ARROW3_T_PAD) +#define MTLOCK_ACCEPT_ARROW3_B REL_H(MTLOCK_ACCEPT_ARROW3_T_PAD+MTLOCK_ACCEPT_ARROW3_HEIGHT) + +#define MTLOCK_REJECT_INNER_CIRCLE_L REL_W(MTLOCK_REJECT_INNER_CIRCLE_BG_L_PAD) +#define MTLOCK_REJECT_INNER_CIRCLE_R REL_W(MTLOCK_REJECT_INNER_CIRCLE_BG_L_PAD+MTLOCK_REJECT_INNER_CIRCLE_BG_WIDTH) +#define MTLOCK_REJECT_INNER_CIRCLE_T REL_H(MTLOCK_REJECT_INNER_CIRCLE_BG_T_PAD) +#define MTLOCK_REJECT_INNER_CIRCLE_B REL_H(MTLOCK_REJECT_INNER_CIRCLE_BG_T_PAD+MTLOCK_REJECT_INNER_CIRCLE_BG_HEIGHT) + +#define MTLOCK_REJECT_ICON_L REL_W(MTLOCK_REJECT_ICON_L_PAD) +#define MTLOCK_REJECT_ICON_R REL_W(MTLOCK_REJECT_ICON_L_PAD+MTLOCK_REJECT_ICON_WIDTH) +#define MTLOCK_REJECT_ICON_T REL_H(MTLOCK_REJECT_ICON_T_PAD) +#define MTLOCK_REJECT_ICON_B REL_H(MTLOCK_REJECT_ICON_T_PAD+MTLOCK_REJECT_ICON_HEIGHT) + +#define MTLOCK_REJECT_OUTER_CIRCLE_L REL_W(MTLOCK_REJECT_OUTER_CIRCLE_BG_L_PAD) +#define MTLOCK_REJECT_OUTER_CIRCLE_R REL_W(MTLOCK_REJECT_OUTER_CIRCLE_BG_L_PAD+MTLOCK_REJECT_OUTER_CIRCLE_BG_WIDTH) +#define MTLOCK_REJECT_OUTER_CIRCLE_T REL_H(MTLOCK_REJECT_OUTER_CIRCLE_BG_T_PAD) +#define MTLOCK_REJECT_OUTER_CIRCLE_B REL_H(MTLOCK_REJECT_OUTER_CIRCLE_BG_T_PAD+MTLOCK_REJECT_OUTER_CIRCLE_BG_HEIGHT) + +#define MTLOCK_REJECT_ARROW1_L REL_W(MTLOCK_REJECT_ARROW1_L_PAD) +#define MTLOCK_REJECT_ARROW1_R REL_W(MTLOCK_REJECT_ARROW1_L_PAD+MTLOCK_REJECT_ARROW1_WIDTH) +#define MTLOCK_REJECT_ARROW1_T REL_H(MTLOCK_REJECT_ARROW1_T_PAD) +#define MTLOCK_REJECT_ARROW1_B REL_H(MTLOCK_REJECT_ARROW1_T_PAD+MTLOCK_REJECT_ARROW1_HEIGHT) + +#define MTLOCK_REJECT_ARROW2_L REL_W(MTLOCK_REJECT_ARROW2_L_PAD) +#define MTLOCK_REJECT_ARROW2_R REL_W(MTLOCK_REJECT_ARROW2_L_PAD+MTLOCK_REJECT_ARROW2_WIDTH) +#define MTLOCK_REJECT_ARROW2_T REL_H(MTLOCK_REJECT_ARROW2_T_PAD) +#define MTLOCK_REJECT_ARROW2_B REL_H(MTLOCK_REJECT_ARROW2_T_PAD+MTLOCK_REJECT_ARROW2_HEIGHT) + +#define MTLOCK_REJECT_ARROW3_L REL_W(MTLOCK_REJECT_ARROW3_L_PAD) +#define MTLOCK_REJECT_ARROW3_R REL_W(MTLOCK_REJECT_ARROW3_L_PAD+MTLOCK_REJECT_ARROW3_WIDTH) +#define MTLOCK_REJECT_ARROW3_T REL_H(MTLOCK_REJECT_ARROW3_T_PAD) +#define MTLOCK_REJECT_ARROW3_B REL_H(MTLOCK_REJECT_ARROW3_T_PAD+MTLOCK_REJECT_ARROW3_HEIGHT) + +#define MTLOCK_REJECT_MSG_BG_L REL_W(MTLOCK_REJECT_MSG_BG_L_PAD) +#define MTLOCK_REJECT_MSG_BG_R REL_W(MTLOCK_REJECT_MSG_BG_L_PAD+MTLOCK_REJECT_MSG_BG_WIDTH) +#define MTLOCK_REJECT_MSG_BG_T REL_H(MTLOCK_REJECT_MSG_BG_T_PAD) +#define MTLOCK_REJECT_MSG_BG_B REL_H(MTLOCK_REJECT_MSG_BG_T_PAD+MTLOCK_REJECT_MSG_BG_HEIGHT) + +#define MTLOCK_REJECT_MSG_ARW_L REL_W(MTLOCK_REJECT_MSG_ARW_L_PAD) +#define MTLOCK_REJECT_MSG_ARW_R REL_W(MTLOCK_REJECT_MSG_ARW_L_PAD+MTLOCK_REJECT_MSG_ARW_WIDTH) +#define MTLOCK_REJECT_MSG_ARW_T REL_H(MTLOCK_REJECT_MSG_ARW_T_PAD) +#define MTLOCK_REJECT_MSG_ARW_B REL_H(MTLOCK_REJECT_MSG_ARW_T_PAD+MTLOCK_REJECT_MSG_ARW_HEIGHT) + +#define MTLOCK_REJECT_MSG_TEXT_L REL_W(MTLOCK_REJECT_MSG_TEXT_L_PAD) +#define MTLOCK_REJECT_MSG_TEXT_R REL_W(MTLOCK_REJECT_MSG_TEXT_L_PAD+MTLOCK_REJECT_MSG_TEXT_WIDTH) +#define MTLOCK_REJECT_MSG_TEXT_T REL_H(MTLOCK_REJECT_MSG_TEXT_T_PAD) +#define MTLOCK_REJECT_MSG_TEXT_B REL_H(MTLOCK_REJECT_MSG_TEXT_T_PAD+MTLOCK_REJECT_MSG_TEXT_HEIGHT) + +#define MTLOCK_REJECT_MSG_LIST_L REL_W(MTLOCK_REJECT_MSG_LIST_L_PAD) +#define MTLOCK_REJECT_MSG_LIST_R REL_W(MTLOCK_REJECT_MSG_LIST_L_PAD+MTLOCK_REJECT_MSG_LIST_WIDTH) +#define MTLOCK_REJECT_MSG_LIST_T REL_H(MTLOCK_REJECT_MSG_LIST_T_PAD) +#define MTLOCK_REJECT_MSG_ONE_LINE_LIST_B REL_H(MTLOCK_REJECT_MSG_LIST_T_PAD+MTLOCK_REJECT_MSG_ONE_LINE_LIST_HEIGHT) +#define MTLOCK_REJECT_MSG_TWO_LINE_LIST_B REL_H(MTLOCK_REJECT_MSG_LIST_T_PAD+MTLOCK_REJECT_MSG_TWO_LINE_LIST_HEIGHT) +#define MTLOCK_REJECT_MSG_THREE_LINE_LIST_B REL_H(MTLOCK_REJECT_MSG_LIST_T_PAD+MTLOCK_REJECT_MSG_THREE_LINE_LIST_HEIGHT) +#define MTLOCK_REJECT_MSG_FOUR_LINE_LIST_B REL_H(MTLOCK_REJECT_MSG_LIST_T_PAD+MTLOCK_REJECT_MSG_FOUR_LINE_LIST_HEIGHT) +#define MTLOCK_REJECT_MSG_FIVE_LINE_LIST_B REL_H(MTLOCK_REJECT_MSG_LIST_T_PAD+MTLOCK_REJECT_MSG_FIVE_LINE_LIST_HEIGHT) +#define MTLOCK_REJECT_MSG_SIX_LINE_LIST_B REL_H(MTLOCK_REJECT_MSG_LIST_T_PAD+MTLOCK_REJECT_MSG_SIX_LINE_LIST_HEIGHT) +/* + * End of MT LOCK View + */ + + +/* + * KEYPAD View + * In Portrait mode + */ +#define KEYPAD_AREA_L REL_W(KEYPAD_AREA_L_PAD) +#define KEYPAD_AREA_R REL_W(KEYPAD_AREA_WIDTH) +#define KEYPAD_AREA_T REL_H(KEYPAD_AREA_T_PAD) +#define KEYPAD_AREA_B REL_H(KEYPAD_AREA_T_PAD+KEYPAD_AREA_HEIGHT) + +#define KEYPAD_ENTRY_TEXT_L REL_KEYPAD_W(KEYPAD_ENTRY_TXT_L_PAD) +#define KEYPAD_ENTRY_TEXT_R REL_KEYPAD_W(KEYPAD_ENTRY_TXT_L_PAD+KEYPAD_ENTRY_TXT_WIDTH) +#define KEYPAD_ENTRY_TEXT_T REL_KEYPAD_H(KEYPAD_ENTRY_TXT_T_PAD) +#define KEYPAD_ENTRY_TEXT_B REL_KEYPAD_H(KEYPAD_ENTRY_TXT_T_PAD+KEYPAD_ENTRY_TXT_HEIGHT) + +#define KEYPAD_BTNS_BG_L REL_KEYPAD_W(KEYPAD_BTNS_BG_L_PAD) +#define KEYPAD_BTNS_BG_R REL_KEYPAD_W(KEYPAD_BTNS_BG_L_PAD+KEYPAD_BTNS_BG_WIDTH) +#define KEYPAD_BTNS_BG_T REL_KEYPAD_H(KEYPAD_BTNS_BG_T_PAD) +#define KEYPAD_BTNS_BG_B REL_KEYPAD_H(KEYPAD_BTNS_BG_T_PAD+KEYPAD_BTNS_BG_HEIGHT) + +#define KEYPAD_BTN_LEFT_TXT_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD) +#define KEYPAD_BTN_LEFT_TXT_R REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH) +#define KEYPAD_BTN_RIGHT_TXT_TYPE1_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_TXT_TYPE1_L_PAD) +#define KEYPAD_BTN_RIGHT_TXT_TYPE2_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_TXT_TYPE2_L_PAD) +#define KEYPAD_BTN_RIGHT_ICON_L REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_ICON_L_PAD) +#define KEYPAD_BTN_RIGHT_ICON_R REL_KEYPAD_BTN_W(LEFT_TXT_L_PAD+LEFT_TXT_WIDTH+RIGHT_ICON_L_PAD+RIGHT_ICON_WIDTH) + +#define KEYPAD_ROW1_LVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD) +#define KEYPAD_ROW1_LVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW1_LVERT_SEP1_T REL_KEYPAD_BTNS_H(KP_ROW1_VERT_SEP_T_PAD) +#define KEYPAD_ROW1_LVERT_SEP1_B REL_KEYPAD_BTNS_H(KP_ROW1_VERT_SEP_T_PAD+KEYPAD_VERT_SEP_HEIGHT) + +#define KEYPAD_ROW1_LVERT_SEP2_L KEYPAD_ROW1_LVERT_SEP1_R +#define KEYPAD_ROW1_LVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW1_LVERT_SEP2_T KEYPAD_ROW1_LVERT_SEP1_T +#define KEYPAD_ROW1_LVERT_SEP2_B KEYPAD_ROW1_LVERT_SEP1_B + +#define KEYPAD_ROW1_RVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD) +#define KEYPAD_ROW1_RVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW1_RVERT_SEP1_T KEYPAD_ROW1_LVERT_SEP1_T +#define KEYPAD_ROW1_RVERT_SEP1_B KEYPAD_ROW1_LVERT_SEP1_B + +#define KEYPAD_ROW1_RVERT_SEP2_L KEYPAD_ROW1_RVERT_SEP1_R +#define KEYPAD_ROW1_RVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW1_RVERT_SEP2_T KEYPAD_ROW1_LVERT_SEP1_T +#define KEYPAD_ROW1_RVERT_SEP2_B KEYPAD_ROW1_LVERT_SEP1_B + +#define KEYPAD_ROW2_LVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD) +#define KEYPAD_ROW2_LVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW2_LVERT_SEP1_T REL_KEYPAD_BTNS_H(KP_ROW2_VERT_SEP_T_PAD) +#define KEYPAD_ROW2_LVERT_SEP1_B REL_KEYPAD_BTNS_H(KP_ROW2_VERT_SEP_T_PAD+KEYPAD_VERT_SEP_HEIGHT) + +#define KEYPAD_ROW2_LVERT_SEP2_L KEYPAD_ROW2_LVERT_SEP1_R +#define KEYPAD_ROW2_LVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW2_LVERT_SEP2_T KEYPAD_ROW2_LVERT_SEP1_T +#define KEYPAD_ROW2_LVERT_SEP2_B KEYPAD_ROW2_LVERT_SEP1_B + +#define KEYPAD_ROW2_RVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD) +#define KEYPAD_ROW2_RVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW2_RVERT_SEP1_T KEYPAD_ROW2_LVERT_SEP1_T +#define KEYPAD_ROW2_RVERT_SEP1_B KEYPAD_ROW2_LVERT_SEP1_B + +#define KEYPAD_ROW2_RVERT_SEP2_L KEYPAD_ROW2_RVERT_SEP1_R +#define KEYPAD_ROW2_RVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW2_RVERT_SEP2_T KEYPAD_ROW2_LVERT_SEP1_T +#define KEYPAD_ROW2_RVERT_SEP2_B KEYPAD_ROW2_LVERT_SEP1_B + +#define KEYPAD_ROW3_LVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD) +#define KEYPAD_ROW3_LVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW3_LVERT_SEP1_T REL_KEYPAD_BTNS_H(KP_ROW3_VERT_SEP_T_PAD) +#define KEYPAD_ROW3_LVERT_SEP1_B REL_KEYPAD_BTNS_H(KP_ROW3_VERT_SEP_T_PAD+KEYPAD_VERT_SEP_HEIGHT) + +#define KEYPAD_ROW3_LVERT_SEP2_L KEYPAD_ROW3_LVERT_SEP1_R +#define KEYPAD_ROW3_LVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW3_LVERT_SEP2_T KEYPAD_ROW3_LVERT_SEP1_T +#define KEYPAD_ROW3_LVERT_SEP2_B KEYPAD_ROW3_LVERT_SEP1_B + +#define KEYPAD_ROW3_RVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD) +#define KEYPAD_ROW3_RVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW3_RVERT_SEP1_T KEYPAD_ROW3_LVERT_SEP1_T +#define KEYPAD_ROW3_RVERT_SEP1_B KEYPAD_ROW3_LVERT_SEP1_B + +#define KEYPAD_ROW3_RVERT_SEP2_L KEYPAD_ROW3_RVERT_SEP1_R +#define KEYPAD_ROW3_RVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW3_RVERT_SEP2_T KEYPAD_ROW3_LVERT_SEP1_T +#define KEYPAD_ROW3_RVERT_SEP2_B KEYPAD_ROW3_LVERT_SEP1_B + +#define KEYPAD_ROW4_LVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD) +#define KEYPAD_ROW4_LVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW4_LVERT_SEP1_T REL_KEYPAD_BTNS_H(KP_ROW4_VERT_SEP_T_PAD) +#define KEYPAD_ROW4_LVERT_SEP1_B REL_KEYPAD_BTNS_H(KP_ROW4_VERT_SEP_T_PAD+KEYPAD_VERT_SEP_HEIGHT) + +#define KEYPAD_ROW4_LVERT_SEP2_L KEYPAD_ROW4_LVERT_SEP1_R +#define KEYPAD_ROW4_LVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_LVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW4_LVERT_SEP2_T KEYPAD_ROW4_LVERT_SEP1_T +#define KEYPAD_ROW4_LVERT_SEP2_B KEYPAD_ROW4_LVERT_SEP1_B + +#define KEYPAD_ROW4_RVERT_SEP1_L REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD) +#define KEYPAD_ROW4_RVERT_SEP1_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW4_RVERT_SEP1_T KEYPAD_ROW4_LVERT_SEP1_T +#define KEYPAD_ROW4_RVERT_SEP1_B KEYPAD_ROW4_LVERT_SEP1_B + +#define KEYPAD_ROW4_RVERT_SEP2_L KEYPAD_ROW4_RVERT_SEP1_R +#define KEYPAD_ROW4_RVERT_SEP2_R REL_KEYPAD_BTNS_W(KP_RVERT_SEP1_L_PAD+2*KEYPAD_VERT_SEP_WIDTH) +#define KEYPAD_ROW4_RVERT_SEP2_T KEYPAD_ROW4_LVERT_SEP1_T +#define KEYPAD_ROW4_RVERT_SEP2_B KEYPAD_ROW4_LVERT_SEP1_B + +#define KEYPAD_ROW1_HORIZ_SEP1_L REL_KEYPAD_BTNS_W(KP_HORIZ_SEP_L_PAD) +#define KEYPAD_ROW1_HORIZ_SEP1_R REL_KEYPAD_BTNS_W(KP_HORIZ_SEP_L_PAD+KEYPAD_HORIZ_SEP_WIDTH) +#define KEYPAD_ROW1_HORIZ_SEP1_T REL_KEYPAD_BTNS_H(KP_ROW1_HORIZ_SEP_T_PAD) +#define KEYPAD_ROW1_HORIZ_SEP1_B REL_KEYPAD_BTNS_H(KP_ROW1_HORIZ_SEP_T_PAD+KEYPAD_HORIZ_SEP_HEIGHT) + +#define KEYPAD_ROW1_HORIZ_SEP2_L KEYPAD_ROW1_HORIZ_SEP1_L +#define KEYPAD_ROW1_HORIZ_SEP2_R KEYPAD_ROW1_HORIZ_SEP1_R +#define KEYPAD_ROW1_HORIZ_SEP2_T KEYPAD_ROW1_HORIZ_SEP1_B +#define KEYPAD_ROW1_HORIZ_SEP2_B REL_KEYPAD_BTNS_H(KP_ROW1_HORIZ_SEP_T_PAD+2*KEYPAD_HORIZ_SEP_HEIGHT) + +#define KEYPAD_ROW2_HORIZ_SEP1_L KEYPAD_ROW1_HORIZ_SEP1_L +#define KEYPAD_ROW2_HORIZ_SEP1_R KEYPAD_ROW1_HORIZ_SEP1_R +#define KEYPAD_ROW2_HORIZ_SEP1_T REL_KEYPAD_BTNS_H(KP_ROW2_HORIZ_SEP_T_PAD) +#define KEYPAD_ROW2_HORIZ_SEP1_B REL_KEYPAD_BTNS_H(KP_ROW2_HORIZ_SEP_T_PAD+KEYPAD_HORIZ_SEP_HEIGHT) + +#define KEYPAD_ROW2_HORIZ_SEP2_L KEYPAD_ROW1_HORIZ_SEP1_L +#define KEYPAD_ROW2_HORIZ_SEP2_R KEYPAD_ROW1_HORIZ_SEP1_R +#define KEYPAD_ROW2_HORIZ_SEP2_T KEYPAD_ROW2_HORIZ_SEP1_B +#define KEYPAD_ROW2_HORIZ_SEP2_B REL_KEYPAD_BTNS_H(KP_ROW2_HORIZ_SEP_T_PAD+2*KEYPAD_HORIZ_SEP_HEIGHT) + +#define KEYPAD_ROW3_HORIZ_SEP1_L KEYPAD_ROW1_HORIZ_SEP1_L +#define KEYPAD_ROW3_HORIZ_SEP1_R KEYPAD_ROW1_HORIZ_SEP1_R +#define KEYPAD_ROW3_HORIZ_SEP1_T REL_KEYPAD_BTNS_H(KP_ROW3_HORIZ_SEP_T_PAD) +#define KEYPAD_ROW3_HORIZ_SEP1_B REL_KEYPAD_BTNS_H(KP_ROW3_HORIZ_SEP_T_PAD+KEYPAD_HORIZ_SEP_HEIGHT) + +#define KEYPAD_ROW3_HORIZ_SEP2_L KEYPAD_ROW1_HORIZ_SEP1_L +#define KEYPAD_ROW3_HORIZ_SEP2_R KEYPAD_ROW1_HORIZ_SEP1_R +#define KEYPAD_ROW3_HORIZ_SEP2_T KEYPAD_ROW3_HORIZ_SEP1_B +#define KEYPAD_ROW3_HORIZ_SEP2_B REL_KEYPAD_BTNS_H(KP_ROW3_HORIZ_SEP_T_PAD+2*KEYPAD_HORIZ_SEP_HEIGHT) +/* + * End of KEYPAD View + */ + + +/* + * INCALL View + * In Portrait mode + */ +#define INCALL_CID_L DIALLING_CID_L +#define INCALL_CID_R DIALLING_CID_R +#define INCALL_CID_T DIALLING_CID_T +#define INCALL_CID_B DIALLING_CID_B + +/* +#define INCALL_CID_DIM_T DIALLING_CID_T +#define INCALL_CID_DIM_B DIALLING_CID_B +#define INCALL_CID_DIM_L REL_W(145) +#define INCALL_CID_DIM_R REL_W(334) +*/ + +#define INCALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L +#define INCALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R +#define INCALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T +#define INCALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B + +#define INCALL_EXTRA_VOL_ICON_L REL_W(INCALL_EXTRA_VOL_BTN_L_PAD) +#define INCALL_EXTRA_VOL_ICON_R REL_W(INCALL_EXTRA_VOL_BTN_L_PAD+INCALL_EXTRA_VOL_BTN_WIDTH) +#define INCALL_EXTRA_VOL_ICON_T REL_H(INCALL_EXTRA_VOL_BTN_T_PAD) +#define INCALL_EXTRA_VOL_ICON_B REL_H(INCALL_EXTRA_VOL_BTN_T_PAD+INCALL_EXTRA_VOL_BTN_HEIGHT) + +#define INCALL_HOLD_L REL_W(INCALL_HOLD_BTN_L_PAD) +#define INCALL_HOLD_R REL_W(INCALL_HOLD_BTN_L_PAD+INCALL_HOLD_BTN_WIDTH) +#define INCALL_HOLD_T REL_H(INCALL_HOLD_BTN_T_PAD) +#define INCALL_HOLD_B REL_H(INCALL_HOLD_BTN_T_PAD+INCALL_HOLD_BTN_HEIGHT) + +#define INCALL_HOLD_TXT_L REL_W(INCALL_HOLD_TXT_L_PAD) +#define INCALL_HOLD_TXT_R REL_W(INCALL_HOLD_TXT_L_PAD+INCALL_HOLD_TXT_WIDTH) +#define INCALL_HOLD_TXT_T REL_H(INCALL_HOLD_TXT_T_PAD) +#define INCALL_HOLD_TXT_B REL_H(INCALL_HOLD_TXT_T_PAD+INCALL_HOLD_TXT_HEIGHT) + +#define INCALL_NOISE_ICON_L REL_W(INCALL_NOISE_ICN_L_PAD) +#define INCALL_NOISE_ICON_R REL_W(INCALL_NOISE_ICN_L_PAD+INCALL_NOISE_ICN_WIDTH) +#define INCALL_NOISE_ICON_T REL_H(INCALL_NOISE_ICN_T_PAD) +#define INCALL_NOISE_ICON_B REL_H(INCALL_NOISE_ICN_T_PAD+INCALL_NOISE_ICN_HEIGHT) + +#define INCALL_SOUND_EQ_ICON_L REL_W(INCALL_SOUND_EQ_ICN_L_PAD) +#define INCALL_SOUND_EQ_ICON_R REL_W(INCALL_SOUND_EQ_ICN_L_PAD+INCALL_SOUND_EQ_ICN_WIDTH) +#define INCALL_SOUND_EQ_ICON_T REL_H(INCALL_SOUND_EQ_ICN_T_PAD) +#define INCALL_SOUND_EQ_ICON_B REL_H(INCALL_SOUND_EQ_ICN_T_PAD+INCALL_SOUND_EQ_ICN_HEIGHT) + +/* +#define INCALL_RECORDER_T REL_H(389) +#define INCALL_RECORDER_B REL_H(443) +#define INCALL_RECORDER_L REL_W(381) +#define INCALL_RECORDER_R REL_W(454) + +#define INCALL_RECORDING_T REL_H(359) +#define INCALL_RECORDING_B REL_H(383) +#define INCALL_RECORDING_L REL_W(381) +#define INCALL_RECORDING_R REL_W(454) +*/ + +#define INCALL_BACKGROUND_SHARE_L REL_W(0) +#define INCALL_BACKGROUND_SHARE_R REL_W(MAIN_SCREEN_W) +#define INCALL_BACKGROUND_SHARE_T REL_H(INCALL_SHARE_BG_T_PAD) +#define INCALL_BACKGROUND_SHARE_B REL_H(INCALL_SHARE_BG_T_PAD+INCALL_SHARE_BG_HEIGHT) +/* + * End of INCALL View + */ + + +/* + * MULTI-CALL SPLIT View + * In Portrait mode + */ +/* L[ACT] + R[HLD] */ +#define MULTICALL_SPLIT_BACKGROUND_CID_L INCALL_BACKGROUND_CID_L +#define MULTICALL_SPLIT_BACKGROUND_CID_R INCALL_BACKGROUND_CID_R +#define MULTICALL_SPLIT_BACKGROUND_CID_T INCALL_BACKGROUND_CID_T +#define MULTICALL_SPLIT_BACKGROUND_CID_B INCALL_BACKGROUND_CID_B + +#define MULTICALL_SPLIT_CID_1_L REL_W(SPLIT_CID1_L_PAD) +#define MULTICALL_SPLIT_CID_1_R REL_W(SPLIT_CID1_L_PAD+SPLIT_CID1_WIDTH) +#define MULTICALL_SPLIT_CID_1_T REL_H(SPLIT_CID1_T_PAD) +#define MULTICALL_SPLIT_CID_1_B REL_H(SPLIT_CID1_T_PAD+SPLIT_CID1_HEIGHT) + +#define MULTICALL_SPLIT_CID_2_L REL_W(SPLIT_CID2_L_PAD) +#define MULTICALL_SPLIT_CID_2_R REL_W(SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH) +#define MULTICALL_SPLIT_CID_2_T REL_H(SPLIT_CID2_T_PAD) +#define MULTICALL_SPLIT_CID_2_B REL_H(SPLIT_CID2_T_PAD+SPLIT_CID2_HEIGHT) + +#define MULTICALL_SPLIT_ON_HOLD_TXT_L MULTICALL_SPLIT_CID_2_L +#define MULTICALL_SPLIT_ON_HOLD_TXT_R MULTICALL_SPLIT_CID_2_R +#define MULTICALL_SPLIT_ON_HOLD_TXT_T REL_H(SPLIT_ONHOLD_TXT_T_PAD) +#define MULTICALL_SPLIT_ON_HOLD_TXT_B REL_H(SPLIT_ONHOLD_TXT_T_PAD+SPLIT_ONHOLD_TXT_HEIGHT) + +#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_L MULTICALL_SPLIT_CID_2_L +#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_R REL_W(SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) +#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_T MULTICALL_SPLIT_ON_HOLD_TXT_T +#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_B MULTICALL_SPLIT_ON_HOLD_TXT_B + +/* + * End of MULTI-CALL SPLIT View + */ + +/* + * MULTI-CALL LIST View + * In Portrait mode + */ +#define MULTICALL_LIST_L REL_W(0) +#define MULTICALL_LIST_R REL_W(MAIN_SCREEN_W) +#define MULTICALL_LIST_T REL_MULTI_LIST_H(CONF_LIST_T_PAD) +#define MULTICALL_LIST_B REL_MULTI_LIST_H(CONF_LIST_T_PAD+CONF_LIST_HEIGHT) + +#define MULTICALL_LIST_HOLD_L REL_W(CONF_HOLD_L_PAD) +#define MULTICALL_LIST_HOLD_R REL_W(CONF_HOLD_L_PAD+CONF_HOLD_WIDTH) +#define MULTICALL_LIST_HOLD_T REL_MULTI_LIST_H(CONF_HOLD_T_PAD) +#define MULTICALL_LIST_HOLD_B REL_MULTI_LIST_H(CONF_HOLD_T_PAD+CONF_HOLD_HEIGHT) + +#define MULTICALL_LIST_TIMER_L REL_W(0) +#define MULTICALL_LIST_TIMER_R REL_W(MAIN_SCREEN_W) +#define MULTICALL_LIST_TIMER_T REL_MULTI_LIST_H(CONF_TIMER_T_PAD) +#define MULTICALL_LIST_TIMER_B REL_MULTI_LIST_H(CONF_TIMER_T_PAD+CONF_TIMER_HEIGHT) + +#define MULTICALL_LIST_BIG_END_L REL_W(CONF_CALL_BIG_END_L_PAD) +#define MULTICALL_LIST_BIG_END_R REL_W(CONF_CALL_BIG_END_L_PAD+CONF_CALL_BIG_END_WIDTH) +#define MULTICALL_LIST_BIG_END_T REL_MULTI_LIST_H(CONF_CALL_BIG_END_T_PAD) +#define MULTICALL_LIST_BIG_END_B REL_MULTI_LIST_H(CONF_CALL_BIG_END_T_PAD+CALL_BIG_END_HEIGHT) +/* + * End of MULTI-CALL LIST View + */ + + +/* + * Reject with MSG View + * In Portrait mode + */ +#define REJECT_W_MSG_CREATE_NEW_L REL_W(REJ_MSG_NEW_BTN_L_PAD) +#define REJECT_W_MSG_CREATE_NEW_R REL_W(REJ_MSG_NEW_BTN_L_PAD+REJ_MSG_NEW_BTN_WIDTH) +#define REJECT_W_MSG_CREATE_NEW_T REL_H(REJ_MSG_NEW_BTN_T_PAD) +#define REJECT_W_MSG_CREATE_NEW_B REL_H(REJ_MSG_NEW_BTN_T_PAD+REJ_MSG_NEW_BTN_HEIGHT) +/* +#define REJECT_W_MSG_LIST_T REL_H(135) +#define REJECT_W_MSG_LIST_B REL_H(MAIN_SCREEN_H) +#define REJECT_W_MSG_LIST_L REL_W(0) +#define REJECT_W_MSG_LIST_R REL_W(MAIN_SCREEN_W) +*/ +#define REJECT_W_MSG_LIST_L REL_NAVIFRAME_W(0) +#define REJECT_W_MSG_LIST_R REL_NAVIFRAME_W(MAIN_SCREEN_W) +#define REJECT_W_MSG_LIST_T REL_NAVIFRAME_H(REJ_MSG_LIST_T_PAD) +#define REJECT_W_MSG_LIST_B REL_NAVIFRAME_H(REJ_MSG_LIST_T_PAD+REJ_MSG_LIST_HEIGHT) +/* + * End of Reject with MSG View + */ + + +/* + * SIX BUTTON Layout + * In Portrait mode + */ + +#define TOP_LEFT_BUTTON_L REL_BTN_LY_W(BTN_LAYOUT_LEFT_BTN_L_PAD) +#define TOP_LEFT_BUTTON_R REL_BTN_LY_W(BTN_LAYOUT_LEFT_BTN_L_PAD+BTN_LAYOUT_SINGLE_BTN_WIDTH) +#define TOP_LEFT_BUTTON_T REL_BTN_LY_H(BTN_LAYOUT_TOP_BTN_T_PAD) +#define TOP_LEFT_BUTTON_B REL_BTN_LY_H(BTN_LAYOUT_TOP_BTN_T_PAD+BTN_LAYOUT_SINGLE_BTN_HEIGHT) + +#define TOP_MIDDLE_BUTTON_L REL_BTN_LY_W(BTN_LAYOUT_MIDDLE_BTN_L_PAD) +#define TOP_MIDDLE_BUTTON_R REL_BTN_LY_W(BTN_LAYOUT_MIDDLE_BTN_L_PAD+BTN_LAYOUT_SINGLE_BTN_WIDTH) +#define TOP_MIDDLE_BUTTON_T TOP_LEFT_BUTTON_T +#define TOP_MIDDLE_BUTTON_B TOP_LEFT_BUTTON_B + +#define TOP_RIGHT_BUTTON_L REL_BTN_LY_W(BTN_LAYOUT_RIGHT_BTN_L_PAD) +#define TOP_RIGHT_BUTTON_R REL_BTN_LY_W(BTN_LAYOUT_RIGHT_BTN_L_PAD+BTN_LAYOUT_SINGLE_BTN_WIDTH) +#define TOP_RIGHT_BUTTON_T TOP_LEFT_BUTTON_T +#define TOP_RIGHT_BUTTON_B TOP_LEFT_BUTTON_B + +#define BOTTOM_LEFT_BUTTON_L TOP_LEFT_BUTTON_L +#define BOTTOM_LEFT_BUTTON_R TOP_LEFT_BUTTON_R +#define BOTTOM_LEFT_BUTTON_T REL_BTN_LY_H(BTN_LAYOUT_BOTTOM_BTN_T_PAD) +#define BOTTOM_LEFT_BUTTON_B REL_BTN_LY_H(BTN_LAYOUT_BOTTOM_BTN_T_PAD+BTN_LAYOUT_SINGLE_BTN_HEIGHT) + +#define BOTTOM_MIDDLE_BUTTON_L TOP_MIDDLE_BUTTON_L +#define BOTTOM_MIDDLE_BUTTON_R TOP_MIDDLE_BUTTON_R +#define BOTTOM_MIDDLE_BUTTON_T BOTTOM_LEFT_BUTTON_T +#define BOTTOM_MIDDLE_BUTTON_B BOTTOM_LEFT_BUTTON_B + +#define BOTTOM_RIGHT_BUTTON_L TOP_RIGHT_BUTTON_L +#define BOTTOM_RIGHT_BUTTON_R TOP_RIGHT_BUTTON_R +#define BOTTOM_RIGHT_BUTTON_T BOTTOM_LEFT_BUTTON_T +#define BOTTOM_RIGHT_BUTTON_B BOTTOM_LEFT_BUTTON_B + +#define TOPLINE_LEFT_VERT_SEP_1_L REL_BTN_LY_W(LEFT_VERT_SEP_L_PAD) +#define TOPLINE_LEFT_VERT_SEP_1_R REL_BTN_LY_W(LEFT_VERT_SEP_L_PAD+SEPARTOR_WIDTH) +#define TOPLINE_LEFT_VERT_SEP_1_T REL_BTN_LY_H(TOP_VERT_SEP_T_PAD) +#define TOPLINE_LEFT_VERT_SEP_1_B REL_BTN_LY_H(TOP_VERT_SEP_T_PAD+VERT_SEP_HEIGHT) + +#define TOPLINE_LEFT_VERT_SEP_2_L TOPLINE_LEFT_VERT_SEP_1_R +#define TOPLINE_LEFT_VERT_SEP_2_R REL_BTN_LY_W(LEFT_VERT_SEP_L_PAD+2*SEPARTOR_WIDTH) +#define TOPLINE_LEFT_VERT_SEP_2_T TOPLINE_LEFT_VERT_SEP_1_T +#define TOPLINE_LEFT_VERT_SEP_2_B TOPLINE_LEFT_VERT_SEP_1_B + +#define TOPLINE_RIGHT_VERT_SEP_1_L REL_BTN_LY_W(RIGHT_VERT_SEP_L_PAD) +#define TOPLINE_RIGHT_VERT_SEP_1_R REL_BTN_LY_W(RIGHT_VERT_SEP_L_PAD+SEPARTOR_WIDTH) +#define TOPLINE_RIGHT_VERT_SEP_1_T TOPLINE_LEFT_VERT_SEP_1_T +#define TOPLINE_RIGHT_VERT_SEP_1_B TOPLINE_LEFT_VERT_SEP_1_B + +#define TOPLINE_RIGHT_VERT_SEP_2_L TOPLINE_RIGHT_VERT_SEP_1_R +#define TOPLINE_RIGHT_VERT_SEP_2_R REL_BTN_LY_W(RIGHT_VERT_SEP_L_PAD+2*SEPARTOR_WIDTH) +#define TOPLINE_RIGHT_VERT_SEP_2_T TOPLINE_RIGHT_VERT_SEP_1_T +#define TOPLINE_RIGHT_VERT_SEP_2_B TOPLINE_RIGHT_VERT_SEP_1_B + +#define BOTLINE_LEFT_VERT_SEP_1_L TOPLINE_LEFT_VERT_SEP_1_L +#define BOTLINE_LEFT_VERT_SEP_1_R TOPLINE_LEFT_VERT_SEP_1_R +#define BOTLINE_LEFT_VERT_SEP_1_T REL_BTN_LY_H(BOTTOM_VERT_SEP_T_PAD) +#define BOTLINE_LEFT_VERT_SEP_1_B REL_BTN_LY_H(BOTTOM_VERT_SEP_T_PAD+VERT_SEP_HEIGHT) + +#define BOTLINE_LEFT_VERT_SEP_2_L TOPLINE_LEFT_VERT_SEP_2_L +#define BOTLINE_LEFT_VERT_SEP_2_R TOPLINE_LEFT_VERT_SEP_2_R +#define BOTLINE_LEFT_VERT_SEP_2_T BOTLINE_LEFT_VERT_SEP_1_T +#define BOTLINE_LEFT_VERT_SEP_2_B BOTLINE_LEFT_VERT_SEP_1_B + +#define BOTLINE_RIGHT_VERT_SEP_1_L TOPLINE_RIGHT_VERT_SEP_1_L +#define BOTLINE_RIGHT_VERT_SEP_1_R TOPLINE_RIGHT_VERT_SEP_1_R +#define BOTLINE_RIGHT_VERT_SEP_1_T BOTLINE_LEFT_VERT_SEP_1_T +#define BOTLINE_RIGHT_VERT_SEP_1_B BOTLINE_LEFT_VERT_SEP_1_B + +#define BOTLINE_RIGHT_VERT_SEP_2_L BOTLINE_RIGHT_VERT_SEP_1_R +#define BOTLINE_RIGHT_VERT_SEP_2_R TOPLINE_RIGHT_VERT_SEP_2_R +#define BOTLINE_RIGHT_VERT_SEP_2_T BOTLINE_LEFT_VERT_SEP_1_T +#define BOTLINE_RIGHT_VERT_SEP_2_B BOTLINE_LEFT_VERT_SEP_1_T + +#define TOPLINE_HORIZ_SEP_1_L REL_BTN_LY_W(HORIZ_SEP_L_PAD) +#define TOPLINE_HORIZ_SEP_1_R REL_BTN_LY_W(HORIZ_SEP_L_PAD+HORIZ_SEP_WIDTH) +#define TOPLINE_HORIZ_SEP_1_T REL_BTN_LY_H(TOP_HORIZ_SEP_T_PAD) +#define TOPLINE_HORIZ_SEP_1_B REL_BTN_LY_H(TOP_HORIZ_SEP_T_PAD+SEPARTOR_WIDTH) + +#define TOPLINE_HORIZ_SEP_2_L TOPLINE_HORIZ_SEP_1_L +#define TOPLINE_HORIZ_SEP_2_R TOPLINE_HORIZ_SEP_1_R +#define TOPLINE_HORIZ_SEP_2_T TOPLINE_HORIZ_SEP_1_B +#define TOPLINE_HORIZ_SEP_2_B REL_BTN_LY_H(TOP_HORIZ_SEP_T_PAD+2*SEPARTOR_WIDTH) + +#define BOTLINE_HORIZ_SEP_1_L TOPLINE_HORIZ_SEP_1_L +#define BOTLINE_HORIZ_SEP_1_R TOPLINE_HORIZ_SEP_1_R +#define BOTLINE_HORIZ_SEP_1_T REL_BTN_LY_H(BOTTOM_HORIZ_SEP_T_PAD) +#define BOTLINE_HORIZ_SEP_1_B REL_BTN_LY_H(BOTTOM_HORIZ_SEP_T_PAD+SEPARTOR_WIDTH) + +#define BOTLINE_HORIZ_SEP_2_L TOPLINE_HORIZ_SEP_1_L +#define BOTLINE_HORIZ_SEP_2_R TOPLINE_HORIZ_SEP_1_R +#define BOTLINE_HORIZ_SEP_2_T BOTLINE_HORIZ_SEP_1_B +#define BOTLINE_HORIZ_SEP_2_B REL_BTN_LY_H(BOTTOM_HORIZ_SEP_T_PAD+2*SEPARTOR_WIDTH) +/* + * End of SIX Button Layout + */ + +/* + * THREE BUTTON Layout for ENDCALL + * In Portrait mode + */ +#define ENDCALL_LEFT_VERT_SEP_1_L REL_THREE_BTN_LY_W(ENDCALL_LEFT_VERT_SEP_L_PAD) +#define ENDCALL_LEFT_VERT_SEP_1_R REL_THREE_BTN_LY_W(ENDCALL_LEFT_VERT_SEP_L_PAD+ENDCALL_SEPARTOR_WIDTH) +#define ENDCALL_LEFT_VERT_SEP_1_T REL_THREE_BTN_LY_H(ENDCALL_VERT_SEP_T_PAD) +#define ENDCALL_LEFT_VERT_SEP_1_B REL_THREE_BTN_LY_H(ENDCALL_VERT_SEP_T_PAD+ENDCALL_VERT_SEP_HEIGHT) + +#define ENDCALL_LEFT_VERT_SEP_2_L ENDCALL_LEFT_VERT_SEP_1_R +#define ENDCALL_LEFT_VERT_SEP_2_R REL_THREE_BTN_LY_W(ENDCALL_LEFT_VERT_SEP_L_PAD+2*ENDCALL_SEPARTOR_WIDTH) +#define ENDCALL_LEFT_VERT_SEP_2_T ENDCALL_LEFT_VERT_SEP_1_T +#define ENDCALL_LEFT_VERT_SEP_2_B ENDCALL_LEFT_VERT_SEP_1_B + +#define ENDCALL_RIGHT_VERT_SEP_1_L REL_THREE_BTN_LY_W(ENDCALL_RIGHT_VERT_SEP_L_PAD) +#define ENDCALL_RIGHT_VERT_SEP_1_R REL_THREE_BTN_LY_W(ENDCALL_RIGHT_VERT_SEP_L_PAD+ENDCALL_SEPARTOR_WIDTH) +#define ENDCALL_RIGHT_VERT_SEP_1_T ENDCALL_LEFT_VERT_SEP_1_T +#define ENDCALL_RIGHT_VERT_SEP_1_B ENDCALL_LEFT_VERT_SEP_1_B + +#define ENDCALL_RIGHT_VERT_SEP_2_L ENDCALL_RIGHT_VERT_SEP_1_R +#define ENDCALL_RIGHT_VERT_SEP_2_R REL_THREE_BTN_LY_W(ENDCALL_RIGHT_VERT_SEP_L_PAD+2*ENDCALL_SEPARTOR_WIDTH) +#define ENDCALL_RIGHT_VERT_SEP_2_T ENDCALL_LEFT_VERT_SEP_1_T +#define ENDCALL_RIGHT_VERT_SEP_2_B ENDCALL_LEFT_VERT_SEP_1_B +/* + * End of THREE Button Layout + */ + +/* + * General Button Layout + */ +#define SIX_BTN_LAYOUT_L REL_W(SIX_BTN_LAYOUT_L_PAD) +#define SIX_BTN_LAYOUT_R REL_W(SIX_BTN_LAYOUT_L_PAD+SIX_BTN_LAYOUT_WIDTH) +#define SIX_BTN_LAYOUT_T REL_H(SIX_BTN_LAYOUT_T_PAD) +#define SIX_BTN_LAYOUT_B REL_H(SIX_BTN_LAYOUT_T_PAD+SIX_BTN_LAYOUT_HEIGHT) + +#define SIX_BTN_BIG_END_L REL_W(CALL_BIG_END_L_PAD) +#define SIX_BTN_BIG_END_R REL_W(CALL_BIG_END_L_PAD+CALL_BIG_END_WIDTH) +#define SIX_BTN_BIG_END_T REL_H(CALL_BIG_END_T_PAD) +#define SIX_BTN_BIG_END_B REL_H(CALL_BIG_END_T_PAD+CALL_BIG_END_HEIGHT) + +#define SIX_BTN_INCOMING_1_L SIX_BTN_BIG_END_L +#define SIX_BTN_INCOMING_1_R SIX_BTN_BIG_END_R +#define SIX_BTN_INCOMING_1_T REL_H(INCMG_CALL_BTN1_T_PAD) +#define SIX_BTN_INCOMING_1_B REL_H(INCMG_CALL_BTN1_T_PAD+INCMG_CALL_BTN_HEIGHT) + +#define SIX_BTN_INCOMING_2_L SIX_BTN_BIG_END_L +#define SIX_BTN_INCOMING_2_R SIX_BTN_BIG_END_R +#define SIX_BTN_INCOMING_2_T REL_H(INCMG_CALL_BTN2_T_PAD) +#define SIX_BTN_INCOMING_2_B REL_H(INCMG_CALL_BTN2_T_PAD+INCMG_CALL_BTN_HEIGHT) + +#define SIX_BTN_INCOMING_3_L SIX_BTN_BIG_END_L +#define SIX_BTN_INCOMING_3_R SIX_BTN_BIG_END_R +#define SIX_BTN_INCOMING_3_T REL_H(INCMG_CALL_BTN3_T_PAD) +#define SIX_BTN_INCOMING_3_B REL_H(INCMG_CALL_BTN3_T_PAD+INCMG_CALL_BTN_HEIGHT) +/* + * End of SIX Button Layout + */ + + +/* + * Navigation bar layout + */ +#define CALL_NAVIGATION_BAR_T REL_H(NAVIFRAME_T_PAD) +#define CALL_NAVIGATION_BAR_B REL_H(MAIN_SCREEN_H) +#define CALL_NAVIGATION_BAR_L REL_W(0) +#define CALL_NAVIGATION_BAR_R REL_W(MAIN_SCREEN_W) +/* + * End of Navigation bar layout + */ + + +/* + * END CALL View + * In Portrait mode + */ +#define ENDSINGLECALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L +#define ENDSINGLECALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R +#define ENDSINGLECALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T +#define ENDSINGLECALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B + +#define ENDSINGLECALL_CID_L ENDCALL_DIALLING_CID_L +#define ENDSINGLECALL_CID_R ENDCALL_DIALLING_CID_R +#define ENDSINGLECALL_CID_T ENDCALL_DIALLING_CID_T +#define ENDSINGLECALL_CID_B ENDCALL_DIALLING_CID_B + +#define ENDSINGLECALL_BTN_BG_L ENDCALL_DIALLING_BTN_BG_L +#define ENDSINGLECALL_BTN_BG_R ENDCALL_DIALLING_BTN_BG_R +#define ENDSINGLECALL_BTN_BG_T ENDCALL_DIALLING_BTN_BG_T +#define ENDSINGLECALL_BTN_BG_B ENDCALL_DIALLING_BTN_BG_B + +#define ENDSINGLECALL_VOICE_BTN_L REL_W(ENDCALL_VOICE_BTN_L_PAD) +#define ENDSINGLECALL_VOICE_BTN_R REL_W(ENDCALL_VOICE_BTN_L_PAD+ENDCALL_VOICE_BTN_WIDTH) +#define ENDSINGLECALL_VOICE_BTN_T REL_H(ENDCALL_VOICE_BTN_T_PAD) +#define ENDSINGLECALL_VOICE_BTN_B REL_H(ENDCALL_VOICE_BTN_T_PAD+ENDCALL_VOICE_BTN_HEIGHT) + +#define ENDSINGLECALL_VIDEO_BTN_L REL_W(ENDCALL_VIDEO_BTN_L_PAD) +#define ENDSINGLECALL_VIDEO_BTN_R REL_W(ENDCALL_VIDEO_BTN_L_PAD+ENDCALL_VOICE_BTN_WIDTH) +#define ENDSINGLECALL_VIDEO_BTN_T ENDSINGLECALL_VOICE_BTN_T +#define ENDSINGLECALL_VIDEO_BTN_B ENDSINGLECALL_VOICE_BTN_B + +#define ENDSINGLECALL_MSG_BTN_L REL_W(ENDCALL_MSG_BTN_L_PAD) +#define ENDSINGLECALL_MSG_BTN_R REL_W(ENDCALL_MSG_BTN_L_PAD+ENDCALL_VOICE_BTN_WIDTH) +#define ENDSINGLECALL_MSG_BTN_T ENDSINGLECALL_VOICE_BTN_T +#define ENDSINGLECALL_MSG_BTN_B ENDSINGLECALL_VOICE_BTN_B + +#define ENDSINGLECALL_CONTACT_BTN_L REL_W(ENDCALL_CONTACT_BTN_L_PAD) +#define ENDSINGLECALL_CONTACT_BTN_R REL_W(ENDCALL_CONTACT_BTN_L_PAD+ENDCALL_CONTACT_BTN_WIDTH) +#define ENDSINGLECALL_CONTACT_BTN_T REL_H(ENDCALL_CONTACT_BTN_T_PAD) +#define ENDSINGLECALL_CONTACT_BTN_B REL_H(ENDCALL_CONTACT_BTN_T_PAD+ENDCALL_CONTACT_BTN_HEIGHT) +/* + * End of END CALL View + */ + + +/* + * QUICK-PANEL layout + * In Portrait mode + */ +#define CALL_QUICKPANEL_CID_L REL_QP_W(QP_CID_L_PAD) +#define CALL_QUICKPANEL_CID_R REL_QP_W(QP_CID_L_PAD+QP_CID_WIDTH) +#define CALL_QUICKPANEL_CID_T REL_QP_H(QP_CID_T_PAD) +#define CALL_QUICKPANEL_CID_B REL_QP_H(QP_CID_T_PAD+QP_CID_HEIGHT) + +#define CALL_QUICKPANEL_BTN_MUTE_L REL_QP_W(QP_MUTE_BTN_L_PAD) +#define CALL_QUICKPANEL_BTN_MUTE_R REL_QP_W(QP_MUTE_BTN_L_PAD+QP_END_BTN_WIDTH) +#define CALL_QUICKPANEL_BTN_MUTE_T REL_QP_H(QP_MUTE_BTN_T_PAD) +#define CALL_QUICKPANEL_BTN_MUTE_B REL_QP_H(QP_MUTE_BTN_T_PAD+QP_END_BTN_HEIGHT) + +#define CALL_QUICKPANEL_BTN_END_L REL_QP_W(QP_END_BTN_L_PAD) +#define CALL_QUICKPANEL_BTN_END_R REL_QP_W(QP_END_BTN_L_PAD+QP_END_BTN_WIDTH) +#define CALL_QUICKPANEL_BTN_END_T REL_QP_H(QP_END_BTN_T_PAD) +#define CALL_QUICKPANEL_BTN_END_B REL_QP_H(QP_END_BTN_T_PAD+QP_END_BTN_HEIGHT) + +#define CALL_QUICKPANEL_NAME_L REL_QP_W(QP_NAME_L_PAD) +#define CALL_QUICKPANEL_NAME_R REL_QP_W(QP_NAME_L_PAD+QP_NAME_WIDTH) +#define CALL_QUICKPANEL_NAME_T REL_QP_H(QP_NAME_T_PAD) +#define CALL_QUICKPANEL_NAME_B REL_QP_H(QP_NAME_T_PAD+QP_NAME_HEIGHT) +/* + * End of QUICK-PANEL layout + */ + + +/* + * NBEAT-HD GUI Widget Dimensions + * In Landscape mode + */ +#define MAIN_SCREEN_LSCAPE_W 1280 +#define MAIN_SCREEN_LSCAPE_H 720 + +#define LSCAPE_TITLE_T_PAD 50 +#define LSCAPE_TITLE_HEIGHT 100 + +#define LSCAPE_BODY_BG_T_PAD (LSCAPE_TITLE_T_PAD+LSCAPE_TITLE_HEIGHT) + +#define LSCAPE_SCROLLER_WIDTH (266*5+30*2) /*CID(266) Gap(30)*/ +#define LSCAPE_SCROLLER_HEIGHT 388 + +/*CID Data*/ +#define LSCAPE_CID_WIDTH 266 +#define LSCAPE_CID_HEIGHT 348 + +#define FIRST_CID_OUTER_BG_POS1_L_PAD 30 +#define FIRST_CID_OUTER_BG_POS2_L_PAD 108 +#define FIRST_CID_OUTER_BG_POS3_L_PAD 241 +#define FIRST_CID_OUTER_BG_POS4_L_PAD 374 +#define CID_OUTER_BG_WIDTH LSCAPE_CID_WIDTH +#define CID_OUTER_BG_T_PAD 30 +#define CID_OUTER_BG_HEIGHT LSCAPE_CID_HEIGHT + +#define CID_INNER_BG_L_PAD 20 +#define CID_INNER_BG_WIDTH 226 +#define CID_INNER_BG_T_PAD 0 +#define CID_INNER_BG_HEIGHT (CID_OUTER_BG_HEIGHT-20) + +#define CID_END_L_PAD (CID_OUTER_BG_WIDTH-60) +#define CID_END_WIDTH 60 +#define CID_END_T_PAD (-20) +#define CID_END_HEIGHT 60 + +#define CID_NAME_T_PAD 18 +#define CID_NAME_HEIGHT 40 + +#define CID_IMG_L_PAD 42 +#define CID_IMG_WIDTH 182 +#define CID_IMG_T_PAD 66 +#define CID_IMG_HEIGHT 182 + +#define CID_SPLIT_L_PAD 32 +#define CID_SPLIT_WIDTH 202 +#define CID_SPLIT_T_PAD 256 +#define CID_SPLIT_HEIGHT 60 + +#define LSCAPE_HOLD_L_PAD 24 +#define LSCAPE_HOLD_WIDTH 60 +#define LSCAPE_HOLD_T_PAD (LSCAPE_TITLE_T_PAD+LSCAPE_TITLE_HEIGHT+LSCAPE_SCROLLER_HEIGHT) +#define LSCAPE_HOLD_HEIGHT 60 + +#define LSCAPE_TIMER_WIDTH 1232 + +#define LSCAPE_BIG_END_T_PAD (LSCAPE_HOLD_T_PAD+LSCAPE_HOLD_HEIGHT+26) +#define LSCAPE_BIG_END_HEIGHT 80 + +#define LSCAPE_SPLIT_CID1_L_PAD 307 +#define LSCAPE_SPLIT_CID1_WIDTH 304 +#define LSCAPE_SPLIT_CID1_T_PAD 182 +#define LSCAPE_SPLIT_CID1_HEIGHT 304 + +#define LSCAPE_SPLIT_PAUSE_L_PAD (LSCAPE_SPLIT_CID1_L_PAD+8) +#define LSCAPE_SPLIT_PAUSE_WIDTH 62 +#define LSCAPE_SPLIT_PAUSE_HEIGHT 62 +#define LSCAPE_SPLIT_PAUSE_T_PAD (LSCAPE_SPLIT_CID1_T_PAD+LSCAPE_SPLIT_CID1_HEIGHT-8-LSCAPE_SPLIT_PAUSE_HEIGHT) + +#define LSCAPE_SPLIT_CID2_L_PAD (LSCAPE_SPLIT_CID1_L_PAD+LSCAPE_SPLIT_CID1_WIDTH+142) +#define LSCAPE_SPLIT_CID2_WIDTH 208 +#define LSCAPE_SPLIT_CID2_T_PAD 230 +#define LSCAPE_SPLIT_CID2_HEIGHT 208 + +#define LSCAPE_SPLIT_PLAY_L_PAD (LSCAPE_SPLIT_CID2_L_PAD+12) +#define LSCAPE_SPLIT_PLAY_WIDTH 40 +#define LSCAPE_SPLIT_PLAY_HEIGHT 40 +#define LSCAPE_SPLIT_PLAY_T_PAD (LSCAPE_SPLIT_CID2_T_PAD+LSCAPE_SPLIT_CID2_HEIGHT-12-LSCAPE_SPLIT_PLAY_HEIGHT) + +#define LSCAPE_SPLIT_NAME1_L_PAD (LSCAPE_SPLIT_CID1_L_PAD-37) +#define LSCAPE_SPLIT_NAME1_WIDTH 390 +#define LSCAPE_SPLIT_NAME1_T_PAD 108 +#define LSCAPE_SPLIT_NAME1_HEIGHT 58 + +#define LSCAPE_SPLIT_NAME2_L_PAD (LSCAPE_SPLIT_CID2_L_PAD-21) +#define LSCAPE_SPLIT_NAME2_WIDTH 250 +#define LSCAPE_SPLIT_NAME2_T_PAD 180 +#define LSCAPE_SPLIT_NAME2_HEIGHT 40 + +#define LSCAPE_SPLIT_TIMER_T_PAD 512 +#define LSCAPE_SPLIT_TIMER_HEIGHT 46 + +#define LSCAPE_SPLIT_MORE_BTN_WIDTH 40 +#define LSCAPE_SPLIT_MORE_BTN_L_PAD (LSCAPE_SPLIT_CID2_L_PAD+LSCAPE_SPLIT_CID2_WIDTH-LSCAPE_SPLIT_MORE_BTN_WIDTH) +#define LSCAPE_SPLIT_ONHOLD_TXT_W_ICON_WIDTH (LSCAPE_SPLIT_CID2_WIDTH-LSCAPE_SPLIT_MORE_BTN_WIDTH) +#define LSCAPE_SPLIT_ONHOLD_TXT_T_PAD 456 +#define LSCAPE_SPLIT_ONHOLD_TXT_HEIGHT 40 + +#define LSCAPE_SPLIT_SWAP_CID1_L_PAD 307 +#define LSCAPE_SPLIT_SWAP_CID1_WIDTH 208 + +#define LSCAPE_SPLIT_SWAP_PLAY_L_PAD (LSCAPE_SPLIT_SWAP_CID1_L_PAD+12) +#define LSCAPE_SPLIT_SWAP_PLAY_WIDTH 40 + +#define LSCAPE_SPLIT_SWAP_CID2_L_PAD (LSCAPE_SPLIT_SWAP_CID1_L_PAD+LSCAPE_SPLIT_SWAP_CID1_WIDTH+142) +#define LSCAPE_SPLIT_SWAP_CID2_WIDTH 304 + +#define LSCAPE_SPLIT_SWAP_PAUSE_L_PAD (LSCAPE_SPLIT_SWAP_CID2_L_PAD+8) +#define LSCAPE_SPLIT_SWAP_PAUSE_WIDTH 62 + +#define LSCAPE_SPLIT_SWAP_NAME1_L_PAD (LSCAPE_SPLIT_CID1_L_PAD-21) +#define LSCAPE_SPLIT_SWAP_NAME1_WIDTH 250 + +#define LSCAPE_SPLIT_SWAP_NAME2_L_PAD (LSCAPE_SPLIT_SWAP_CID2_L_PAD-37) +#define LSCAPE_SPLIT_SWAP_NAME2_WIDTH 390 + +#define LSCAPE_SPLIT_SWAP_MORE_BTN_WIDTH 60 +#define LSCAPE_SPLIT_SWAP_MORE_BTN_L_PAD (LSCAPE_SPLIT_SWAP_CID2_L_PAD+LSCAPE_SPLIT_SWAP_CID2_WIDTH-LSCAPE_SPLIT_SWAP_MORE_BTN_WIDTH) +#define LSCAPE_SPLIT_SWAP_MORE_BTN_T_PAD (LSCAPE_SPLIT_TIMER_T_PAD-7) +#define LSCAPE_SPLIT_SWAP_MORE_BTN_HEIGHT 60 +#define LSCAPE_SPLIT_TIMER_TXT_W_ICON_WIDTH (LSCAPE_SPLIT_SWAP_CID2_WIDTH-LSCAPE_SPLIT_SWAP_MORE_BTN_WIDTH) + +#define LSCAPE_SPLIT_JOIN_BTN_L_PAD 40 +#define LSCAPE_SPLIT_JOIN_BTN_WIDTH 584 +#define LSCAPE_SPLIT_JOIN_BTN_T_PAD 614 +#define LSCAPE_SPLIT_JOIN_BTN_HEIGHT 80 + +#define LSCAPE_SPLIT_BIG_END_BTN_L_PAD (LSCAPE_SPLIT_JOIN_BTN_L_PAD+LSCAPE_SPLIT_JOIN_BTN_WIDTH+32) +#define LSCAPE_SPLIT_BIG_END_BTN_WIDTH LSCAPE_SPLIT_JOIN_BTN_WIDTH + +#define LSCAPE_QP_WIN_W MAIN_SCREEN_LSCAPE_W +#define LSCAPE_QP_WIN_H 170 + +#define LSCAPE_QP_CID_L_PAD 20 +#define LSCAPE_QP_CID_WIDTH 105 +#define LSCAPE_QP_CID_T_PAD 32 +#define LSCAPE_QP_CID_HEIGHT 105 + +#define LSCAPE_QP_MUTE_BTN_L_PAD 338 +#define LSCAPE_QP_MUTE_BTN_WIDTH 368 +#define LSCAPE_QP_MUTE_BTN_T_PAD 78 +#define LSCAPE_QP_MUTE_BTN_HEIGHT 74 + +#define LSCAPE_QP_END_BTN_L_PAD 726 +#define LSCAPE_QP_END_BTN_WIDTH 367 +#define LSCAPE_QP_END_BTN_T_PAD LSCAPE_QP_MUTE_BTN_T_PAD +#define LSCAPE_QP_END_BTN_HEIGHT LSCAPE_QP_MUTE_BTN_HEIGHT + +#define LSCAPE_QP_NAME_L_PAD LSCAPE_QP_MUTE_BTN_L_PAD +#define LSCAPE_QP_NAME_WIDTH 922 +#define LSCAPE_QP_NAME_T_PAD 22 +#define LSCAPE_QP_NAME_HEIGHT 36 + +/* + * End of NBEAT-HD GUI Widget Dimensions + */ + + +/* + * Relative positions + * In Landscape mode + */ +#define REL_LSCAPE_W(x) ((x)/MAIN_SCREEN_LSCAPE_W) +#define REL_LSCAPE_H(y) ((y)/MAIN_SCREEN_LSCAPE_H) + +#define REL_SCROLLER_W(x) ((x)/LSCAPE_SCROLLER_WIDTH) +#define REL_SCROLLER_H(y) ((y)/LSCAPE_SCROLLER_HEIGHT) + +#define REL_LSCAPE_CID_W(x) ((x)/LSCAPE_CID_WIDTH) +#define REL_LSCAPE_CID_H(y) ((y)/LSCAPE_CID_HEIGHT) + +/* Relative X & Y positions of widgets w.r.t. Quick-panel layout */ +#define REL_LSCAPE_QP_W(x) ((x)/LSCAPE_QP_WIN_W) +#define REL_LSCAPE_QP_H(y) ((y)/LSCAPE_QP_WIN_H) + +/* + * End of Relative positions + */ + + +/* + * MULTI-CALL CONF View + * In Landscape mode + */ +/* +#define INCALL_LANDSCAPE_BACKGROUND_CID_L REL_LSCAPE_W(0) +#define INCALL_LANDSCAPE_BACKGROUND_CID_R REL_LSCAPE_W(MAIN_SCREEN_H) +#define INCALL_LANDSCAPE_BACKGROUND_CID_T REL_LSCAPE_H(0) +#define INCALL_LANDSCAPE_BACKGROUND_CID_B REL_LSCAPE_H(MAIN_SCREEN_W) +*/ + +#define INCALL_LANDSCAPE_TITLE_BG_L REL_LSCAPE_W(0) +#define INCALL_LANDSCAPE_TITLE_BG_R REL_LSCAPE_W(MAIN_SCREEN_LSCAPE_W) +#define INCALL_LANDSCAPE_TITLE_BG_T REL_LSCAPE_H(LSCAPE_TITLE_T_PAD) +#define INCALL_LANDSCAPE_TITLE_BG_B REL_LSCAPE_H(LSCAPE_TITLE_T_PAD+LSCAPE_TITLE_HEIGHT) + +#define INCALL_LANDSCAPE_TITLE_TXT_L INCALL_LANDSCAPE_TITLE_BG_L +#define INCALL_LANDSCAPE_TITLE_TXT_R INCALL_LANDSCAPE_TITLE_BG_R +#define INCALL_LANDSCAPE_TITLE_TXT_T INCALL_LANDSCAPE_TITLE_BG_T +#define INCALL_LANDSCAPE_TITLE_TXT_B INCALL_LANDSCAPE_TITLE_BG_B + +/* +#define INCALL_LANDSCAPE_SEPARATOR_L REL_LSCAPE_W(0) +#define INCALL_LANDSCAPE_SEPARATOR_R REL_LSCAPE_W(MAIN_SCREEN_LSCAPE_W) +#define INCALL_LANDSCAPE_SEPARATOR_T REL_LSCAPE_H(50) +#define INCALL_LANDSCAPE_SEPARATOR_B REL_LSCAPE_H(55) +*/ + +#define INCALL_LANDSCAPE_BODY_BG_L REL_LSCAPE_W(0) +#define INCALL_LANDSCAPE_BODY_BG_R REL_LSCAPE_W(MAIN_SCREEN_LSCAPE_W) +#define INCALL_LANDSCAPE_BODY_BG_T REL_LSCAPE_H(LSCAPE_BODY_BG_T_PAD) +#define INCALL_LANDSCAPE_BODY_BG_B REL_LSCAPE_H(MAIN_SCREEN_LSCAPE_H) + +#define INCALL_LANDSCAPE_SCROLLER_L REL_LSCAPE_W(0) +#define INCALL_LANDSCAPE_SCROLLER_R REL_LSCAPE_W(MAIN_SCREEN_LSCAPE_W) +#define INCALL_LANDSCAPE_SCROLLER_T INCALL_LANDSCAPE_BODY_BG_T +#define INCALL_LANDSCAPE_SCROLLER_B REL_LSCAPE_H(LSCAPE_BODY_BG_T_PAD+LSCAPE_SCROLLER_HEIGHT) + +/* +#define INCALL_LANDSCAPE_CID_BG2_L REL_LSCAPE_W(0) +#define INCALL_LANDSCAPE_CID_BG2_R REL_LSCAPE_W(800) +#define INCALL_LANDSCAPE_CID_BG2_T REL_LSCAPE_H(0) +#define INCALL_LANDSCAPE_CID_BG2_B REL_LSCAPE_H(306) +*/ + +/*LSCAPE: CID-1 BG initial position*/ +/*5 in conference*/ +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS1_L REL_SCROLLER_W(FIRST_CID_OUTER_BG_POS1_L_PAD) +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS1_R REL_SCROLLER_W(FIRST_CID_OUTER_BG_POS1_L_PAD+CID_OUTER_BG_WIDTH) +/*4 in conference*/ +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS2_L REL_LSCAPE_W(FIRST_CID_OUTER_BG_POS2_L_PAD) +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS2_R REL_LSCAPE_W(FIRST_CID_OUTER_BG_POS2_L_PAD+CID_OUTER_BG_WIDTH) +/*3 in conference*/ +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS3_L REL_LSCAPE_W(FIRST_CID_OUTER_BG_POS3_L_PAD) +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS3_R REL_LSCAPE_W(FIRST_CID_OUTER_BG_POS3_L_PAD+CID_OUTER_BG_WIDTH) +/*2 in conference*/ +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS4_L REL_LSCAPE_W(FIRST_CID_OUTER_BG_POS4_L_PAD) +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_POS4_R REL_LSCAPE_W(FIRST_CID_OUTER_BG_POS4_L_PAD+CID_OUTER_BG_WIDTH) +/*LSCAPE: CID-1 BG initial position*/ +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_T REL_SCROLLER_H(CID_OUTER_BG_T_PAD) +#define INCALL_LANDSCAPE_FIRST_CID_OUTER_BG_B REL_SCROLLER_H(CID_OUTER_BG_HEIGHT) + +#define INCALL_LANDSCAPE_CID_INNER_BG_L REL_LSCAPE_CID_W(CID_INNER_BG_L_PAD) +#define INCALL_LANDSCAPE_CID_INNER_BG_R REL_LSCAPE_CID_W(CID_INNER_BG_L_PAD+CID_INNER_BG_WIDTH) +#define INCALL_LANDSCAPE_CID_INNER_BG_T REL_LSCAPE_CID_H(CID_INNER_BG_T_PAD) +#define INCALL_LANDSCAPE_CID_INNER_BG_B REL_LSCAPE_CID_H(CID_INNER_BG_T_PAD+CID_INNER_BG_HEIGHT) + +#define INCALL_LANDSCAPE_CID_END_L REL_LSCAPE_CID_W(CID_END_L_PAD) +#define INCALL_LANDSCAPE_CID_END_R REL_LSCAPE_CID_W(CID_END_L_PAD+CID_END_WIDTH) +#define INCALL_LANDSCAPE_CID_END_T REL_LSCAPE_CID_H(CID_END_T_PAD) +#define INCALL_LANDSCAPE_CID_END_B REL_LSCAPE_CID_H(CID_END_T_PAD+CID_END_HEIGHT) + +#define INCALL_LANDSCAPE_CID_NAME_L INCALL_LANDSCAPE_CID_INNER_BG_L +#define INCALL_LANDSCAPE_CID_NAME_R INCALL_LANDSCAPE_CID_INNER_BG_R +#define INCALL_LANDSCAPE_CID_NAME_T REL_LSCAPE_CID_H(CID_NAME_T_PAD) +#define INCALL_LANDSCAPE_CID_NAME_B REL_LSCAPE_CID_H(CID_NAME_T_PAD+CID_NAME_HEIGHT) + +#define INCALL_LANDSCAPE_CID_IMG_L REL_LSCAPE_CID_W(CID_IMG_L_PAD) +#define INCALL_LANDSCAPE_CID_IMG_R REL_LSCAPE_CID_W(CID_IMG_L_PAD+CID_IMG_WIDTH) +#define INCALL_LANDSCAPE_CID_IMG_T REL_LSCAPE_CID_H(CID_IMG_T_PAD) +#define INCALL_LANDSCAPE_CID_IMG_B REL_LSCAPE_CID_H(CID_IMG_T_PAD+CID_IMG_HEIGHT) + +#define INCALL_LANDSCAPE_BTN_CID_SPLIT_L REL_LSCAPE_CID_W(CID_SPLIT_L_PAD) +#define INCALL_LANDSCAPE_BTN_CID_SPLIT_R REL_LSCAPE_CID_W(CID_SPLIT_L_PAD+CID_SPLIT_WIDTH) +#define INCALL_LANDSCAPE_BTN_CID_SPLIT_T REL_LSCAPE_CID_H(CID_SPLIT_T_PAD) +#define INCALL_LANDSCAPE_BTN_CID_SPLIT_B REL_LSCAPE_CID_H(CID_SPLIT_T_PAD+CID_SPLIT_HEIGHT) +/*LSCAPE: CID-1 Data*/ + +/*LSCAPE: Other CID Data*/ +#define INCALL_LANDSCAPE_OTHER_CID_OUTER_BG_L REL_LSCAPE_CID_W(CID_OUTER_BG_WIDTH) +#define INCALL_LANDSCAPE_OTHER_CID_OUTER_BG_R REL_LSCAPE_CID_W(CID_OUTER_BG_WIDTH*2) +#define INCALL_LANDSCAPE_OTHER_CID_OUTER_BG_T REL_LSCAPE_CID_H(0) +#define INCALL_LANDSCAPE_OTHER_CID_OUTER_BG_B REL_LSCAPE_CID_H(CID_OUTER_BG_HEIGHT) +/*LSCAPE: Other CID Data*/ + +#define INCALL_LANDSCAPE_HOLD_L REL_LSCAPE_W(LSCAPE_HOLD_L_PAD) +#define INCALL_LANDSCAPE_HOLD_R REL_LSCAPE_W(LSCAPE_HOLD_L_PAD+LSCAPE_HOLD_WIDTH) +#define INCALL_LANDSCAPE_HOLD_T REL_LSCAPE_H(LSCAPE_HOLD_T_PAD) +#define INCALL_LANDSCAPE_HOLD_B REL_LSCAPE_H(LSCAPE_HOLD_T_PAD+LSCAPE_HOLD_HEIGHT) + +#define INCALL_LANDSCAPE_TIMER_L INCALL_LANDSCAPE_HOLD_L +#define INCALL_LANDSCAPE_TIMER_R REL_LSCAPE_W(LSCAPE_HOLD_L_PAD+LSCAPE_TIMER_WIDTH) +#define INCALL_LANDSCAPE_TIMER_T INCALL_LANDSCAPE_HOLD_T +#define INCALL_LANDSCAPE_TIMER_B INCALL_LANDSCAPE_HOLD_B + +#define INCALL_LANDSCAPE_BIG_END_L INCALL_LANDSCAPE_HOLD_L +#define INCALL_LANDSCAPE_BIG_END_R INCALL_LANDSCAPE_TIMER_R +#define INCALL_LANDSCAPE_BIG_END_T REL_LSCAPE_H(LSCAPE_BIG_END_T_PAD) +#define INCALL_LANDSCAPE_BIG_END_B REL_LSCAPE_H(LSCAPE_BIG_END_T_PAD+LSCAPE_BIG_END_HEIGHT) + +/* +#define INCALL_LANDSCAPE_BACKGROUND_SHARE_L REL_W(0) +#define INCALL_LANDSCAPE_BACKGROUND_SHARE_R REL_W(MAIN_SCREEN_W) +#define INCALL_LANDSCAPE_BACKGROUND_SHARE_T REL_H(365) +#define INCALL_LANDSCAPE_BACKGROUND_SHARE_B REL_H(774) +*/ +/* + * End of MULTI-CALL CONF View + */ + + +/* + * MULTI-CALL SPLIT View + * In Landscape mode + */ +/* L[ACT] + R[HLD] */ +#define MULTICALL_SPLIT_LANDSCAPE_BACKGROUND_CID_L REL_LSCAPE_W(0) +#define MULTICALL_SPLIT_LANDSCAPE_BACKGROUND_CID_R REL_LSCAPE_W(MAIN_SCREEN_LSCAPE_W) +#define MULTICALL_SPLIT_LANDSCAPE_BACKGROUND_CID_T REL_LSCAPE_H(0) +#define MULTICALL_SPLIT_LANDSCAPE_BACKGROUND_CID_B REL_LSCAPE_H(MAIN_SCREEN_LSCAPE_H) + +#define MULTICALL_SPLIT_LANDSCAPE_CID_1_L REL_LSCAPE_W(LSCAPE_SPLIT_CID1_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_CID_1_R REL_LSCAPE_W(LSCAPE_SPLIT_CID1_L_PAD+LSCAPE_SPLIT_CID1_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_CID_1_T REL_LSCAPE_H(LSCAPE_SPLIT_CID1_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_CID_1_B REL_LSCAPE_H(LSCAPE_SPLIT_CID1_T_PAD+LSCAPE_SPLIT_CID1_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_PAUSE_L REL_LSCAPE_W(LSCAPE_SPLIT_PAUSE_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_PAUSE_R REL_LSCAPE_W(LSCAPE_SPLIT_PAUSE_L_PAD+LSCAPE_SPLIT_PAUSE_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_PAUSE_T REL_LSCAPE_H(LSCAPE_SPLIT_PAUSE_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_PAUSE_B REL_LSCAPE_H(LSCAPE_SPLIT_PAUSE_T_PAD+LSCAPE_SPLIT_PAUSE_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_CID_2_L REL_LSCAPE_W(LSCAPE_SPLIT_CID2_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_CID_2_R REL_LSCAPE_W(LSCAPE_SPLIT_CID2_L_PAD+LSCAPE_SPLIT_CID2_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_CID_2_T REL_LSCAPE_H(LSCAPE_SPLIT_CID2_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_CID_2_B REL_LSCAPE_H(LSCAPE_SPLIT_CID2_T_PAD+LSCAPE_SPLIT_CID2_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_PLAY_L REL_LSCAPE_W(LSCAPE_SPLIT_PLAY_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_PLAY_R REL_LSCAPE_W(LSCAPE_SPLIT_PLAY_L_PAD+LSCAPE_SPLIT_PLAY_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_PLAY_T REL_LSCAPE_H(LSCAPE_SPLIT_PLAY_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_PLAY_B REL_LSCAPE_H(LSCAPE_SPLIT_PLAY_T_PAD+LSCAPE_SPLIT_PLAY_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_NAME_1_L REL_LSCAPE_W(LSCAPE_SPLIT_NAME1_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_NAME_1_R REL_LSCAPE_W(LSCAPE_SPLIT_NAME1_L_PAD+LSCAPE_SPLIT_NAME1_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_NAME_1_T REL_LSCAPE_H(LSCAPE_SPLIT_NAME1_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_NAME_1_B REL_LSCAPE_H(LSCAPE_SPLIT_NAME1_T_PAD+LSCAPE_SPLIT_NAME1_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_NAME_2_L REL_LSCAPE_W(LSCAPE_SPLIT_NAME2_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_NAME_2_R REL_LSCAPE_W(LSCAPE_SPLIT_NAME2_L_PAD+LSCAPE_SPLIT_NAME2_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_NAME_2_T REL_LSCAPE_H(LSCAPE_SPLIT_NAME2_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_NAME_2_B REL_LSCAPE_H(LSCAPE_SPLIT_NAME2_T_PAD+LSCAPE_SPLIT_NAME2_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_TIMER_L MULTICALL_SPLIT_LANDSCAPE_CID_1_L +#define MULTICALL_SPLIT_LANDSCAPE_TIMER_R MULTICALL_SPLIT_LANDSCAPE_CID_1_R +#define MULTICALL_SPLIT_LANDSCAPE_TIMER_T REL_LSCAPE_H(LSCAPE_SPLIT_TIMER_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_TIMER_B REL_LSCAPE_H(LSCAPE_SPLIT_TIMER_T_PAD+LSCAPE_SPLIT_TIMER_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_L MULTICALL_SPLIT_LANDSCAPE_CID_2_L +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_R MULTICALL_SPLIT_LANDSCAPE_CID_2_R +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_T REL_LSCAPE_H(LSCAPE_SPLIT_ONHOLD_TXT_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_B REL_LSCAPE_H(LSCAPE_SPLIT_ONHOLD_TXT_T_PAD+LSCAPE_SPLIT_ONHOLD_TXT_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_WITH_ICON_L MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_L +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_WITH_ICON_R REL_LSCAPE_W(LSCAPE_SPLIT_CID2_L_PAD+LSCAPE_SPLIT_ONHOLD_TXT_W_ICON_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_WITH_ICON_T MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_T +#define MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_WITH_ICON_B MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_B + +#define MULTICALL_SPLIT_LANDSCAPE_MORE_ICON_L REL_LSCAPE_W(LSCAPE_SPLIT_MORE_BTN_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_MORE_ICON_R MULTICALL_SPLIT_LANDSCAPE_CID_2_R +#define MULTICALL_SPLIT_LANDSCAPE_MORE_ICON_T MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_T +#define MULTICALL_SPLIT_LANDSCAPE_MORE_ICON_B MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_B +/* L[ACT] + R[HLD] */ + +/* L[HLD] + R[ACT] */ +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_1_L REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_CID1_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_1_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_CID1_L_PAD+LSCAPE_SPLIT_SWAP_CID1_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_1_T MULTICALL_SPLIT_LANDSCAPE_CID_2_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_1_B MULTICALL_SPLIT_LANDSCAPE_CID_2_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PLAY_L REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_PLAY_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PLAY_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_PLAY_L_PAD+LSCAPE_SPLIT_SWAP_PLAY_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PLAY_T MULTICALL_SPLIT_LANDSCAPE_PLAY_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PLAY_B MULTICALL_SPLIT_LANDSCAPE_PLAY_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_2_L REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_CID2_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_2_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_CID2_L_PAD+LSCAPE_SPLIT_SWAP_CID2_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_2_T MULTICALL_SPLIT_LANDSCAPE_CID_1_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_2_B MULTICALL_SPLIT_LANDSCAPE_CID_1_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PAUSE_L REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_PAUSE_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PAUSE_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_PAUSE_L_PAD+LSCAPE_SPLIT_SWAP_PAUSE_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PAUSE_T MULTICALL_SPLIT_LANDSCAPE_PAUSE_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_PAUSE_B MULTICALL_SPLIT_LANDSCAPE_PAUSE_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_1_L REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_NAME1_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_1_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_NAME1_L_PAD+LSCAPE_SPLIT_SWAP_NAME1_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_1_T MULTICALL_SPLIT_LANDSCAPE_NAME_2_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_1_B MULTICALL_SPLIT_LANDSCAPE_NAME_2_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_2_L REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_NAME2_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_2_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_NAME2_L_PAD+LSCAPE_SPLIT_SWAP_NAME2_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_2_T MULTICALL_SPLIT_LANDSCAPE_NAME_1_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_NAME_2_B MULTICALL_SPLIT_LANDSCAPE_NAME_1_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_ON_HOLD_TXT_L MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_1_L +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_ON_HOLD_TXT_R MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_1_R +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_ON_HOLD_TXT_T MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_ON_HOLD_TXT_B MULTICALL_SPLIT_LANDSCAPE_ON_HOLD_TXT_T + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_L MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_2_L +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_R MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_2_R +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_T MULTICALL_SPLIT_LANDSCAPE_TIMER_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_B MULTICALL_SPLIT_LANDSCAPE_TIMER_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_WITH_ICON_L MULTICALL_SPLIT_LANDSCAPE_SWAP_CID_2_L +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_WITH_ICON_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_CID2_L_PAD+LSCAPE_SPLIT_TIMER_TXT_W_ICON_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_WITH_ICON_T MULTICALL_SPLIT_LANDSCAPE_TIMER_T +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_TIMER_WITH_ICON_B MULTICALL_SPLIT_LANDSCAPE_TIMER_B + +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_MORE_ICON_L REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_MORE_BTN_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_MORE_ICON_R REL_LSCAPE_W(LSCAPE_SPLIT_SWAP_MORE_BTN_L_PAD+LSCAPE_SPLIT_SWAP_MORE_BTN_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_MORE_ICON_T REL_LSCAPE_H(LSCAPE_SPLIT_SWAP_MORE_BTN_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_SWAP_MORE_ICON_B REL_LSCAPE_H(LSCAPE_SPLIT_SWAP_MORE_BTN_T_PAD+LSCAPE_SPLIT_SWAP_MORE_BTN_HEIGHT) +/* L[HLD] + R[ACT] */ + +#define MULTICALL_SPLIT_LANDSCAPE_JOIN_L REL_LSCAPE_W(LSCAPE_SPLIT_JOIN_BTN_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_JOIN_R REL_LSCAPE_W(LSCAPE_SPLIT_JOIN_BTN_L_PAD+LSCAPE_SPLIT_JOIN_BTN_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_JOIN_T REL_LSCAPE_H(LSCAPE_SPLIT_JOIN_BTN_T_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_JOIN_B REL_LSCAPE_H(LSCAPE_SPLIT_JOIN_BTN_T_PAD+LSCAPE_SPLIT_JOIN_BTN_HEIGHT) + +#define MULTICALL_SPLIT_LANDSCAPE_BIG_END_L REL_LSCAPE_W(LSCAPE_SPLIT_BIG_END_BTN_L_PAD) +#define MULTICALL_SPLIT_LANDSCAPE_BIG_END_R REL_LSCAPE_W(LSCAPE_SPLIT_BIG_END_BTN_L_PAD+LSCAPE_SPLIT_BIG_END_BTN_WIDTH) +#define MULTICALL_SPLIT_LANDSCAPE_BIG_END_T MULTICALL_SPLIT_LANDSCAPE_JOIN_T +#define MULTICALL_SPLIT_LANDSCAPE_BIG_END_B MULTICALL_SPLIT_LANDSCAPE_JOIN_B +/* + * End of MULTI-CALL SPLIT View + */ + +/* + * QUICK-PANEL layout + * In Portrait mode + */ +#define LSCAPE_QUICKPANEL_CID_L REL_LSCAPE_QP_W(LSCAPE_QP_CID_L_PAD) +#define LSCAPE_QUICKPANEL_CID_R REL_LSCAPE_QP_W(LSCAPE_QP_CID_L_PAD+LSCAPE_QP_CID_WIDTH) +#define LSCAPE_QUICKPANEL_CID_T REL_LSCAPE_QP_H(LSCAPE_QP_CID_T_PAD) +#define LSCAPE_QUICKPANEL_CID_B REL_LSCAPE_QP_H(LSCAPE_QP_CID_T_PAD+LSCAPE_QP_CID_HEIGHT) + +#define LSCAPE_QUICKPANEL_BTN_MUTE_L REL_LSCAPE_QP_W(LSCAPE_QP_MUTE_BTN_L_PAD) +#define LSCAPE_QUICKPANEL_BTN_MUTE_R REL_LSCAPE_QP_W(LSCAPE_QP_MUTE_BTN_L_PAD+LSCAPE_QP_END_BTN_WIDTH) +#define LSCAPE_QUICKPANEL_BTN_MUTE_T REL_LSCAPE_QP_H(LSCAPE_QP_MUTE_BTN_T_PAD) +#define LSCAPE_QUICKPANEL_BTN_MUTE_B REL_LSCAPE_QP_H(LSCAPE_QP_MUTE_BTN_T_PAD+LSCAPE_QP_END_BTN_HEIGHT) + +#define LSCAPE_QUICKPANEL_BTN_END_L REL_LSCAPE_QP_W(LSCAPE_QP_END_BTN_L_PAD) +#define LSCAPE_QUICKPANEL_BTN_END_R REL_LSCAPE_QP_W(LSCAPE_QP_END_BTN_L_PAD+LSCAPE_QP_END_BTN_WIDTH) +#define LSCAPE_QUICKPANEL_BTN_END_T REL_LSCAPE_QP_H(LSCAPE_QP_END_BTN_T_PAD) +#define LSCAPE_QUICKPANEL_BTN_END_B REL_LSCAPE_QP_H(LSCAPE_QP_END_BTN_T_PAD+LSCAPE_QP_END_BTN_HEIGHT) + +#define LSCAPE_QUICKPANEL_NAME_L REL_LSCAPE_QP_W(LSCAPE_QP_NAME_L_PAD) +#define LSCAPE_QUICKPANEL_NAME_R REL_LSCAPE_QP_W(LSCAPE_QP_NAME_L_PAD+LSCAPE_QP_NAME_WIDTH) +#define LSCAPE_QUICKPANEL_NAME_T REL_LSCAPE_QP_H(LSCAPE_QP_NAME_T_PAD) +#define LSCAPE_QUICKPANEL_NAME_B REL_LSCAPE_QP_H(LSCAPE_QP_NAME_T_PAD+LSCAPE_QP_NAME_HEIGHT) + +/* + * Caller info layout + * In Portrait mode + */ + +#define CALLER_INFO_L REL_W(CALLER_INFO_L_PAD) +#define CALLER_INFO_R REL_W(CALLER_INFO_L_PAD+CALLER_INFO_WIDTH) +#define CALLER_INFO_T REL_H(CALLER_INFO_T_PAD) +#define CALLER_INFO_B REL_H(CALLER_INFO_T_PAD+CALLER_INFO_HEIGHT) + +#define CALLER_INFO_HOLD_L REL_W(CALLER_INFO_L_PAD) +#define CALLER_INFO_HOLD_R REL_W(CALLER_INFO_L_PAD+CALLER_INFO_WIDTH) +#define CALLER_INFO_HOLD_T REL_H(CALLER_INFO_HOLD_T_PAD) +#define CALLER_INFO_HOLD_B REL_H(CALLER_INFO_HOLD_T_PAD+CALLER_INFO_HEIGHT) + +#define CALLER_INFO_TOP_L REL_W(0) +#define CALLER_INFO_TOP_R REL_W(MAIN_SCREEN_W) +#define CALLER_INFO_TOP_T REL_CALLER_INFO_H(0) +#define CALLER_INFO_TOP_B REL_CALLER_INFO_H(CALLER_INFO_TOP_PAD_HEIGHT) + +#define CALLER_INFO_NAME_L REL_W(CALLER_INFO_NAME_L_PAD) +#define CALLER_INFO_NAME_R REL_W(CALLER_INFO_NAME_L_PAD+CALLER_INFO_NAME_WIDTH) +#define CALLER_INFO_NAME_T REL_CALLER_INFO_H(CALLER_INFO_NAME_T_PAD) +#define CALLER_INFO_NAME_B REL_CALLER_INFO_H(CALLER_INFO_NAME_T_PAD+CALLER_INFO_NAME_HEIGHT) + +#define CALLER_INFO_VERT_SEP_1_L REL_W(CALLER_INFO_VERT_SEP_L_PAD) +#define CALLER_INFO_VERT_SEP_1_R REL_W(CALLER_INFO_VERT_SEP_L_PAD+CALLER_INFO_VERT_SEP_WIDTH) +#define CALLER_INFO_VERT_SEP_1_T REL_CALLER_INFO_H(CALLER_INFO_VERT_SEP_T_PAD) +#define CALLER_INFO_VERT_SEP_1_B REL_CALLER_INFO_H(CALLER_INFO_VERT_SEP_T_PAD+CALLER_INFO_VERT_SEP_HEIGHT) +#define CALLER_INFO_VERT_SEP_2_L CALLER_INFO_VERT_SEP_1_R +#define CALLER_INFO_VERT_SEP_2_R REL_W(CALLER_INFO_VERT_SEP_L_PAD+2*CALLER_INFO_VERT_SEP_WIDTH) +#define CALLER_INFO_VERT_SEP_2_T CALLER_INFO_VERT_SEP_1_T +#define CALLER_INFO_VERT_SEP_2_B CALLER_INFO_VERT_SEP_1_B + +#define CALLER_INFO_ICON_L REL_W(CALLER_INFO_ICON_L_PAD) +#define CALLER_INFO_ICON_R REL_W(CALLER_INFO_ICON_L_PAD+CALLER_INFO_ICON_WIDTH) +#define CALLER_INFO_ICON_T REL_CALLER_INFO_H(CALLER_INFO_ICON_T_PAD) +#define CALLER_INFO_ICON_B REL_CALLER_INFO_H(CALLER_INFO_ICON_T_PAD+CALLER_INFO_ICON_HEIGHT) + +#define CALLER_INFO_NUMBER_L REL_W(CALLER_INFO_NUMBER_L_PAD) +#define CALLER_INFO_NUMBER_R REL_W(CALLER_INFO_NUMBER_L_PAD+CALL_NUMBER_WIDTH) +#define CALLER_INFO_NUMBER_T REL_CALLER_INFO_H(CALLER_INFO_NUMBER_T_PAD) +#define CALLER_INFO_NUMBER_B REL_CALLER_INFO_H(CALLER_INFO_NUMBER_T_PAD+CALLER_INFO_NUMBER_HEIGHT) + +#define CALLER_INFO_TIMER_L REL_W(CALLER_INFO_TIME_L_PAD) +#define CALLER_INFO_TIMER_R REL_W(CALLER_INFO_TIME_L_PAD+CALLER_INFO_TIME_WIDTH) +#define CALLER_INFO_TIMER_T REL_CALLER_INFO_H(CALLER_INFO_TIME_T_PAD) +#define CALLER_INFO_TIMER_B REL_CALLER_INFO_H(CALLER_INFO_TIME_T_PAD+CALLER_INFO_TIME_HEIGHT) + +/* + * End of Caller info layout + */ + +/* + * Ctxpoup layout + * In Portrait mode + */ + +#define MORE_MENU_CTXPOPUP_ROW_H 97 +#define MORE_MENU_CTXPOPUP_ROW_ICON_W 64 +#define MORE_MENU_CTXPOPUP_ROW_ICON_H 64 +#define MORE_MENU_CTXPOPUP_ROW_ICON_PAD 16 + +#define MORE_MENU_CTXPOPUP_SEPARATOR_W 478 +#define MORE_MENU_CTXPOPUP_SEPARATOR_H 1 + +#define MORE_MENU_CTXPOPUP_ARROW_W 42 +#define MORE_MENU_CTXPOPUP_ARROW_H 22 + +#define MORE_MENU_CTXPOPUP_SHADOW_PADDING 3 +#define MORE_MENU_CTXPOPUP_PADDING 10 + +/* + * End of Ctxpoup layout + */ + + +/* + * SNS alerts layout + */ +#define ALERTS_BDAY_ICON_L REL_ALERTS_LY_W(BIRTHDAY_ICON_L_PAD) +#define ALERTS_BDAY_ICON_R REL_ALERTS_LY_W(BIRTHDAY_ICON_L_PAD+BIRTHDAY_ICON_WIDTH) +#define ALERTS_BDAY_ICON_T REL_ALERTS_LY_H(BIRTHDAY_ICON_T_PAD) +#define ALERTS_BDAY_ICON_B REL_ALERTS_LY_H(BIRTHDAY_ICON_T_PAD+BIRTHDAY_ICON_HEIGHT) + +#define ALERTS_BDAY_ICON_EXPANDED_T REL_ALERTS_EXP_LY_H(BIRTHDAY_ICON_T_PAD) +#define ALERTS_BDAY_ICON_EXPANDED_B REL_ALERTS_EXP_LY_H(BIRTHDAY_ICON_T_PAD+BIRTHDAY_ICON_HEIGHT) + +#define ALERTS_BDAY_TEXT_L REL_ALERTS_LY_W(BIRTHDAY_TEXT_L_PAD) +#define ALERTS_BDAY_TEXT_R REL_ALERTS_LY_W(BIRTHDAY_TEXT_L_PAD+BIRTHDAY_TEXT_WIDTH) +#define ALERTS_BDAY_TEXT_T REL_ALERTS_LY_H(BIRTHDAY_TEXT_T_PAD) +#define ALERTS_BDAY_TEXT_B REL_ALERTS_LY_H(BIRTHDAY_TEXT_T_PAD+BIRTHDAY_TEXT_HEIGHT) + +#define ALERTS_BDAY_TEXT_EXPANDED_T REL_ALERTS_EXP_LY_H(BIRTHDAY_TEXT_T_PAD) +#define ALERTS_BDAY_TEXT_EXPANDED_B REL_ALERTS_EXP_LY_H(BIRTHDAY_TEXT_T_PAD+BIRTHDAY_TEXT_HEIGHT) + +#define ALERTS_SNS_ICON_L REL_ALERTS_LY_W(SNS_STATUS_ICON_L_PAD) +#define ALERTS_SNS_ICON_R REL_ALERTS_LY_W(SNS_STATUS_ICON_L_PAD+SNS_STATUS_ICON_WIDTH) +#define ALERTS_SNS_ICON_T REL_ALERTS_LY_H(SNS_STATUS_ICON_T_PAD) +#define ALERTS_SNS_ICON_B REL_ALERTS_LY_H(SNS_STATUS_ICON_T_PAD+SNS_STATUS_ICON_HEIGHT) + +#define ALERTS_SNS_ICON_EXPANDED_T REL_ALERTS_EXP_LY_H(SNS_STATUS_ICON_T_PAD) +#define ALERTS_SNS_ICON_EXPANDED_B REL_ALERTS_EXP_LY_H(SNS_STATUS_ICON_T_PAD+SNS_STATUS_ICON_HEIGHT) + +#define ALERTS_SNS_TEXT_L REL_ALERTS_LY_W(SNS_STATUS_TEXT_L_PAD) +#define ALERTS_SNS_TEXT_R REL_ALERTS_LY_W(SNS_STATUS_TEXT_L_PAD+SNS_STATUS_TEXT_WIDTH) +#define ALERTS_SNS_TEXT_T REL_ALERTS_LY_H(SNS_STATUS_TEXT_T_PAD) +#define ALERTS_SNS_TEXT_B REL_ALERTS_LY_H(SNS_STATUS_TEXT_T_PAD+SNS_STATUS_TEXT_HEIGHT) + +#define ALERTS_SNS_EXPANDED_TEXT_L REL_ALERTS_LY_W(SNS_STATUS_TEXT_L_PAD) +#define ALERTS_SNS_EXPANDED_TEXT_R REL_ALERTS_LY_W(SNS_STATUS_TEXT_L_PAD+SNS_STATUS_EXPANDED_TEXT_WIDTH) +#define ALERTS_SNS_EXPANDED_TEXT_T REL_ALERTS_EXP_LY_H(SNS_STATUS_TEXT_T_PAD) +#define ALERTS_SNS_EXPANDED_TEXT_B REL_ALERTS_EXP_LY_H(SNS_STATUS_TEXT_T_PAD+SNS_STATUS_EXPANDED_TEXT_HEIGHT) + +#define ALERTS_SNS_ARROW_L REL_ALERTS_LY_W(SNS_STATUS_ARROW_L_PAD) +#define ALERTS_SNS_ARROW_R REL_ALERTS_LY_W(SNS_STATUS_ARROW_L_PAD+SNS_STATUS_ARROW_WIDTH) +#define ALERTS_SNS_ARROW_T REL_ALERTS_LY_H(SNS_STATUS_ARROW_T_PAD) +#define ALERTS_SNS_ARROW_B REL_ALERTS_LY_H(SNS_STATUS_ARROW_T_PAD+SNS_STATUS_ARROW_HEIGHT) + +#define ALERTS_SNS_EXPANDED_ARROW_T REL_ALERTS_EXP_LY_H(SNS_STATUS_ARROW_T_PAD) +#define ALERTS_SNS_EXPANDED_ARROW_B REL_ALERTS_EXP_LY_H(SNS_STATUS_ARROW_T_PAD+SNS_STATUS_ARROW_HEIGHT) +/* + * End of SNS alerts layout + */ +#endif /*_VCUI_VIEW_LAYOUT_HD_H_*/ diff --git a/ui/src/include/vcui-view-multi-call-conf.h b/ui/src/include/vcui-view-multi-call-conf.h new file mode 100755 index 0000000..9cc3b48 --- /dev/null +++ b/ui/src/include/vcui-view-multi-call-conf.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 _VCUI_VIEW_MULTI_CALL_CONF_H_ +#define _VCUI_VIEW_MULTI_CALL_CONF_H_ + + +voice_call_view_data_t *_vcui_view_multi_call_conf_new(vcui_app_call_data_t *ad); +int _vcui_view_multi_call_conf_check_valid_eo(voice_call_view_data_t *vd); +Evas_Object *_vcui_view_multi_call_conf_get_main_layout(voice_call_view_data_t *vd); +int _vcui_view_multi_call_conf_get_call_status(voice_call_view_data_t *vd); +void _vcui_view_multi_call_conf_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur); +Evas_Object *_vcui_view_multi_call_conf_get_button_layout(voice_call_view_data_t *vd); +Evas_Object *_vcui_view_multi_call_conf_get_cid_layout(voice_call_view_data_t *vd); +int _vcui_view_multi_call_conf_get_total_members(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_multi_call_conf_get_caller_info(voice_call_view_data_t *vd); + +#endif /*_VCUI_VIEW_MULTI_CALL_CONF_H_*/ + diff --git a/ui/vcui-view-multi-call-list.h b/ui/src/include/vcui-view-multi-call-list.h similarity index 55% rename from ui/vcui-view-multi-call-list.h rename to ui/src/include/vcui-view-multi-call-list.h index 1561a93..d1dc62b 100755 --- a/ui/vcui-view-multi-call-list.h +++ b/ui/src/include/vcui-view-multi-call-list.h @@ -15,24 +15,15 @@ */ -#ifndef _VCUI_VIEW_MULTI_CALL_LIST_ -#define _VCUI_VIEW_MULTI_CALL_LIST_ +#ifndef _VCUI_VIEW_MULTI_CALL_LIST_H_ +#define _VCUI_VIEW_MULTI_CALL_LIST_H_ -typedef struct { - Evas_Object *navi_frame; - Evas_Object *contents; - - Evas_Object *ic; - - Evas_Object *record_btn; - - vcui_app_call_status_t call_status; - - Evas_Object *multibox_gl; - - int total_members; -} vcui_view_multi_call_list_priv_t; - -#endif voice_call_view_data_t *_vcui_view_multi_call_list_new(vcui_app_call_data_t *ad); +int _vcui_view_multi_call_list_check_valid_eo(voice_call_view_data_t *vd); +Evas_Object *_vcui_view_multi_call_list_get_main_layout(voice_call_view_data_t *vd); +int _vcui_view_multi_call_list_get_call_status(voice_call_view_data_t *vd); +void _vcui_view_multi_call_list_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur); +Evas_Object *_vcui_view_multi_call_list_get_cid_layout(voice_call_view_data_t *vd); +int _vcui_view_multi_call_list_get_total_members(voice_call_view_data_t *vd); +#endif diff --git a/ui/vcui-view-multi-call-split.h b/ui/src/include/vcui-view-multi-call-split.h similarity index 51% rename from ui/vcui-view-multi-call-split.h rename to ui/src/include/vcui-view-multi-call-split.h index 39b2750..58a92e8 100755 --- a/ui/vcui-view-multi-call-split.h +++ b/ui/src/include/vcui-view-multi-call-split.h @@ -15,22 +15,17 @@ */ -#ifndef _VOICE_CALL_UI_INCALL_MULTI_VIEW_SPLIT_ -#define _VOICE_CALL_UI_INCALL_MULTI_VIEW_SPLIT_ +#ifndef _VCUI_VIEW_MULTI_CALL_SPLIT_H_ +#define _VCUI_VIEW_MULTI_CALL_SPLIT_H_ -typedef struct { - Evas_Object *contents; - - Evas_Object *ic_incall; - Evas_Object *ic_onhold; - - Evas_Object *record_btn; - - call_data_t *now_data_hold; - call_data_t *now_data_unhold; - -} incall_multi_view_split_priv_t; voice_call_view_data_t *_vcui_view_multi_call_split_new(vcui_app_call_data_t *ad); -#endif +void _vcui_multi_view_split_rotation_with_resize(); +int _vcui_view_multi_call_split_check_valid_eo(voice_call_view_data_t *vd); +Evas_Object *_vcui_view_multi_call_split_get_layout(voice_call_view_data_t *vd); +Evas_Object *_vcui_view_multi_call_split_get_button_layout(voice_call_view_data_t *vd); +void _vcui_view_multi_call_split_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur); +Evas_Object *_vc_ui_view_multi_call_split_get_caller_info_hold(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_multi_call_split_get_caller_info_unhold(voice_call_view_data_t *vd); +#endif diff --git a/ui/vcui-view-popup.h b/ui/src/include/vcui-view-popup.h similarity index 72% rename from ui/vcui-view-popup.h rename to ui/src/include/vcui-view-popup.h index a912006..ec422b3 100755 --- a/ui/vcui-view-popup.h +++ b/ui/src/include/vcui-view-popup.h @@ -15,29 +15,31 @@ */ -#ifndef _VOICE_CALL_UI_POPUP_VIEW_ -#define _VOICE_CALL_UI_POPUP_VIEW_ +#ifndef _VCUI_VIEW_POPUP_H_ +#define _VCUI_VIEW_POPUP_H_ void _vcui_view_popup_unload(Evas_Object *popup_eo); void _vcui_view_popup_load(char *popup_msg, double time_out, int bterminate); void _vcui_view_popup_replace(char *popup_msg, double time_out, int bterminate); - void _vcui_view_popup_vol_ringtone(int vol_level); void _vcui_view_popup_vol_voice(int vol_level); void _vcui_view_popup_vol_bt(int vol_level); - void _vcui_view_popup_load_reject_call(char *name, char *number, int end_app); void _vcui_view_popup_load_endcall_time(call_data_t *cd); void _vcui_view_popup_load_redial(void); - void _vcui_view_popup_load_with_delay(char *popup_msg, double delay_time); - void _vcui_view_popup_load_sending_dtmf(char *status_string, char *dtmf_num); void _vcui_view_popup_unload_progress(vcui_app_call_data_t *ad); void _vcui_view_popup_load_progress(char *display_string); - -void _vcui_view_popup_load_snd_path(void); - +void _vcui_view_popup_load_snd_path(void *data); void _vcui_view_create_ticker_noti(char *ticker_msg); +void _vcui_view_popup_load_share(void *data); +void _vcui_view_load_send_dtmf_popup_with_buttons(char *status_string, char *dtmf_num); + +void _vcui_view_popup_second_mtcall_load(char *title_text, int unhold_call_count, int hold_call_count); +void _vcui_view_popup_second_mtcall_unload(void *data); +void _vcui_view_set_second_mtcall_popup_data(void *p_popup_data); +void *_vcui_view_get_second_mtcall_popup_data(void); +void _vcui_view_popup_load_more_option(void *data); #endif diff --git a/ui/vcui-view-incoming.h b/ui/src/include/vcui-view-quickpanel.h similarity index 56% rename from ui/vcui-view-incoming.h rename to ui/src/include/vcui-view-quickpanel.h index baaad16..adebce9 100755 --- a/ui/vcui-view-incoming.h +++ b/ui/src/include/vcui-view-quickpanel.h @@ -1,34 +1,27 @@ -/* - * 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 _VOICE_CALL_UI_INCOMING_VIEW_ -#define _VOICE_CALL_UI_INCOMING_VIEW_ - -typedef struct { - Evas_Object *contents; - - call_data_t *now_data; - Evas_Object *ic; - - int bdont_refresh; - int bselected_btn; - -} incoming_view_priv_t; - -voice_call_view_data_t *_vcui_view_incoming_new(vcui_app_call_data_t *ad); - -#endif +/* + * 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 __VCUI_VIEW_QUICKPANEL_H_ +#define __VCUI_VIEW_QUICKPANEL_H_ + +voice_call_view_data_t *_vcui_view_qp_new(vcui_app_call_data_t * ad); +void _vcui_view_qp_update_text_status(voice_call_view_data_t *vd, char *txt_status); +void _vc_ui_view_qp_set_call_timer(Evas_Object *qp_layout, char *pcall_timer); +void _vcui_view_qp_install_window(voice_call_view_data_t *vd); +void _vcui_view_qp_uninstall_window(voice_call_view_data_t *vd); + +#endif /*__VCUI_VIEW_QUICKPANEL_H_*/ diff --git a/ui/vcui-view-single-call.h b/ui/src/include/vcui-view-single-call.h similarity index 55% rename from ui/vcui-view-single-call.h rename to ui/src/include/vcui-view-single-call.h index e5aced4..29b4283 100755 --- a/ui/vcui-view-single-call.h +++ b/ui/src/include/vcui-view-single-call.h @@ -15,15 +15,16 @@ */ -#ifndef _VCUI_VIEW_SINGLE_CALL_ -#define _VCUI_VIEW_SINGLE_CALL_ - -typedef struct { - Evas_Object *contents; - Evas_Object *ic; - Evas_Object *record_btn; - call_data_t *now_data; -} incall_one_view_priv_t; +#ifndef _VCUI_VIEW_SINGLE_CALL_H_ +#define _VCUI_VIEW_SINGLE_CALL_H_ + voice_call_view_data_t *_vc_ui_view_single_call_new(vcui_app_call_data_t *ad); +int _vc_ui_view_single_call_check_valid_eo(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_single_call_get_layout(voice_call_view_data_t *vd); +Evas_Object *_vc_ui_view_single_call_get_button_layout(voice_call_view_data_t *vd); +int _vc_ui_view_single_call_get_call_status(voice_call_view_data_t *vd); +void _vc_ui_view_single_call_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur); +Evas_Object *_vc_ui_view_single_call_get_caller_info(voice_call_view_data_t *vd); + #endif diff --git a/ui/vcui-app-window.c b/ui/src/vcui-app-window.c similarity index 60% rename from ui/vcui-app-window.c rename to ui/src/vcui-app-window.c index 0b864ab..b3e4bd8 100755 --- a/ui/vcui-app-window.c +++ b/ui/src/vcui-app-window.c @@ -16,14 +16,15 @@ #include "vcui-app-window.h" +#include "vcui-view-quickpanel.h" -static void __vcui_app_win_focus_in_cb(void *data, Evas_Object *obj, void *event_info); -static void __vcui_app_win_focus_out_cb(void *data, Evas_Object *obj, void *event_info); +static Eina_Bool __vcui_app_win_focus_in_cb(void *data, int type, void *event); +static Eina_Bool __vcui_app_win_focus_out_cb(void *data, int type, void *event); static void __vcui_app_win_main_win_del_cb(void *data, Evas_Object *obj, void *event); static Eina_Bool __vcui_app_win_hard_key_down_cb(void *data, int type, void *event); static Eina_Bool __vcui_app_win_hard_key_up_cb(void *data, int type, void *event); static Eina_Bool __vcui_app_win_mouse_down_cb(void *data, int type, void *event); -static Eina_Bool __vcui_app_win_longpress_mute_timer_cb(void *data); +/*static Eina_Bool __vcui_app_win_longpress_mute_timer_cb(void *data);*/ static Eina_Bool __vcui_app_win_volup_key_longpress_timer_cb(void *data); static Eina_Bool __vcui_app_win_voldown_key_longpress_timer_cb(void *data); @@ -39,21 +40,51 @@ Evas_Object *_vcui_app_win_create_main(vcui_app_call_data_t *ad, const char *nam ecore_x_window_size_get(ecore_x_window_root_first_get(), &ad->root_w, &ad->root_h); evas_object_resize(eo, ad->root_w, ad->root_h); elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW); - evas_object_smart_callback_add(eo, "focus-in", __vcui_app_win_focus_in_cb, ad); - evas_object_smart_callback_add(eo, "focus-out", __vcui_app_win_focus_out_cb, ad); } return eo; } -static void __vcui_app_win_focus_in_cb(void *data, Evas_Object *obj, void *event_info) +static Eina_Bool __vcui_app_win_focus_in_cb(void *data, int type, void *event) { CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + Ecore_X_Event_Window_Focus_Out *ev = (Ecore_X_Event_Window_Focus_Out *)event; + + if (ad == NULL) { + CALL_UI_DEBUG("ad == NULL"); + return ECORE_CALLBACK_CANCEL; + } + + if (ad->win_main!= NULL && ev->win == elm_win_xwindow_get(ad->win_main)) { + CALL_UI_DEBUG("Uninstall quick-panel view"); + _vcui_view_qp_uninstall_window(ad->view_st[VIEW_QUICKPANEL_VIEW]); + } + + CALL_UI_DEBUG("__win_focus_in_cb leave"); + + return ECORE_CALLBACK_PASS_ON; } -static void __vcui_app_win_focus_out_cb(void *data, Evas_Object *obj, void *event_info) +static Eina_Bool __vcui_app_win_focus_out_cb(void *data, int type, void *event) { CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + Ecore_X_Event_Window_Focus_Out *ev = (Ecore_X_Event_Window_Focus_Out *)event; + + if (ad == NULL) { + CALL_UI_DEBUG("ad == NULL"); + return ECORE_CALLBACK_CANCEL; + } + + if (ad->win_main != NULL && ev->win == elm_win_xwindow_get(ad->win_main)) { + CALL_UI_DEBUG("install quick-panel view"); + _vcui_view_qp_install_window(ad->view_st[VIEW_QUICKPANEL_VIEW]); + } + + CALL_UI_DEBUG("__win_focus_out_cb leave"); + + return ECORE_CALLBACK_PASS_ON; } static void __vcui_app_win_main_win_del_cb(void *data, Evas_Object *obj, void *event) @@ -66,14 +97,16 @@ static Eina_Bool __vcui_app_win_hard_key_down_cb(void *data, int type, void *eve { CALL_UI_DEBUG(".."); - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; Ecore_Event_Key *ev = event; + gboolean banswering_enabled = EINA_FALSE; + gboolean bpowerkey_enabled = EINA_FALSE; retvm_if(ev == NULL, 0, "ERROR!!! ========= Event is NULL!!!"); if (ad->view_top == -1) { CALL_UI_DEBUG("ad->view_top is -1."); -#ifndef END_KEY_PROCESSING +#ifdef SEND_END_TO_UG if ((ad->contact_ug != NULL) && (!strcmp(ev->keyname, KEY_END))) { CALL_UI_DEBUG("send end key to contact ug."); ug_send_key_event(UG_KEY_EVENT_END); @@ -82,29 +115,67 @@ static Eina_Bool __vcui_app_win_hard_key_down_cb(void *data, int type, void *eve return EINA_FALSE; } - if (!strcmp(ev->keyname, KEY_VOLUMEUP)) { + if (!strcmp(ev->keyname, KEY_POWER)) { + bpowerkey_enabled = _vcui_is_powerkey_mode_on(); + CALL_UI_DEBUG("[KEY]KEY_POWER pressed, bpowerkey_enabled(%d)", bpowerkey_enabled); + if (bpowerkey_enabled == EINA_TRUE) { + CALL_UI_DEBUG("Lock the LCD state to ON..."); + vcall_engine_device_control_lcd_state(VC_LCD_ON_LOCK); + + if (ad->view_st[ad->view_top]->type == VIEW_DIALLING_VIEW) { + if (ad->ball_view_hide) { + CALL_UI_DEBUG("VCUI_RQST_REDIAL_STOP !!"); + vcall_engine_process_auto_redial(EINA_FALSE); + elm_exit(); + } else { + vcall_engine_cancel_call(); + } + } else if (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW) { + vcall_engine_reject_call(); + } else if ((ad->view_st[ad->view_top]->type >= VIEW_INCALL_ONECALL_VIEW) + && (ad->view_st[ad->view_top]->type <= VIEW_INCALL_MULTICALL_LIST_VIEW)) { + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_CALLS); + } else { + CALL_UI_DEBUG("nothing..."); + } + } + } else if (!strcmp(ev->keyname, KEY_VOLUMEUP)) { CALL_UI_DEBUG("[KEY]KEY_VOLUMEUP pressed"); - if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW) || (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) { - _vcui_engine_interface_process_mute_alert(); + if (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW) { + vcall_engine_mute_alert(); ad->bmute_ringtone = EINA_TRUE; } else { ad->vol_longpress_cnt = 0; - if (_voicecall_dvc_get_proximity_sensor_state() != VCALL_SENSOR_NEAR) - _voicecall_dvc_control_lcd_state(VC_LCD_ON); - _vcui_set_volume(VAL_VOL_UP); - ad->volup_key_longpress_timer = ecore_timer_add(VOLUME_KEY_LONG_PRESS_TIMEOUT, __vcui_app_win_volup_key_longpress_timer_cb, ad); + vcall_engine_device_control_lcd_state(VC_LCD_ON); + { + _vcui_set_volume(VAL_VOL_UP); + ad->volup_key_longpress_timer = ecore_timer_add(VOLUME_KEY_LONG_PRESS_TIMEOUT, __vcui_app_win_volup_key_longpress_timer_cb, ad); + } } } else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) { CALL_UI_DEBUG("[KEY]KEY_VOLUMEDOWN pressed"); - if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW) || (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) { - _vcui_engine_interface_process_mute_alert(); + if (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW) { + vcall_engine_mute_alert(); ad->bmute_ringtone = EINA_TRUE; } else { ad->vol_longpress_cnt = 0; - if (_voicecall_dvc_get_proximity_sensor_state() != VCALL_SENSOR_NEAR) - _voicecall_dvc_control_lcd_state(VC_LCD_ON); - _vcui_set_volume(VAL_VOL_DOWN); - ad->voldown_key_longpress_timer = ecore_timer_add(VOLUME_KEY_LONG_PRESS_TIMEOUT, __vcui_app_win_voldown_key_longpress_timer_cb, ad); + vcall_engine_device_control_lcd_state(VC_LCD_ON); + { + _vcui_set_volume(VAL_VOL_DOWN); + ad->voldown_key_longpress_timer = ecore_timer_add(VOLUME_KEY_LONG_PRESS_TIMEOUT, __vcui_app_win_voldown_key_longpress_timer_cb, ad); + } + } + } else if (!strcmp(ev->keyname, KEY_SELECT)) { + banswering_enabled = _vcui_is_answering_mode_on(); + CALL_UI_DEBUG("[KEY]KEY_SELECT pressed"); + if (banswering_enabled == EINA_TRUE) { + if (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW) { + CALL_UI_DEBUG("Answering mode on and Home key pressed on MT screen"); + + if (_vcui_is_phonelock_status() == EINA_FALSE) + vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); + vcall_engine_answer_call(); + } } } @@ -116,7 +187,7 @@ static Eina_Bool __vcui_app_win_hard_key_up_cb(void *data, int type, void *event { CALL_UI_DEBUG(".."); - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; Ecore_Event_Key *ev = event; retvm_if(ev == NULL, 0, "ERROR!!! ========= Event is NULL!!!"); @@ -145,9 +216,7 @@ static Eina_Bool __vcui_app_win_hard_key_up_cb(void *data, int type, void *event static Eina_Bool __vcui_app_win_mouse_down_cb(void *data, int type, void *event) { - /*CALL_UI_DEBUG("..");*/ - - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; Ecore_Event_Mouse_Button *ev = event; ad->touch_x = ev->x; @@ -175,19 +244,24 @@ void _vcui_app_win_key_grab(vcui_app_call_data_t *ad) if (ad->downkey_handler == NULL) ad->downkey_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __vcui_app_win_hard_key_down_cb, ad); if (ad->upkey_handler == NULL) - ad->upkey_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __vcui_app_win_hard_key_up_cb, ad); /* (for long press)*/ + ad->upkey_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __vcui_app_win_hard_key_up_cb, ad); if (ad->mouse_evnt_handler == NULL) - ad->mouse_evnt_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, __vcui_app_win_mouse_down_cb, ad); /*for ctxpopup*/ + ad->mouse_evnt_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, __vcui_app_win_mouse_down_cb, ad); /*for ctxpopup */ + if (ad->focus_in == NULL) + ad->focus_in = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, __vcui_app_win_focus_in_cb, ad); + if (ad->focus_out == NULL) + ad->focus_out = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, __vcui_app_win_focus_out_cb, ad); CALL_UI_KPI("_vcui_app_win_key_grab done"); } +#if 0 static Eina_Bool __vcui_app_win_longpress_mute_timer_cb(void *data) { CALL_UI_DEBUG(".."); - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; - call_data_t *call_data = _vcui_doc_get_recent_mt(); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + call_data_t *call_data = _vcui_doc_get_recent_mt_call_data(); if (call_data == NULL) return ECORE_CALLBACK_CANCEL; @@ -211,20 +285,21 @@ static Eina_Bool __vcui_app_win_longpress_mute_timer_cb(void *data) _vcui_view_popup_unload(ad->vol_ringtone_popup_eo); - _vcui_engine_interface_process_mute_alert(); + vcall_engine_mute_alert(); ad->bmute_ringtone = EINA_TRUE; return ECORE_CALLBACK_CANCEL; } +#endif static Eina_Bool __vcui_app_win_volup_key_longpress_timer_cb(void *data) { CALL_UI_DEBUG(".."); - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; - if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW || ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) { - if((ad->ringtone_val == RINGTONE_MAX) || (ad->bmute_ringtone == EINA_TRUE)){ + if (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW) { + if ((ad->ringtone_val == RINGTONE_MAX) || (ad->bmute_ringtone == EINA_TRUE)) { if (ad->volup_key_longpress_timer) { ecore_timer_del(ad->volup_key_longpress_timer); ad->volup_key_longpress_timer = NULL; @@ -232,7 +307,7 @@ static Eina_Bool __vcui_app_win_volup_key_longpress_timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } } else if (ad->headset_status == EINA_TRUE) { - if(ad->bt_vol_val== BT_VOL_MAX) { + if (ad->bt_vol_val == BT_VOL_MAX) { if (ad->volup_key_longpress_timer) { ecore_timer_del(ad->volup_key_longpress_timer); ad->volup_key_longpress_timer = NULL; @@ -240,7 +315,7 @@ static Eina_Bool __vcui_app_win_volup_key_longpress_timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } } else { - if(ad->voice_vol_val == VOICE_VOL_MAX) { + if (ad->voice_vol_val == VOICE_VOL_MAX) { if (ad->volup_key_longpress_timer) { ecore_timer_del(ad->volup_key_longpress_timer); ad->volup_key_longpress_timer = NULL; @@ -262,10 +337,10 @@ static Eina_Bool __vcui_app_win_voldown_key_longpress_timer_cb(void *data) { CALL_UI_DEBUG(".."); - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; - if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW || ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) { - if((ad->ringtone_val == RINGTONE_MAX) || (ad->bmute_ringtone == EINA_TRUE)) { + if (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW) { + if ((ad->ringtone_val == RINGTONE_MAX) || (ad->bmute_ringtone == EINA_TRUE)) { if (ad->voldown_key_longpress_timer) { ecore_timer_del(ad->voldown_key_longpress_timer); ad->voldown_key_longpress_timer = NULL; @@ -273,7 +348,7 @@ static Eina_Bool __vcui_app_win_voldown_key_longpress_timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } } else if (ad->headset_status == EINA_TRUE) { - if(ad->bt_vol_val == BT_VOL_MIN) { + if (ad->bt_vol_val == BT_VOL_MIN) { if (ad->voldown_key_longpress_timer) { ecore_timer_del(ad->voldown_key_longpress_timer); ad->voldown_key_longpress_timer = NULL; @@ -281,7 +356,7 @@ static Eina_Bool __vcui_app_win_voldown_key_longpress_timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } } else { - if(ad->voice_vol_val == VOICE_VOL_MIN) { + if (ad->voice_vol_val == VOICE_VOL_MIN) { if (ad->voldown_key_longpress_timer) { ecore_timer_del(ad->voldown_key_longpress_timer); ad->voldown_key_longpress_timer = NULL; @@ -292,7 +367,7 @@ static Eina_Bool __vcui_app_win_voldown_key_longpress_timer_cb(void *data) ad->vol_longpress_cnt++; - if((ad->vol_longpress_cnt % 3) == 0) { + if ((ad->vol_longpress_cnt % 3) == 0) { _vcui_set_volume(VAL_VOL_DOWN); } @@ -320,4 +395,3 @@ void _vcui_app_win_set_noti_type(int bwin_noti) } return; } - diff --git a/ui/src/vcui-application.c b/ui/src/vcui-application.c new file mode 100755 index 0000000..6b9995c --- /dev/null +++ b/ui/src/vcui-application.c @@ -0,0 +1,2195 @@ +/* + * 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 "vcui-application.h" +#include "vcui-app-window.h" +#include "vcui-app-data.h" +#include "vcui-document.h" + +#include "vcui-view-dialing.h" +#include "vcui-view-incoming-lock.h" +#include "vcui-view-keypad.h" +#include "vcui-view-single-call.h" +#include "vcui-view-multi-call-split.h" +#include "vcui-view-multi-call-conf.h" +#include "vcui-view-multi-call-list.h" +#include "vcui-view-callend.h" +#include "vcui-view-quickpanel.h" +#include "vcui-view-popup.h" +#include +#include +#include +#include +#ifdef SIGNAL_HANDLER +#include +#endif +#include "appsvc.h" +#include "voice-call-engine.h" + +static vcui_app_call_data_t global_ad; + +#ifdef SIGNAL_HANDLER +#define VCUI_SIG_NUM 12 +static struct sigaction vcui_app_sigact; +static struct sigaction vcui_app_sigoldact[VCUI_SIG_NUM]; +static int vcui_app_sig_to_handle[] = { SIGABRT, SIGBUS, SIGFPE, SIGILL, SIGQUIT, SIGSEGV, SIGSYS, SIGTRAP, SIGXCPU, SIGXFSZ, SIGTERM, SIGPIPE }; +#endif + +static gboolean g_avoid_multi_setup = EINA_FALSE; +static Eina_Bool __vcui_avoid_multi_setup_timer_cb(void *data); + +#define CALL_PKG_NAME "org.tizen.call" +#define CISS_AUL_CMD "org.tizen.ciss" +#define CISS_MODE_OPT "REQ" +#define __VCUI_NOTIFICATION_CALL_GROUP_ID 1001 + +/* For Debug Information, Call Event name string constant */ +static char *gszcall_callback_msg[VC_ENGINE_MSG_MAX_TO_UI] = { + "VC_ENGINE_MSG_INCOM_TO_UI", + "VC_ENGINE_MSG_OUTGOING_TO_UI", + "VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI", + "VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI_TEST", + "VC_ENGINE_MSG_OUTGOING_ALERT_TO_UI", + "VC_ENGINE_MSG_CONNECTED_TO_UI", + "VC_ENGINE_MSG_NORMAL_END_TO_UI", + "VC_ENGINE_MSG_INCOM_END_TO_UI", + "VC_ENGINE_MSG_REJECTED_END_TO_UI", + "VC_ENGINE_MSG_OUTGOING_END_TO_UI", + "VC_ENGINE_MSG_OUTGOING_END_SIGNAL_PLAY_TO_UI", + "VC_ENGINE_MSG_OUTGOING_ABORTED_TO_UI", + "VC_ENGINE_MSG_DTMF_ACK_TO_UI", + + "VC_ENGINE_MSG_SS_HELD_TO_UI", + "VC_ENGINE_MSG_SS_RETREIVED_TO_UI", + "VC_ENGINE_MSG_SS_SWAP_TO_UI", + "VC_ENGINE_MSG_SS_SETUP_CONF_TO_UI", + "VC_ENGINE_MSG_SS_SPLIT_CONF_TO_UI", + "VC_ENGINE_MSG_SS_TRANSFERRED_TO_UI", + "VC_ENGINE_MSG_SS_CONNECT_LINE_IND_TO_UI", + + "VC_ENGINE_MSG_IND_FORWARD_TO_UI", + "VC_ENGINE_MSG_IND_ACTIVATE_TO_UI", + "VC_ENGINE_MSG_IND_HOLD_TO_UI", + "VC_ENGINE_MSG_IND_TRANSFER_TO_UI", + "VC_ENGINE_MSG_IND_SETUPCONFERENCE_TO_UI", + "VC_ENGINE_MSG_IND_BARRING_TO_UI", + "VC_ENGINE_MSG_IND_WAITING_TO_UI", + "VC_ENGINE_MSG_IND_CUGINFO_TO_UI", + "VC_ENGINE_MSG_IND_SSNOTIFY_TO_UI", + "VC_ENGINE_MSG_IND_CALLINGNAMEINFO_TO_UI", + "VC_ENGINE_MSG_IND_REDIRECT_CNF_TO_UI", + "VC_ENGINE_MSG_IND_ACTIVATECCBS_CNF_TO_UI", + "VC_ENGINE_MSG_IND_ACTIVATECCBS_USERINFO_TO_UI", + "VC_ENGINE_MSG_IND_AOC_TO_UI", + + "VC_ENGINE_MSG_ERROR_OCCURED_TO_UI", + + "VC_ENGINE_MSG_ACTION_INCOM_FORCE_TO_UI", + "VC_ENGINE_MSG_ACTION_SAT_REQUEST_TO_UI", + "VC_ENGINE_MSG_ACTION_SAT_RESPONSE_TO_UI", + "VC_ENGINE_MSG_ACTION_CALL_END_HELD_RETREIVED_TO_UI", + "VC_ENGINE_MSG_ACTION_NO_ACTIVE_TASK_TO_UI", + + "VC_ENGINE_MSG_GET_VOLUME_RESP_TO_UI", + "VC_ENGINE_MSG_SET_VOLUME_FROM_BT_TO_UI", + "VC_ENGINE_MSG_HEADSET_STATUS_TO_UI", + "VC_ENGINE_MSG_EARJACK_STATUS_TO_UI", + + "VC_ENGINE_MSG_ACCEPT_CHOICE_BOX_TO_UI", + "VC_ENGINE_MSG_MESSAGE_BOX_TO_UI", + + "VC_ENGINE_MSG_REDIAL_TO_UI", + "VC_ENGINE_MSG_CREATE_NEWVOICEFILE_TO_UI", +}; + +static char *gszcall_error_msg[IDS_CALL_MAX] = { + "IDS_CALL_POP_CALL_IS_DIVERTED", + "IDS_CALL_POP_CALLFAILED", + "IDS_CALL_POP_CALLING_EMERG_ONLY", + "IDS_CALL_POP_CALLNOTCALLOWED", + "IDS_CALL_POP_CAUSE_WRONG_NUMBER", + "IDS_CALL_POP_CHANGEOFFLINEMODETOCALL", + "IDS_CALL_POP_DTMFSENDING_FAIL", + "IDS_CALL_POP_FDNCALLONLY", + "IDS_CALL_POP_HOLD_FAILED", + "IDS_CALL_POP_HOLD_NOT_SUPPORTED", + "IDS_CALL_POP_INCOMPLETE", + "IDS_CALL_POP_JOIN_FAILED", + "IDS_CALL_POP_JOIN_NOT_SUPPORTED", + "IDS_CALL_POP_OPERATION_REFUSED", + "IDS_CALL_POP_PHONE_NOT_INITIALISED", + "IDS_CALL_POP_REJECTED", + "IDS_CALL_POP_SENDING", + "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE", + "IDS_CALL_POP_SPLIT_FAILED", + "IDS_CALL_POP_SPLIT_NOT_SUPPORTED", + "IDS_CALL_POP_SWAP_FAILED", + "IDS_CALL_POP_SWAP_NOT_SUPPORTED", + "IDS_CALL_POP_TRANSFER_FAILED", + "IDS_CALL_POP_TRANSFER_NOT_SUPPORTED", + "IDS_CALL_POP_UNABLE_TO_RETRIEVE", + "IDS_CALL_POP_UNAVAILABLE", + "IDS_CALL_POP_UNHOLD_NOT_SUPPORTED", + "IDS_CALL_POP_VOICE_CALL_IS_NOT_ALLOWED_DURING_VIDEO_CALL", + "IDS_CALL_POP_WAITING_ACTIVE", + "IDS_CALL_BODY_CALLENDED", + "Invalid DTMF", + "Sent" +}; + +static int __vcui_launch_ciss(const char *number); +static void __vcui_cache_flush_set(Evas *e); +static void __vcui_init_view_register_function(vcui_app_call_data_t *app_data, vcui_app_call_view_id_t view_id, voice_call_view_data_t *(*view_new) ()); +static int __vcui_app_create(void *data); +static int __vcui_app_pause(void *data); +static int __vcui_app_reset(bundle *kb, void *data); +static int __vcui_app_resume(void *data); +static int __vcui_app_terminate(void *data); +static void __vcui_fade_out_cb_routine(void); +static int __vcui_lang_changed_cb(void *data); +static int __vcui_low_mem_cb(void *data); +static int __vcui_low_bat_cb(void *data); +static int __vcui_rotate_cb(enum appcore_rm m, void *data); +static void __vcui_init(vcui_app_call_data_t *ad); +static void __vcui_app_callback(int event, void *pdata, void *puser_data); + +#ifdef SIGNAL_HANDLER +/** +* This function serves as the signal handler function for the SIGSEGV Signal +* +* @return nothing +* @param[in] signal_no Signal Number +* @param[in] signal_info Information associated with the generated signal +* @param[in] signal_context Signal Context Info +*/ +static void __vcui_exit_handler(void) +{ + printf("\n __vcui_app_exit_handler\n"); + /*syslog (LOG_INFO, "[VOICE-CALL] __vcui_app_exit_handler\n"); */ +} + +/** +* This function serves as the signal handler function for the SIGSEGV Signal +* +* @return nothing +* @param[in] signal_no Signal Number +* @param[in] signal_info Information associated with the generated signal +* @param[in] signal_context Signal Context Info +*/ +static void __vcui_sigsegv_handler(int signal_no) +{ + int i = 0; + + CALL_UI_DEBUG("SISEGV Received, Signal Number: :%d \n", signal_no); + + vcall_engine_force_reset(); + __vcui_fade_out_cb_routine(); + + for (i = 0; i < VCUI_SIG_NUM; i++) { + sigaction(vcui_app_sig_to_handle[i], &(vcui_app_sigoldact[i]), NULL); + } + + raise(signal_no); /*raise signal intentionally (pass the same signal) */ +} + +/** +* This function registers a user space signal handler for the signal SIGSEGV (Signal #11) +* +* @return nothing +*/ +static void __vcui_register_sigsegv_handler() +{ + CALL_UI_DEBUG(".."); + + int i = 0; + vcui_app_sigact.sa_flags = SA_NOCLDSTOP; + vcui_app_sigact.sa_handler = (void *)__vcui_sigsegv_handler; + sigemptyset(&vcui_app_sigact.sa_mask); + + for (; i < VCUI_SIG_NUM; i++) { + sigaction(vcui_app_sig_to_handle[i], &vcui_app_sigact, &(vcui_app_sigoldact[i])); + } + +} +#endif + +static int __vcui_launch_ciss(const char *number) +{ + bundle *kb; + + CALL_UI_DEBUG("number(%s)"); + kb = bundle_create(); + bundle_add(kb, "CISS_LAUNCHING_MODE", CISS_MODE_OPT); + bundle_add(kb, "CISS_REQ_STRING", number); + aul_launch_app(CISS_AUL_CMD, kb); + bundle_free(kb); + return VC_NO_ERROR; +} + +static int __vcui_app_create(void *data) +{ + CALL_UI_DEBUG("__vcui_app_create().."); + CALL_UI_KPI("__vcui_app_create start"); + vcui_app_call_data_t *ad = data; + + elm_theme_extension_add(NULL, CALL_THEME); + + CALL_UI_KPI("_vcui_app_win_create_main start"); + ad->win_main = (Evas_Object *)_vcui_app_win_create_main(ad, PACKAGE); + CALL_UI_KPI("_vcui_app_win_create_main done"); + if (ad->win_main == NULL) { + CALL_UI_DEBUG("ERROR"); + return VC_ERROR; + } + + UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE); + + __vcui_hide_main_ui_set_flag(); + + ad->evas = evas_object_evas_get(ad->win_main); + ad->scale_factor = elm_config_scale_get(); + + __vcui_cache_flush_set(ad->evas); + + ecore_init(); + ecore_x_init(NULL); + _vcui_app_win_key_grab(ad); + + _vcui_view_common_timer_text_init(); + + _vcui_app_win_set_noti_type(EINA_TRUE); + + /* add system event callback */ + appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, __vcui_lang_changed_cb, ad); + appcore_set_event_callback(APPCORE_EVENT_LOW_MEMORY, __vcui_low_mem_cb, NULL); + appcore_set_event_callback(APPCORE_EVENT_LOW_BATTERY, __vcui_low_bat_cb, NULL); + + CALL_UI_KPI("appcore_set_rotation_cb start"); + appcore_set_rotation_cb(__vcui_rotate_cb, ad); + CALL_UI_KPI("appcore_set_rotation_cb done"); + +#ifdef SIGNAL_HANDLER + __vcui_register_sigsegv_handler(); + atexit(__vcui_exit_handler); +#endif + + /* + ** Requested by Inpyo Kang + ** This is temp fix for email UG bs proglem.. must be removed later. + */ + elm_config_preferred_engine_set("opengl-x11"); + + CALL_UI_KPI("__vcui_app_create done"); + return VC_NO_ERROR; +} + +static int __vcui_app_pause(void *data) +{ + CALL_UI_DEBUG("__vcui_app_pause().."); + + return VC_NO_ERROR; +} + +static int __vcui_app_reset(bundle *kb, void *data) +{ +/* +#aul_test launch org.tizen.call launch-type "MO" number "01030011234" +#aul_test launch org.tizen.call launch-type "MT" number "01030011234" handle "1" clicause "1" fwded "1" activeline "1" +#aul_test open_content "01030011234" ( /opt/share/miregex/phonenum.uri) +*/ + CALL_UI_DEBUG("__vcui_app_reset().."); + CALL_UI_KPI("__vcui_app_reset start"); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + + const char *launch_type = NULL; + const char *mime_type = NULL; + const char *tmp = NULL; + const char *uri_bundle = NULL; + char *telnum = NULL; + +#ifdef _RESET_OPEN_APP_ + { + launch_type = bundle_get_val(kb, "__AUL_CMD__"); + if (launch_type != NULL) { + CALL_UI_DEBUG("launch type: [%s]", launch_type); + if (!strncmp(launch_type, "OPEN_APP", 8)) { + elm_win_raise(ad->win_main); + return; + } + } + } +#endif + + /* mime content based AUL */ + mime_type = bundle_get_val(kb, AUL_K_MIME_TYPE); + if (mime_type != NULL) { + CALL_UI_DEBUG("mime_type: [%s]", mime_type); + if (strncmp(mime_type, "phonenum.uri", 12) == 0 || strncmp(mime_type, "tel.uri", 7) == 0) { + tmp = bundle_get_val(kb, AUL_K_MIME_CONTENT); + if (tmp == NULL) { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + CALL_UI_DEBUG("AUL_K_MIME_CONTENT: [%s]", tmp); + if (strncmp(tmp, "tel:", 4) == 0) { + telnum = (char *)tmp + 4; + } else { + telnum = (char *)tmp; + } + + CALL_UI_DEBUG("number: [%s]", telnum); + + vcui_call_mo_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", telnum); + vcall_engine_process_normal_call(call_data.call_number, call_data.ct_index, EINA_FALSE); + + return VC_NO_ERROR; + } else { + CALL_UI_DEBUG("wrong mime type!!"); + elm_exit(); + return VC_NO_ERROR; + } + } + + uri_bundle = (const char *)appsvc_get_uri(kb); + if (uri_bundle != NULL) { + CALL_UI_DEBUG("tmp: [%s]", uri_bundle); + if (strncmp(uri_bundle, "tel:", 4) == 0) { + telnum = (char *)uri_bundle + 4; + CALL_UI_DEBUG("number: [%s]", telnum); + + tmp = (char *)appsvc_get_data(kb, "calltype"); + + if (tmp) { + CALL_UI_DEBUG("calltype: [%s]", tmp); + if (!strncmp(tmp, "EMERGENCY", 9)) { + vcui_call_ecc_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", telnum); + vcall_engine_process_emergency_call(call_data.call_number); + } else { + CALL_UI_DEBUG("wrong calltype!"); + elm_exit(); + return VC_ERROR; + } + } else { + vcui_call_mo_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", telnum); + + tmp = (char *)appsvc_get_data(kb, "ctindex"); + if (tmp) { + CALL_UI_DEBUG("ctindex: [%s]", tmp); + call_data.ct_index = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + call_data.ct_index = -1; + } + + if ((vcall_engine_check_incall_ss_string(call_data.call_number) == EINA_TRUE) && (_vcui_doc_get_all_call_data_count() >= 1)) { + vcall_engine_process_incall_ss(call_data.call_number); + _vcui_view_auto_change(); + } else if (vcall_engine_check_ss_string(call_data.call_number) == EINA_TRUE) { + __vcui_launch_ciss(call_data.call_number); + if (_vcui_doc_get_all_call_data_count() == 0) + elm_exit(); + return VC_NO_ERROR; + } else { + vcall_engine_process_normal_call(call_data.call_number, call_data.ct_index, EINA_FALSE); + } + } + + return VC_NO_ERROR; + } else { + CALL_UI_DEBUG("wrong type!"); + elm_exit(); + return VC_NO_ERROR; + } + } + + /* AUL */ + launch_type = bundle_get_val(kb, "launch-type"); + if (launch_type != NULL) { + CALL_UI_DEBUG("launch type: [%s]", launch_type); + if (!strncmp(launch_type, "MO", 2)) { + + if (g_avoid_multi_setup == EINA_TRUE) { + CALL_UI_DEBUG("Avoid multi touch setup"); + return VC_NO_ERROR; + } + + ecore_timer_add(3.5, __vcui_avoid_multi_setup_timer_cb, ad); + g_avoid_multi_setup = EINA_TRUE; + + vcui_call_mo_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + + tmp = bundle_get_val(kb, "number"); + if (tmp) { + CALL_UI_DEBUG("number: [%s]", tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tmp); + + tmp = bundle_get_val(kb, "ctindex"); + if (tmp) { + CALL_UI_DEBUG("ctindex: [%s]", tmp); + call_data.ct_index = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + call_data.ct_index = -1; + } + + if ((vcall_engine_check_incall_ss_string(call_data.call_number) == EINA_TRUE) && (_vcui_doc_get_all_call_data_count() >= 1)) { + vcall_engine_process_incall_ss(call_data.call_number); + _vcui_view_auto_change(); + } else if (vcall_engine_check_ss_string(call_data.call_number) == EINA_TRUE) { + __vcui_launch_ciss(call_data.call_number); + if (_vcui_doc_get_all_call_data_count() == 0) + elm_exit(); + return VC_NO_ERROR; + } else { + vcall_engine_process_normal_call(call_data.call_number, call_data.ct_index, EINA_FALSE); + } + } else if (!strncmp(launch_type, "MT", 2)) { + vcui_call_mt_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + + tmp = bundle_get_val(kb, "handle"); + if (tmp) { + CALL_UI_DEBUG("handle: [%s]", tmp); + call_data.call_handle = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + tmp = bundle_get_val(kb, "calltype"); + if (tmp) { + CALL_UI_DEBUG("calltype: [%s]", tmp); + call_data.call_type = atoi(tmp); + } else { + CALL_UI_DEBUG("calltype is NULL but NOT mendatory"); + call_data.call_type = 0; + } + + tmp = bundle_get_val(kb, "cliindicator"); + if (tmp) { + CALL_UI_DEBUG("cliindicator: [%s]", tmp); + call_data.cli_presentation_indicator = atoi(tmp); + } else { + CALL_UI_DEBUG("cliindicator is NULL but NOT mendatory"); + call_data.cli_presentation_indicator = 0; + } + + tmp = bundle_get_val(kb, "number"); + if (tmp) { + CALL_UI_DEBUG("number: [%s]", tmp); + vcall_engine_util_strcpy(call_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX, tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + /*return VC_NO_ERROR; *//*check clir mt call. */ + } + + tmp = bundle_get_val(kb, "name_mode"); + if (tmp) { + CALL_UI_DEBUG("name_mode: [%s]", tmp); + call_data.calling_name_mode = atoi(tmp); + } else { + CALL_UI_DEBUG("name_mode is NULL but NOT mendatory"); + call_data.calling_name_mode = -1; + } + + tmp = bundle_get_val(kb, "name"); + if (tmp) { + CALL_UI_DEBUG("name: [%s]", tmp); + vcall_engine_util_strcpy(call_data.calling_name, VC_PHONE_NAME_LENGTH_MAX, tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL but NOT mendatory"); + } + + tmp = bundle_get_val(kb, "rdnumber"); + if (tmp) { + CALL_UI_DEBUG("rdnumber: [%s]", tmp); + vcall_engine_util_strcpy(call_data.redirected_number, VC_PHONE_NUMBER_LENGTH_MAX, tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL but NOT mendatory"); + } + + tmp = bundle_get_val(kb, "rdsubaddress"); + if (tmp) { + CALL_UI_DEBUG("rdnumber: [%s]", tmp); + vcall_engine_util_strcpy(call_data.redirected_sub_address, VC_PHONE_SUBADDRESS_LENGTH_MAX, tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL but NOT mendatory"); + } + + tmp = bundle_get_val(kb, "clicause"); + if (tmp) { + CALL_UI_DEBUG("clicause: [%s]", tmp); + call_data.cli_cause = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + tmp = bundle_get_val(kb, "fwded"); + if (tmp) { + CALL_UI_DEBUG("fwded: [%s]", tmp); + call_data.bfwded = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + tmp = bundle_get_val(kb, "activeline"); + if (tmp) { + CALL_UI_DEBUG("activeline: [%s]", tmp); + call_data.active_line = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + vcall_engine_incoming_info_t mtcall_info; + + mtcall_info.call_handle = call_data.call_handle; + mtcall_info.call_type = call_data.call_type; + mtcall_info.cli_presentation_indicator = call_data.cli_presentation_indicator; + vcall_engine_util_strcpy(mtcall_info.call_num, sizeof(mtcall_info.call_num), call_data.call_num); + mtcall_info.calling_name_mode = call_data.calling_name_mode; + vcall_engine_util_strcpy(mtcall_info.calling_name, sizeof(mtcall_info.calling_name), call_data.calling_name); + vcall_engine_util_strcpy(mtcall_info.redirected_number, sizeof(mtcall_info.redirected_number), call_data.redirected_number); + vcall_engine_util_strcpy(mtcall_info.redirected_sub_address, sizeof(mtcall_info.redirected_sub_address), call_data.redirected_sub_address); + mtcall_info.cli_cause = call_data.cli_cause; + mtcall_info.bfwded = call_data.bfwded; + mtcall_info.active_line = call_data.active_line; + + vcall_engine_process_incoming_call(&mtcall_info); + } else if (!strncmp(launch_type, "EMERGENCY", 9)) { + vcui_call_ecc_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + + tmp = bundle_get_val(kb, "number"); + if (tmp) { + CALL_UI_DEBUG("number: [%s]", tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + } + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tmp); + vcall_engine_process_emergency_call(call_data.call_number); + } else if (!strncmp(launch_type, "SATSETUPCALL", 12)) { + vcui_call_sat_data_t sat_setup_call_info; + memset(&sat_setup_call_info, 0, sizeof(sat_setup_call_info)); + + tmp = bundle_get_val(kb, "cmd_id"); + if (tmp) { + CALL_UI_DEBUG("cmd_id: [%s]", tmp); + sat_setup_call_info.command_id = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + tmp = bundle_get_val(kb, "cmd_qual"); + if (tmp) { + CALL_UI_DEBUG("cmd_qual: [%s]", tmp); + sat_setup_call_info.command_qualifier = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + tmp = bundle_get_val(kb, "disp_text"); + if (tmp) { + CALL_UI_DEBUG("disp_text: [%s]", tmp); + vcall_engine_util_strcpy(sat_setup_call_info.disp_text, sizeof(sat_setup_call_info.disp_text), tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + /*elm_exit(); + return VC_NO_ERROR; */ + } + + tmp = bundle_get_val(kb, "call_num"); + if (tmp) { + CALL_UI_DEBUG("call_num: [%s]", tmp); + vcall_engine_util_strcpy(sat_setup_call_info.call_num, sizeof(sat_setup_call_info.call_num), tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + tmp = bundle_get_val(kb, "dur"); + if (tmp) { + CALL_UI_DEBUG("dur: [%s]", tmp); + sat_setup_call_info.duration = atoi(tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + elm_exit(); + return VC_NO_ERROR; + } + + vcall_engine_sat_setup_call_info_t sat_setup_data; + memset(&sat_setup_data, 0, sizeof(sat_setup_data)); + sat_setup_data.command_id = sat_setup_call_info.command_id; + sat_setup_data.command_qualifier = sat_setup_call_info.command_qualifier; + sat_setup_data.duration = sat_setup_call_info.duration; + memcpy(sat_setup_data.disp_text, sat_setup_call_info.disp_text, sizeof(sat_setup_data.disp_text)); + memcpy(sat_setup_data.call_num, sat_setup_call_info.call_num, VC_PHONE_NUMBER_LENGTH_MAX); + + vcall_engine_process_sat_setup_call(&sat_setup_data); + } else if (!strncmp(launch_type, "ECCTEST", 7)) { + vcui_call_ecc_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + vcall_engine_process_emergency_call_test(call_data.call_number); + } else if (!strncmp(launch_type, "DOWNLOADCALL", 12)) { + vcui_call_mo_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + + tmp = bundle_get_val(kb, "number"); + if (tmp) { + CALL_UI_DEBUG("number: [%s]", tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + } + + if (tmp != NULL) { + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tmp); + } else { + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", "116"); + } + vcall_engine_util_strcpy(call_data.call_number, sizeof(call_data.call_number), tmp); + vcall_engine_process_normal_call(call_data.call_number, call_data.ct_index, EINA_TRUE); + } else if (!strncmp(launch_type, "CALL_COMMAND", 12)) { + vcui_call_mo_data_t call_data; + memset(&call_data, 0, sizeof(call_data)); + + tmp = bundle_get_val(kb, "value"); + if (tmp) { + CALL_UI_DEBUG("number: [%s]", tmp); + } else { + CALL_UI_DEBUG("bundle val is NULL"); + } + + if (!strncmp(tmp, "REJECT_MT", 9)) { + vcall_engine_reject_call(); + } /* If need to add more command, add here. */ + } else { + CALL_UI_DEBUG("unknown launch type"); + } + CALL_UI_KPI("__vcui_app_reset done"); + return VC_NO_ERROR; + } + + CALL_UI_DEBUG("bundle data is wrong!!"); + elm_exit(); + return VC_NO_ERROR; +} + +static int __vcui_app_resume(void *data) +{ + CALL_UI_DEBUG("__vcui_app_resume().."); + + return VC_NO_ERROR; +} + +static int __vcui_app_terminate(void *data) +{ + CALL_UI_DEBUG("__vcui_app_terminate().."); + + if (_vcui_doc_get_all_call_data_count() >= 1) { + CALL_UI_DEBUG("WARNING!! call exists. abnormal terminate!!"); + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_CALLS); + vcall_engine_set_to_default(); + } + + __vcui_fade_out_cb_routine(); + return VC_NO_ERROR; +} + +static void __vcui_cache_flush_set(Evas *e) +{ +#ifdef _CACHE_FLUSH_ + evas_image_cache_set(e, 4096 * 1024); + evas_font_cache_set(e, 512 * 1024); + + edje_file_cache_set(0); + edje_collection_cache_set(0); +#endif +} + +static void __vcui_init_view_register_function(vcui_app_call_data_t *app_data, vcui_app_call_view_id_t view_id, voice_call_view_data_t *(*view_new) ()) +{ + app_data->func_new[view_id] = view_new; +} + +void _vcui_response_volume(int vol_alert_type, int vol_level) +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + + if (vol_alert_type == VCUI_VOL_VOICE) { + ad->voice_vol_val = vol_level; + _vcui_set_volume(ad->vol_key_status); + } else if (vol_alert_type == VCUI_VOL_HEADSET) { + ad->bt_vol_val = vol_level; + _vcui_set_volume(ad->vol_key_status); + } else { + CALL_UI_DEBUG("ERROR"); + } +} + +void _vcui_set_volume(int key_status) +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + + if (_vcui_doc_get_all_call_data_count() == 0) { + CALL_UI_DEBUG("ignore it"); + return; + } + + if (ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW) { + int err_code = 0; + int settings_sound_status = EINA_FALSE; + + err_code = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &settings_sound_status); + if (settings_sound_status == EINA_FALSE) { + CALL_UI_DEBUG("ringtone vol is ignored in sound off status."); + return; + } + + if (ad->bmute_ringtone == EINA_TRUE) { + CALL_UI_DEBUG("during mute ringtone, vol will not changed"); + return; + } + + if (ad->ringtone_val < RINGTONE_MIN) { + int vol_level = vcall_engine_get_volume_level(VCALL_ENGINE_VOL_TYPE_RINGTONE); + + if ((vol_level < RINGTONE_MIN) || (vol_level > RINGTONE_MAX)) { + CALL_UI_DEBUG("ERROR : ringtone vol:[%d]", vol_level); + return; + } + ad->ringtone_val = vol_level; + } + + CALL_UI_DEBUG("RINGTONE : Set Volume"); + if (key_status == VAL_VOL_DOWN && ad->ringtone_val > RINGTONE_MIN) { + ad->ringtone_val--; + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_RINGTONE, ad->ringtone_val); + } else if (key_status == VAL_VOL_UP && ad->ringtone_val < RINGTONE_MAX) { + ad->ringtone_val++; + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_RINGTONE, ad->ringtone_val); + } + _vcui_view_popup_vol_ringtone(ad->ringtone_val); + } else if (ad->headset_status == EINA_TRUE) { + if (ad->bt_vol_val < BT_VOL_MIN) { + CALL_UI_DEBUG("BT VOL : Get Volume"); + ad->vol_key_status = key_status; + ad->bt_vol_val = vcall_engine_get_volume_level(VCALL_ENGINE_VOL_TYPE_HEADSET); + return; + } + + CALL_UI_DEBUG("BT VOL : Set Volume"); + if (key_status == VAL_VOL_DOWN && ad->bt_vol_val > BT_VOL_MIN) { /*Key Down */ + ad->bt_vol_val--; + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_HEADSET, ad->bt_vol_val); + } else if (key_status == VAL_VOL_UP && ad->bt_vol_val < BT_VOL_MAX) { /*Key Up */ + ad->bt_vol_val++; + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_HEADSET, ad->bt_vol_val); + } + _vcui_view_popup_vol_bt(ad->bt_vol_val); + } else { + CALL_UI_DEBUG("TAPI VOL : Get Volume"); + ad->vol_key_status = key_status; + ad->voice_vol_val = vcall_engine_get_volume_level(VCALL_ENGINE_VOL_TYPE_VOICE); + + CALL_UI_DEBUG("TAPI VOL : Set Volume"); + if (key_status == VAL_VOL_DOWN && ad->voice_vol_val > VOICE_VOL_MIN) { /*Key Down */ + ad->voice_vol_val--; + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_VOICE, ad->voice_vol_val); + } else if (key_status == VAL_VOL_UP && ad->voice_vol_val < VOICE_VOL_MAX) { /*Key Up */ + ad->voice_vol_val++; + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_VOICE, ad->voice_vol_val); + } + _vcui_view_popup_vol_voice(ad->voice_vol_val); + } + +} + +static void __vcui_fade_out_cb_routine() +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + + if (ad->child_is == 1) { + /*system("killall dialer"); */ + } + if (ad->disp && ad->win) { + utilx_ungrab_key(ad->disp, ad->win, KEY_VOLUMEUP); + utilx_ungrab_key(ad->disp, ad->win, KEY_VOLUMEDOWN); + utilx_ungrab_key(ad->disp, ad->win, KEY_SELECT); + } + + if (ad->focus_in) { + ecore_event_handler_del(ad->focus_in); + ad->focus_in = NULL; + } + if (ad->focus_out) { + ecore_event_handler_del(ad->focus_out); + ad->focus_out = NULL; + } + + _vcui_doc_remove_all_call_data(); + vcall_engine_device_control_lcd_state(VC_LCD_ON_UNLOCK); + _vcui_view_common_timer_destroy(); +} + +static int __vcui_lang_changed_cb(void *data) +{ + CALL_UI_DEBUG(".."); + + _vcui_view_auto_change(); + _vcui_view_quickpanel_change(); + + return VC_NO_ERROR; +} + +static int __vcui_low_mem_cb(void *data) +{ + CALL_UI_DEBUG(".."); + + return VC_NO_ERROR; +} + +static int __vcui_low_bat_cb(void *data) +{ + CALL_UI_DEBUG(".."); + + return VC_NO_ERROR; +} + +static int __vcui_get_rotate_angle(enum appcore_rm rotate_mode) +{ + CALL_UI_DEBUG(".."); + int rotate_angle; + if (APPCORE_RM_UNKNOWN == rotate_mode) { + appcore_get_rotation_state(&rotate_mode); + } + + switch (rotate_mode) { + case APPCORE_RM_PORTRAIT_NORMAL: + /**< Portrait mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_PORTRAIT_NORMAL"); + rotate_angle = 0; + break; + case APPCORE_RM_PORTRAIT_REVERSE: + /**< Portrait upside down mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_PORTRAIT_REVERSE"); + rotate_angle = 180; + break; + case APPCORE_RM_LANDSCAPE_NORMAL: + /**< Left handed landscape mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_LANDSCAPE_NORMAL"); + rotate_angle = 270; + break; + case APPCORE_RM_LANDSCAPE_REVERSE: + /**< Right handed landscape mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_LANDSCAPE_REVERSE"); + rotate_angle = 90; + break; + default: + rotate_angle = -1; + break; + } + + return rotate_angle; +} + +static void __vcui_ug_handle_rotate_event(const int rotate_angle, void *data) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + + switch (rotate_angle) { + case 0: + /**< Portrait mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_PORTRAIT_NORMAL"); + ug_send_event(UG_EVENT_ROTATE_PORTRAIT); + break; + case 180: + /**< Portrait upside down mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_PORTRAIT_REVERSE"); + ug_send_event(UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN); + break; + case 270: + /**< Left handed landscape mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_LANDSCAPE_NORMAL"); + ug_send_event(UG_EVENT_ROTATE_LANDSCAPE); + break; + case 90: + /**< Right handed landscape mode */ + CALL_UI_DEBUG("rotate mode is APPCORE_RM_LANDSCAPE_REVERSE"); + ug_send_event(UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN); + break; + default: + break; + } + if ((rotate_angle >= 0) + && (ad->contact_ug == NULL)) { + elm_win_rotation_with_resize_set(ad->win_main, rotate_angle); + } +} + +#ifdef __LANDSCAPE_MODE_ +static Eina_Bool __vcui_handle_rotate_evnt_idle_cb(void *data) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + + if (ad == NULL) + return EINA_FALSE; + + CALL_UI_DEBUG("Rotate on ad->view_top[%d]", ad->view_top); + _vcui_view_change(ad->view_top, 0, NULL, NULL); + return ECORE_CALLBACK_CANCEL; +} + +static void __vcui_handle_rotate_event(const int rotate_angle, void *data) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + + if (ad == NULL) { + CALL_UI_DEBUG("ad is NULL"); + return; + } + + if (0 == rotate_angle || 180 == rotate_angle || 270 == rotate_angle || 90 == rotate_angle) { + ad->rotate_angle = rotate_angle; + ecore_idler_add(__vcui_handle_rotate_evnt_idle_cb, ad); + } + return; +} +#endif + +static int __vcui_rotate_cb(enum appcore_rm rotate_mode, void *data) +{ + CALL_UI_DEBUG("__vcui_rotate_cb().."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + int rotate_angle; + if (ad == NULL) { + CALL_UI_DEBUG("ad is NULL"); + return VC_ERROR; + } + + rotate_angle = __vcui_get_rotate_angle(rotate_mode); + CALL_UI_DEBUG("rotate_angle [%d]", rotate_angle); + if (ad->contact_ug) + { + __vcui_ug_handle_rotate_event(rotate_angle, ad); + } +#ifdef __LANDSCAPE_MODE_ + else { + /* Implement the landscape implementation here */ + __vcui_handle_rotate_event(rotate_angle, ad); + } +#endif + return VC_NO_ERROR; +} + +static void __vcui_init(vcui_app_call_data_t *ad) +{ + CALL_UI_KPI("g_type_init start"); + g_type_init(); + CALL_UI_KPI("g_type_init done"); + _vcui_doc_data_init(); + _vcui_view_common_init(); + vcall_engine_init((vcall_engine_app_cb) __vcui_app_callback, ad); + + CALL_UI_KPI("__vcui_init_view_register_function for all views start"); + __vcui_init_view_register_function(ad, VIEW_DIALLING_VIEW, _vcui_view_dialing_new); + __vcui_init_view_register_function(ad, VIEW_INCOMING_LOCK_VIEW, _vcui_view_incoming_lock_new); + __vcui_init_view_register_function(ad, VIEW_INCALL_ONECALL_VIEW, _vc_ui_view_single_call_new); + __vcui_init_view_register_function(ad, VIEW_INCALL_MULTICALL_SPLIT_VIEW, _vcui_view_multi_call_split_new); + __vcui_init_view_register_function(ad, VIEW_INCALL_MULTICALL_CONF_VIEW, _vcui_view_multi_call_conf_new); + __vcui_init_view_register_function(ad, VIEW_INCALL_MULTICALL_LIST_VIEW, _vcui_view_multi_call_list_new); + __vcui_init_view_register_function(ad, VIEW_ENDCALL_VIEW, _vcui_view_callend_new); + __vcui_init_view_register_function(ad, VIEW_QUICKPANEL_VIEW, _vcui_view_qp_new); + CALL_UI_KPI("__vcui_init_view_register_function for all views done"); + + ad->view_top = -1; + ad->view_before_top = -1; + ad->headset_status = (int)_vcui_is_headset_conected(); + ad->speaker_status = EINA_FALSE; + ad->mute_status = EINA_FALSE; + ad->child_is = -1; + ad->show_flag = WIN_HIDE; + ad->ringtone_val = -1; + ad->voice_vol_val = -1; + ad->bt_vol_val = -1; + ad->call_end_type = CALL_END_TYPE_NONE; + ad->wbamr_status= EINA_FALSE; +} + +char *_vcui_get_endcause_string(int end_cause, char *data) +{ + char *string_id = NULL; + CALL_UI_DEBUG("end type : %d", end_cause); + switch (end_cause) { + case VC_ENGINE_ENDCAUSE_USER_UNAVAILABLE: + string_id = _("IDS_CALL_BODY_CALLED_PARTY_UNAVAILABLE"); + break; + case VC_ENGINE_ENDCAUSE_UNASSIGNED_NUMBER: + string_id = _("IDS_CALL_BODY_NUMBER_DOES_NOT_EXIST"); + break; + case VC_ENGINE_ENDCAUSE_USER_DOESNOT_RESPOND: + string_id = _("IDS_CALL_BODY_NO_ANSWER"); + break; + case VC_ENGINE_ENDCAUSE_CALL_DISCONNECTED: + string_id = _("IDS_CALL_BODY_DISCONNECTED"); + break; + case VC_ENGINE_ENDCAUSE_CALL_ENDED: + string_id = _("IDS_CALL_BODY_CALLENDED"); + break; + case VC_ENGINE_ENDCAUSE_CALL_SERVICE_NOT_ALLOWED: + string_id = _("IDS_CALL_POP_SERVICE_NOT_ALLOWED"); + break; + case VC_ENGINE_ENDCAUSE_CALL_BARRED: + string_id = _("IDS_CALL_POP_CALL_BARRED"); + break; + case VC_ENGINE_ENDCAUSE_NO_SERVICE: + string_id = _("IDS_CALL_POP_NOSERVICE"); + break; + case VC_ENGINE_ENDCAUSE_NW_BUSY: + string_id = _("IDS_CALL_POP_NETWORKBUSY"); + break; + case VC_ENGINE_ENDCAUSE_NW_FAILED: + string_id = _("IDS_CALL_POP_NETWORK_UNAVAILABLE"); + break; + case VC_ENGINE_ENDCAUSE_SERVICE_TEMP_UNAVAILABLE: + string_id = _("IDS_CALL_BODY_SERVICE_UNAVAILABLE"); + break; + case VC_ENGINE_ENDCAUSE_NO_ANSWER: + string_id = _("IDS_CALL_BODY_NO_ANSWER"); + break; + case VC_ENGINE_ENDCAUSE_NO_CREDIT: + string_id = _("IDS_CALL_POP_NOCREDITLEFT"); + break; + case VC_ENGINE_ENDCAUSE_REJECTED: + string_id = _("IDS_CALL_BODY_CALL_REJECTED"); + break; + case VC_ENGINE_ENDCAUSE_USER_BUSY: + string_id = _("IDS_CALL_POP_USER_BUSY"); + break; + case VC_ENGINE_ENDCAUSE_WRONG_GROUP: + string_id = _("IDS_CALL_POP_WRONG_GROUP"); + break; + case VC_ENGINE_ENDCAUSE_INVALID_NUMBER_FORMAT: + string_id = _("IDS_CALL_POP_CAUSE_WRONG_NUMBER"); + break; + case VC_ENGINE_ENDCAUSE_CALL_NOT_ALLOWED: + string_id = _("IDS_CALL_POP_CALLNOTCALLOWED"); + break; + case VC_ENGINE_ENDCAUSE_TAPI_ERROR: + string_id = _("IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"); + break; + case VC_ENGINE_ENDCAUSE_CALL_FAILED: + string_id = _("IDS_CALL_POP_CALLFAILED"); + break; + case VC_ENGINE_ENDCAUSE_NUMBER_CHANGED: + string_id = _("IDS_CALL_BODY_NUMBER_CHANGED"); + break; + case VC_ENGINE_ENDCAUSE_IMEI_REJECTED: + string_id = _("IDS_CALL_POP_VERIFY_SIM_OR_INSERT_VALID_SIM"); + break; + case VC_ENGINE_ENDCAUSE_NO_USER_RESPONDING: /**< User not responding */ + case VC_ENGINE_ENDCAUSE_USER_ALERTING_NO_ANSWER: /**< User Alerting No Answer */ + default: + string_id = _("IDS_CALL_BODY_CALLENDED"); + break; + } + vcall_engine_util_strcpy(data, VC_DATA_LENGTH_MAX, string_id); + return data; +} + +void _vcui_cache_flush() +{ +#ifdef _CACHE_FLUSH_ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + + evas_font_cache_flush(ad->evas); + evas_image_cache_flush(ad->evas); + + edje_file_cache_flush(); + edje_collection_cache_flush(); + + evas_render_idle_flush(ad->evas); +#endif +} + +int _vcui_is_idle_lock() +{ + int lock_state; + int ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &(lock_state)); + if (ret == -1) { + CALL_UI_DEBUG("Cannot get vconf key"); + } + + if (lock_state == VCONFKEY_IDLE_LOCK) + return CALL_LOCK; + else + return CALL_UNLOCK; +} + +unsigned long _vcui_get_diff_now(time_t start_time) +{ + time_t curr_time; + unsigned long call_duration_in_sec = 0; + curr_time = time(&curr_time); + call_duration_in_sec = curr_time - start_time; + return call_duration_in_sec; +} + +gboolean _vcui_is_gcf_mode(void) +{ + gboolean bgcf_status = EINA_FALSE; + int ret = -1; + + ret = vconf_get_int(VCONFKEY_ADMIN_GCF_TEST, &bgcf_status); + if (0 == ret) { + CALL_UI_DEBUG("bgcf_status = [%d]\n", bgcf_status); + } else { + CALL_UI_DEBUG("vconf_get_int failed..[%d]\n", ret); + } + + return bgcf_status; +} + +gboolean _vcui_is_headset_conected(void) +{ + int bt_connected = VCONFKEY_BT_DEVICE_NONE; + Eina_Bool ret = EINA_FALSE; + + ret = vconf_get_int(VCONFKEY_BT_DEVICE, &bt_connected); + if (0 == ret) { + CALL_UI_DEBUG("bt_connected = [0x%x] ", bt_connected); + } else { + CALL_UI_DEBUG("vconf_get_int failed..[%d]", ret); + } + + return (VCONFKEY_BT_DEVICE_HEADSET_CONNECTED == (bt_connected & VCONFKEY_BT_DEVICE_HEADSET_CONNECTED)) ? EINA_TRUE : EINA_FALSE; +} + +gboolean _vcui_is_headset_switch_on(void) +{ + int bt_status = VCONFKEY_BT_STATUS_OFF; + Eina_Bool ret = EINA_FALSE; + + ret = vconf_get_int(VCONFKEY_BT_STATUS, &bt_status); + if (0 == ret) { + CALL_UI_DEBUG("bt_status = [0x%x] ", bt_status); + } else { + CALL_UI_DEBUG("vconf_get_int failed..[%d]", ret); + } + + return (VCONFKEY_BT_STATUS_ON == (bt_status & VCONFKEY_BT_STATUS_ON)) ? EINA_TRUE : EINA_FALSE; +} + +gboolean _vcui_is_answering_mode_on(void) +{ + gboolean bAnswerMode = EINA_FALSE; + Eina_Bool ret = EINA_FALSE; + + ret = vconf_get_bool(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, &bAnswerMode); + if (0 == ret) { + CALL_UI_DEBUG("bAnswerMode = [%d] \n", bAnswerMode); + } else { + CALL_UI_DEBUG("vconf_get_int failed..[%d]\n", ret); + } + + return bAnswerMode; +} + +gboolean _vcui_is_powerkey_mode_on(void) +{ + gboolean bPowerkeyMode = EINA_FALSE; + Eina_Bool ret = EINA_FALSE; + + ret = vconf_get_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, &bPowerkeyMode); + if (0 == ret) { + CALL_UI_DEBUG("bPowerkeyMode = [%d] \n", bPowerkeyMode); + } else { + CALL_UI_DEBUG("vconf_get_int failed..[%d]\n", ret); + } + + return bPowerkeyMode; +} + +gboolean _vcui_is_phonelock_status() +{ + gboolean b_phonelock = EINA_FALSE; + if (!vconf_get_bool(VCONFKEY_SETAPPL_STATE_POWER_ON_LOCK_BOOL, &b_phonelock)) { + CALL_UI_DEBUG("b_phonelock:[%d]", b_phonelock); + return b_phonelock; + } else { + CALL_UI_DEBUG("get VCONFKEY_SETAPPL_STATE_POWER_ON_LOCK_BOOL failed.."); + return EINA_FALSE; + } +} + +void _vcui_add_calllog(int type, call_data_t *data, int boutgoing_end) +{ + CALL_UI_DEBUG("type = [0x%x] ", type); + CTSvalue *plog; + time_t current_time; + int missed_cnt = 0; + + if (data == NULL) + return; + contacts_svc_connect(); + + current_time = time(NULL); + + plog = contacts_svc_value_new(CTS_VALUE_PHONELOG); + contacts_svc_value_set_str(plog, CTS_PLOG_VAL_NUMBER_STR, _vcui_doc_get_call_number(data)); + contacts_svc_value_set_int(plog, CTS_PLOG_VAL_LOG_TIME_INT, (int)current_time); + contacts_svc_value_set_int(plog, CTS_PLOG_VAL_LOG_TYPE_INT, type); + contacts_svc_value_set_int(plog, CTS_PLOG_VAL_RELATED_ID_INT, _vcui_doc_get_contact_index(data)); + + if ((type == CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN) || (type == CTS_PLOG_TYPE_VOICE_REJECT) || (type == CTS_PLOG_TYPE_VOICE_BLOCKED) || (boutgoing_end == EINA_TRUE)) { + contacts_svc_value_set_int(plog, CTS_PLOG_VAL_DURATION_INT, 0); + } else { + contacts_svc_value_set_int(plog, CTS_PLOG_VAL_DURATION_INT, _vcui_get_diff_now(_vcui_doc_get_call_start_time(data))); + } + contacts_svc_insert_phonelog(plog); + + contacts_svc_value_free(plog); + missed_cnt = contacts_svc_count(CTS_GET_UNSEEN_MISSED_CALL); + contacts_svc_disconnect(); + + /* vconf set & quickpanel noti (for missed call) */ + if (type == CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN) { + char szname[255] = { 0, }; + char str_buf[1024] = { 0, }; + int noti_flags = 0; + notification_h noti = NULL; + notification_error_e noti_err = NOTIFICATION_ERROR_NONE; + + if (strlen(_vcui_doc_get_call_display_name(data)) == 0) { + snprintf(szname, sizeof(szname), "%s", _vcui_doc_get_call_number(data)); + } else { + snprintf(szname, sizeof(szname), "%s", _vcui_doc_get_call_display_name(data)); + } + CALL_UI_DEBUG("szname:[%s]", szname); + + if (missed_cnt == 1) { + strncpy(str_buf, _("IDS_CALL_POP_CALLMISSED"), sizeof(str_buf) - 1); + } else { + char *temp = _("IDS_CALL_HEADER_PD_MISSED_CALLS"); + snprintf(str_buf, sizeof(str_buf), temp, missed_cnt); + } + CALL_UI_DEBUG("Notification string :[%s]", str_buf); + + noti = notification_new(NOTIFICATION_TYPE_NOTI, __VCUI_NOTIFICATION_CALL_GROUP_ID, NOTIFICATION_PRIV_ID_NONE); + if (noti == NULL) { + CALL_UI_DEBUG("Fail to notification_new"); + return; + } + + noti_err = notification_set_pkgname(noti, CALL_PKG_NAME); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to noification_set_pkgname %d", noti_err); + } + + noti_err = notification_set_application(noti, DIALER_PKG); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_application : %d", noti_err); + } + + bundle *args = bundle_create(); + + bundle_add(args, "logs", "missed_call"); + noti_err = notification_set_args(noti, args, NULL); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_args : %d", noti_err); + } + bundle_free(args); + + noti_err = notification_set_time(noti, current_time); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_icon : %d", noti_err); + } + + /* Set notification single title*/ + noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, szname, NULL, NOTIFICATION_VARIABLE_TYPE_NONE); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_text(single-title) : %d", noti_err); + } + + /* Set noitification single content*/ + noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, str_buf, NULL, NOTIFICATION_VARIABLE_TYPE_NONE); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_text(single-content) : %d", noti_err); + } + + /* Set notification group title*/ + noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_GROUP_TITLE, str_buf, NULL, NOTIFICATION_VARIABLE_TYPE_NONE); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_text(group-title) : %d", noti_err); + } + + noti_flags = NOTIFICATION_PROP_DISABLE_TICKERNOTI | NOTIFICATION_PROP_DISPLAY_ONLY_SIMMODE; + noti_err = notification_set_property(noti, noti_flags); + if(noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_property : %d", noti_err); + } + + char *file_path = _vcui_doc_get_caller_id_file_path(data); + CALL_UI_DEBUG("data->call_file_path(%s)", file_path); + if ((strcmp(file_path, NOIMG_ICON) == 0) + || (missed_cnt > 1)) { + noti_err = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL, NOTIFY_MISSED_CALL_ICON); + } else { + noti_err = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL, file_path); + } + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_icon : %d", noti_err); + } + noti_err = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, NOTIFY_SUB_MISSED_CALL_ICON); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_icon : %d", noti_err); + } + + noti_err = notification_insert(noti, NULL); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_text_domain"); + } + + noti_err = notification_free(noti); + if (noti_err != NOTIFICATION_ERROR_NONE) { + CALL_UI_DEBUG("Fail to notification_set_text_domain"); + } + } +} + +void _vcui_raise_main_win() +{ + CALL_UI_DEBUG(".."); + + vcui_app_call_data_t *ad = _vcui_get_app_data(); + if (ad == NULL) { + CALL_UI_DEBUG("App data is NULL"); + return; + } + if (ad->win_main == NULL) { + CALL_UI_DEBUG("Main Window is NULL"); + return; + } + + elm_win_activate(ad->win_main); + _vcui_show_main_ui_set_flag(); + /*view_refresh_now(); */ + +} + +int _vcui_check_valid_eo(Evas_Object *eo, char *v_name) +{ + /*CALL_UI_DEBUG("eo addr:[%p], v_name:[%s]", eo, v_name); */ + const char *obj_name = evas_object_name_get(eo); + if (obj_name == NULL) { + CALL_UI_DEBUG("obj_name is NULL!!. eo addr:[%p], v_name:[%s]", eo, v_name); + return VC_ERROR; + } + if (strncmp(obj_name, v_name, strlen(obj_name)) == 0) { + return VC_NO_ERROR; + } else { + CALL_UI_DEBUG("different name !! "); + return VC_ERROR; + } +} + +vcui_app_call_data_t *_vcui_get_app_data() +{ + return &global_ad; +} + +void _vcui_show_main_ui_set_flag() +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + if (ad->show_flag == WIN_HIDE) { + CALL_UI_DEBUG("show_flag : WIN_SHOW"); + evas_object_show(ad->win_main); + ad->show_flag = WIN_SHOW; + } +} + +void __vcui_hide_main_ui_set_flag() +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + CALL_UI_DEBUG("show_flag: WIN_HIDE"); + evas_object_hide(ad->win_main); + ad->show_flag = WIN_HIDE; +} + +Evas_Object *_vcui_load_edj(Evas_Object *parent, const char *file, const char *group) +{ + Evas_Object *eo; + int r; + + eo = elm_layout_add(parent); + if (eo) { + r = elm_layout_file_set(eo, file, group); + if (!r) { + evas_object_del(eo); + CALL_UI_DEBUG("ERROR!!"); + return NULL; + } + + evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, eo); + } + + return eo; +} + +int main(int argc, char *argv[]) +{ + CALL_UI_DEBUG("voice call ui main().."); + + struct appcore_ops ops = { + .create = __vcui_app_create, + .terminate = __vcui_app_terminate, + .pause = __vcui_app_pause, + .resume = __vcui_app_resume, + .reset = __vcui_app_reset, + }; + + memset(&global_ad, 0, sizeof(vcui_app_call_data_t)); + + ops.data = &global_ad; + + CALL_UI_KPI("__vcui_init start"); + __vcui_init(&global_ad); + CALL_UI_KPI("__vcui_init done"); + + appcore_set_i18n(PACKAGE, LOCALEDIR); + + return appcore_efl_main(PACKAGE, &argc, &argv, &ops); +} + +static Eina_Bool __vcui_avoid_multi_setup_timer_cb(void *data) +{ + CALL_UI_DEBUG(".."); + + g_avoid_multi_setup = EINA_FALSE; + + return ECORE_CALLBACK_CANCEL; +} + +static void __vcui_app_callback(int event, void *pdata, void *puser_data) +{ + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)puser_data; + vc_engine_msg_type *msg = (vc_engine_msg_type *)pdata; + + if ((ad == NULL) || (msg == NULL)) { + CALL_UI_DEBUG("ERROR.NULL pointer"); + return; + } + CALL_UI_DEBUG("@@@ event:[%s], view_top:[%d], count:[%d] @@@ \n", gszcall_callback_msg[event], ad->view_top, _vcui_doc_get_all_call_data_count()); + + switch (event) { + case VC_ENGINE_MSG_INCOM_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_LOCK); + + CALL_UI_DEBUG("num:[%s], name:[%s]", msg->incoming.call_num, msg->incoming.call_name); + + call_data_t *call_data = NULL; + call_data = _vcui_doc_allocate_call_data_memory(); + if (call_data == NULL) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } + _vcui_doc_set_call_handle(call_data, msg->incoming.call_handle); + _vcui_doc_set_contact_index(call_data, msg->incoming.contact_index); + _vcui_doc_set_contact_phone_type(call_data, msg->incoming.phone_type); + _vcui_doc_set_birthday_remaining_days(call_data, msg->incoming.bday_remaining_days); + _vcui_doc_set_call_number(call_data, msg->incoming.call_num); + + if (msg->incoming.brestricted == EINA_TRUE) { + if (msg->incoming.bpayphone == EINA_TRUE) { + _vcui_doc_set_call_display_name(call_data, _("Payphone")); + } else { + _vcui_doc_set_call_display_name(call_data, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + } else { + _vcui_doc_set_call_display_name(call_data, msg->incoming.call_name); + } + + if ((strcmp((char *)msg->incoming.call_file_path, "default") == 0) || (strlen((char *)msg->incoming.call_file_path) == 0)) { + _vcui_doc_set_caller_id_file_path(call_data, NOIMG_ICON); + } else { + _vcui_doc_set_caller_id_file_path(call_data, msg->incoming.call_file_path); + } + + if ((strcmp((char *)msg->incoming.call_full_file_path, "default") == 0) || (strlen((char *)msg->incoming.call_full_file_path) == 0)) { + _vcui_doc_set_caller_id_full_file_path(call_data, NOIMG_ICON); + } else { + _vcui_doc_set_caller_id_full_file_path(call_data, msg->incoming.call_full_file_path); + } + _vcui_doc_set_call_status(call_data, NO_STATUS); + _vcui_doc_set_call_type(call_data, CALL_INCOMING); + _vcui_doc_set_auto_reject_status(call_data, msg->incoming.brejected); + + _vcui_doc_set_recent_mt_call_data(call_data); + _vcui_doc_add_call_data(call_data); + + { + /*Auto Reject Check */ + if (EINA_TRUE == msg->incoming.brejected) { + CALL_UI_DEBUG("the call rejected and show reject popup"); + vcall_engine_reject_call(); + _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_BLOCKED, call_data, EINA_FALSE); + + if (_vcui_doc_get_all_call_data_count() > 1) { + _vcui_view_popup_load_reject_call(_vcui_doc_get_call_display_name(call_data), _vcui_doc_get_call_number(call_data), EINA_FALSE); + } else { + _vcui_view_popup_load_reject_call(_vcui_doc_get_call_display_name(call_data), _vcui_doc_get_call_number(call_data), EINA_TRUE); + } + } else { + _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, 0, NULL, NULL); + } + } + } + break; + + case VC_ENGINE_MSG_OUTGOING_TO_UI: + { + call_data_t *call_data = NULL; + call_data = _vcui_doc_allocate_call_data_memory(); + if (call_data == NULL) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } + + _vcui_doc_set_call_handle(call_data, NO_HANDLE); + _vcui_doc_set_contact_index(call_data, msg->outgoing.contact_index); + _vcui_doc_set_contact_phone_type(call_data, msg->outgoing.phone_type); + _vcui_doc_set_birthday_remaining_days(call_data, msg->outgoing.bday_remaining_days); + _vcui_doc_set_call_number(call_data, msg->outgoing.call_num); + _vcui_doc_set_call_display_name(call_data, msg->outgoing.call_name); + + if ((strcmp((char *)msg->outgoing.call_file_path, "default") == 0) || (strlen((char *)msg->outgoing.call_file_path) == 0)) { + _vcui_doc_set_caller_id_file_path(call_data, NOIMG_ICON); + } else { + _vcui_doc_set_caller_id_file_path(call_data, msg->outgoing.call_file_path); + } + + if ((strcmp((char *)msg->outgoing.call_full_file_path, "default") == 0) || (strlen((char *)msg->outgoing.call_full_file_path) == 0)) { + _vcui_doc_set_caller_id_full_file_path(call_data, NOIMG_ICON); + } else { + _vcui_doc_set_caller_id_full_file_path(call_data, msg->outgoing.call_full_file_path); + } + _vcui_doc_set_call_status(call_data, NO_STATUS); + _vcui_doc_set_call_type(call_data, CALL_OUTGOING); + _vcui_doc_set_call_start_time(call_data); + + _vcui_doc_set_recent_mo_call_data(call_data); + } + break; + + case VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_LOCK); + + vc_engine_outgoing_orig_type outgoing_orig = msg->outgoing_orig; + + call_data_t *call_data = _vcui_doc_get_recent_mo_call_data(); + _vcui_doc_set_call_handle(call_data, outgoing_orig.call_handle); + + if (outgoing_orig.bemergency == EINA_TRUE) { + CALL_UI_DEBUG("it is emergency call"); + char *em_name = _("IDS_CALL_POP_EMERGENCY_CALL"); + _vcui_doc_set_call_display_name(call_data, em_name); + _vcui_doc_set_caller_id_file_path(call_data, NOIMG_ICON); + _vcui_doc_set_caller_id_full_file_path(call_data, NOIMG_ICON); + _vcui_doc_set_contact_phone_type(call_data, -1); + _vcui_doc_set_birthday_remaining_days(call_data, -1); + } + + _vcui_doc_add_call_data(call_data); + _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL); + + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + _vcui_view_qp_update_text_status(ad->view_st[VIEW_QUICKPANEL_VIEW], _("IDS_CALL_POP_CALLING")); + } + break; + + case VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI_TEST: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_LOCK); + + vc_engine_outgoing_orig_type outgoing_orig = msg->outgoing_orig; + + call_data_t *call_data = _vcui_doc_get_recent_mo_call_data(); + _vcui_doc_set_call_handle(call_data, 1); + + if (outgoing_orig.bemergency == EINA_TRUE) { + CALL_UI_DEBUG("it is emergency call"); + char *em_name = _("IDS_CALL_POP_EMERGENCY_CALL"); + _vcui_doc_set_call_display_name(call_data, em_name); + _vcui_doc_set_caller_id_file_path(call_data, NOIMG_ICON); + _vcui_doc_set_caller_id_full_file_path(call_data, NOIMG_ICON); + _vcui_doc_set_contact_phone_type(call_data, -1); + _vcui_doc_set_birthday_remaining_days(call_data, -1); + } + + _vcui_doc_add_call_data(call_data); + _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL); + + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + _vcui_view_qp_update_text_status(ad->view_st[VIEW_QUICKPANEL_VIEW], _("IDS_CALL_POP_CALLING")); + } + break; + + case VC_ENGINE_MSG_OUTGOING_ALERT_TO_UI: + { + call_data_t *call_data = _vcui_doc_get_recent_mo_call_data(); + if (_vcui_doc_is_valid_call_data(call_data) == EINA_FALSE) { + CALL_UI_DEBUG("Error. check outgoing_orig msg."); + elm_exit(); + return; + } + + _vcui_view_qp_update_text_status(ad->view_st[VIEW_QUICKPANEL_VIEW], _("IDS_CALL_POP_CALLING")); + } + break; + + case VC_ENGINE_MSG_CONNECTED_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_UNLOCK); + + vc_engine_connected_type connected = msg->connected; + call_data_t *call_data = _vcui_doc_get_call_data_by_handle(connected.call_handle); + if (_vcui_doc_is_valid_call_data(call_data) == EINA_FALSE) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } + _vcui_doc_set_call_status(call_data, CALL_UNHOLD); + _vcui_doc_set_call_handle(call_data, connected.call_handle); + _vcui_doc_set_call_start_time(call_data); + /* When new call connected, if it's multiparty call, always show split1 first. */ + ad->bswapped = EINA_FALSE; + + _vcui_view_auto_change(); + + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + } + break; + + case VC_ENGINE_MSG_NORMAL_END_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_LOCK); + + vc_engine_normal_end_type normal_end = msg->normal_end; + + CALL_UI_DEBUG("end_cause_type:[%d]", normal_end.end_cause_type); + + vcui_app_call_data_t *ad = _vcui_get_app_data(); + time_t start_time; + int call_type = -1; + + call_data_t *call_data = _vcui_doc_get_call_data_by_handle(normal_end.call_handle); + if (_vcui_doc_is_valid_call_data(call_data) == EINA_FALSE) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } + call_type = _vcui_doc_get_call_type(call_data); + CALL_UI_DEBUG("call_type: %d", call_type); + if (call_type == CALL_OUTGOING) { + _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_OUTGOING, call_data, EINA_FALSE); + } else if (call_type == CALL_INCOMING) { + _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_INCOMMING, call_data, EINA_FALSE); + } + start_time = _vcui_doc_get_call_start_time(call_data); + + + if (_vcui_doc_get_all_call_data_count() == 1 && ad->view_top == VIEW_INCALL_ONECALL_VIEW) { + ad->call_end_type = CALL_END_TYPE_SINGLE_CALL; + } + CALL_UI_DEBUG("ad->call_end_type[%d]", ad->call_end_type); + + if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) { + CALL_UI_DEBUG("Show end screen - %d", ad->call_end_type); + _vcui_view_change(VIEW_ENDCALL_VIEW, -1, call_data, NULL); + ad->call_end_type = CALL_END_TYPE_NONE; + CALL_UI_DEBUG("Blink show: end call time"); + _vcui_view_common_call_end_show(start_time, normal_end.end_cause_type); + _vcui_doc_remove_call_data(call_data); + } else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) { + if (_vcui_doc_get_all_call_data_count() == 1) { + ad->call_end_type = CALL_END_TYPE_NONE; + } else if (ad->view_top != VIEW_ENDCALL_VIEW) { + _vcui_view_change(VIEW_ENDCALL_VIEW, -1, call_data, NULL); + _vcui_view_common_call_end_show(start_time, normal_end.end_cause_type); + } + _vcui_doc_remove_call_data(call_data); + } else { + _vcui_doc_remove_call_data(call_data); + _vcui_view_common_call_terminate_or_view_change(); + } + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + } + break; + + case VC_ENGINE_MSG_INCOM_END_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_UNLOCK); + + vc_engine_common_with_handle_type incom_end = msg->incom_end; + + call_data_t *call_data = _vcui_doc_get_call_data_by_handle(incom_end.call_handle); + if (_vcui_doc_is_valid_call_data(call_data) == EINA_FALSE) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } + _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN, call_data, EINA_FALSE); + _vcui_doc_remove_call_data(call_data); + _vcui_view_common_call_terminate_or_view_change(); + } + break; + + case VC_ENGINE_MSG_REJECTED_END_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_UNLOCK); + + vc_engine_common_with_handle_type rejected_end = msg->rejected_end; + + call_data_t *pcall_data = _vcui_doc_get_call_data_by_handle(rejected_end.call_handle); + if (_vcui_doc_is_valid_call_data(pcall_data) == EINA_FALSE) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } + + if (_vcui_doc_get_auto_reject_status(pcall_data) == EINA_TRUE) { + CALL_UI_DEBUG("auto rejected."); + _vcui_doc_remove_call_data(pcall_data); + } else { + _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_REJECT, pcall_data, EINA_FALSE); + _vcui_doc_remove_call_data(pcall_data); + _vcui_view_common_call_terminate_or_view_change(); + } + } + break; + + case VC_ENGINE_MSG_OUTGOING_END_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_UNLOCK); + + vc_engine_outgoing_end_type outgoing_end = msg->outgoing_end; + call_data_t *call_data = _vcui_doc_get_call_data_by_handle(outgoing_end.call_handle); + if (_vcui_doc_is_valid_call_data(call_data) == EINA_FALSE) { + CALL_UI_DEBUG("It is the case which call orig is not received."); + char data[VC_DATA_LENGTH_MAX] = { 0, }; + _vcui_view_popup_load(_vcui_get_endcause_string(outgoing_end.end_cause_type, data), POPUP_TIMEOUT_LONG, EINA_TRUE); + } else { + _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_OUTGOING, call_data, EINA_TRUE); + if (outgoing_end.bauto_redial == EINA_TRUE) { + CALL_UI_DEBUG("bauto_redial is EINA_TRUE"); + _vcui_doc_remove_call_data_from_list(call_data); + } else { + CALL_UI_DEBUG("show the call end screen"); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + if (_vcui_doc_get_all_call_data_count() == 1 && ad->view_top == VIEW_DIALLING_VIEW) { + ad->call_end_type = CALL_END_TYPE_SINGLE_CALL; + _vcui_view_change(VIEW_ENDCALL_VIEW, -1, call_data, NULL); + } + _vcui_doc_remove_call_data(call_data); + } + _vcui_view_common_call_end_show_dialing(outgoing_end.end_cause_type, outgoing_end.bauto_redial); + } + + } + break; + + case VC_ENGINE_MSG_OUTGOING_END_SIGNAL_PLAY_TO_UI: + { + vc_engine_outgoing_end_signal_play_type outgoing_end_signal_play = msg->outgoing_end_signal_play; + call_data_t *call_data = _vcui_doc_get_call_data_by_handle(outgoing_end_signal_play.call_handle); + if (call_data != NULL) { + _vcui_view_dialing_draw_txt_ended(ad->view_st[ad->view_top], outgoing_end_signal_play.end_cause_type); + } else { + CALL_UI_DEBUG("Check it whether call data exists. handle:[%d]", outgoing_end_signal_play.call_handle); + } + } + break; + + case VC_ENGINE_MSG_OUTGOING_ABORTED_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_UNLOCK); + + vc_engine_common_with_handle_type outgoing_aborted = msg->outgoing_aborted; + call_data_t *call_data = _vcui_doc_get_call_data_by_handle(outgoing_aborted.call_handle); + if (call_data == NULL) + call_data = _vcui_doc_get_recent_mo_call_data(); + + if (call_data == NULL) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } + + _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_OUTGOING, call_data, EINA_TRUE); + + _vcui_doc_remove_call_data(call_data); + + _vcui_view_common_call_terminate_or_view_change(); + + } + break; + + case VC_ENGINE_MSG_DTMF_ACK_TO_UI: + { + + vc_engine_dtmf_ack_type dtmf_ack = msg->dtmf_progress; + + if (EINA_FALSE == dtmf_ack.bstatus) { + _vcui_view_popup_unload_progress(ad); + if ((dtmf_ack.string_id != -1) && (dtmf_ack.string_id != IDS_CALL_POP_DTMF_SENT)) { + CALL_UI_DEBUG("load popup window... Start"); + _vcui_view_popup_load(_(gszcall_error_msg[dtmf_ack.string_id]), POPUP_TIMEOUT_LONG, EINA_FALSE); + } + } else { + CALL_UI_DEBUG("display_string:[%s], string_id:[%d]", dtmf_ack.display_string, dtmf_ack.string_id); + if (dtmf_ack.string_id == IDS_CALL_POP_UNAVAILABLE) { /*check for the ID when string is added */ + _vcui_view_load_send_dtmf_popup_with_buttons(_("Send DTMF tones?"), dtmf_ack.display_string); /*add the string */ + } else if (dtmf_ack.string_id == IDS_CALL_POP_SENDING) { + _vcui_view_popup_load_sending_dtmf(_(gszcall_error_msg[dtmf_ack.string_id]), dtmf_ack.display_string); + } + } + } + break; + + case VC_ENGINE_MSG_SS_HELD_TO_UI: + { + _vcui_doc_set_all_call_data_to_hold_status(); + _vcui_view_update(); + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + + } + break; + + case VC_ENGINE_MSG_SS_RETREIVED_TO_UI: + { + _vcui_doc_set_all_call_data_to_unhold_status(); + _vcui_view_update(); + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + + } + break; + + case VC_ENGINE_MSG_SS_SWAP_TO_UI: + { + _vcui_view_popup_unload(ad->popup_eo); + + if (ad->bholdisleft == EINA_TRUE) { + ad->bswapped = EINA_FALSE; + } else { + ad->bswapped = EINA_TRUE; + } + + _vcui_doc_swap_all_call_data_status(); + _vcui_view_auto_change(); + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + } + break; + + case VC_ENGINE_MSG_SS_SETUP_CONF_TO_UI: + { + _vcui_view_popup_unload(ad->popup_eo); + + _vcui_doc_set_all_call_data_to_unhold_status(); + _vcui_view_auto_change(); + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + } + break; + + case VC_ENGINE_MSG_SS_SPLIT_CONF_TO_UI: + { + vc_engine_common_with_handle_type ss_split_conf = msg->ss_split_conf; + + CALL_UI_DEBUG("[UI]The handle is %d ", ss_split_conf.call_handle); + + call_data_t *call_data = _vcui_doc_get_call_data_by_handle(ss_split_conf.call_handle); + if (call_data == NULL) { + CALL_UI_DEBUG("Error"); + elm_exit(); + return; + } else { + _vcui_doc_set_all_call_data_to_hold_status(); + _vcui_doc_set_call_status(call_data, CALL_UNHOLD); + + _vcui_view_auto_change(); + /*Update the quick-panel window */ + _vcui_view_quickpanel_change(); + } + } + break; + + case VC_ENGINE_MSG_SS_TRANSFERRED_TO_UI: + break; + + case VC_ENGINE_MSG_SS_CONNECT_LINE_IND_TO_UI: + break; + + case VC_ENGINE_MSG_IND_FORWARD_TO_UI: + break; + + case VC_ENGINE_MSG_IND_ACTIVATE_TO_UI: + { + _vcui_view_popup_load(_("IDS_CALL_POP_UNHELD"), POPUP_TIMEOUT_SHORT, EINA_FALSE); + } + break; + + case VC_ENGINE_MSG_IND_HOLD_TO_UI: + { + _vcui_view_popup_load(_("IDS_CALL_POP_HELD"), POPUP_TIMEOUT_SHORT, EINA_FALSE); + } + break; + + case VC_ENGINE_MSG_IND_TRANSFER_TO_UI: + break; + + case VC_ENGINE_MSG_IND_SETUPCONFERENCE_TO_UI: + break; + + case VC_ENGINE_MSG_IND_BARRING_TO_UI: + break; + + case VC_ENGINE_MSG_IND_WAITING_TO_UI: + { + _vcui_view_popup_load(_("IDS_CALL_POP_WAITING_ACTIVE"), POPUP_TIMEOUT_SHORT, EINA_FALSE); + } + break; + + case VC_ENGINE_MSG_IND_CUGINFO_TO_UI: + break; + + case VC_ENGINE_MSG_IND_SSNOTIFY_TO_UI: + break; + + case VC_ENGINE_MSG_IND_CALLINGNAMEINFO_TO_UI: + break; + + case VC_ENGINE_MSG_IND_REDIRECT_CNF_TO_UI: + break; + + case VC_ENGINE_MSG_IND_ACTIVATECCBS_CNF_TO_UI: + break; + + case VC_ENGINE_MSG_IND_ACTIVATECCBS_USERINFO_TO_UI: + break; + + case VC_ENGINE_MSG_GET_VOLUME_RESP_TO_UI: + { + vc_engine_vol_resp_type vol_resp = msg->vol_resp; + _vcui_response_volume(vol_resp.vol_alert_type, vol_resp.vol_level); + } + break; + + case VC_ENGINE_MSG_SET_VOLUME_FROM_BT_TO_UI: + { + vc_engine_vol_set_from_bt_type vol_set_from_bt = msg->vol_set_from_bt; + ad->bt_vol_val = vol_set_from_bt.vol_level; + _vcui_view_popup_vol_bt(ad->bt_vol_val); + } + break; + + case VC_ENGINE_MSG_ACTION_NO_ACTIVE_TASK_TO_UI: + { + + } + break; + + case VC_ENGINE_MSG_ACTION_CALL_END_HELD_RETREIVED_TO_UI: + { + + } + break; + + case VC_ENGINE_MSG_ACTION_SAT_RESPONSE_TO_UI: + { + + } + break; + + case VC_ENGINE_MSG_ACTION_SAT_REQUEST_TO_UI: + { + + } + break; + + case VC_ENGINE_MSG_ERROR_OCCURED_TO_UI: + break; + + case VC_ENGINE_MSG_IND_AOC_TO_UI: + break; + + case VC_ENGINE_MSG_ACCEPT_CHOICE_BOX_TO_UI: + { + CALL_UI_DEBUG("not supported"); + } + break; + + case VC_ENGINE_MSG_HEADSET_STATUS_TO_UI: + { + vc_engine_headset_status_type headset_status = msg->headset_status; + ad->headset_status = headset_status.bstatus; + if (ad->headset_status == EINA_TRUE) { + ad->speaker_status = EINA_FALSE; + } + CALL_UI_DEBUG("Headset Status = %d", ad->headset_status); + CALL_UI_DEBUG("ad->view_top:[%d]", ad->view_top); + + if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) + || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { + if (ad->view_st[ad->view_top] != NULL) { + ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); + } + } + + } + break; + + case VC_ENGINE_MSG_EARJACK_STATUS_TO_UI: + { + vc_engine_earjack_status_type earjack_status = msg->earjack_status; + + CALL_UI_DEBUG("earjack Status = %d", earjack_status.bstatus); + CALL_UI_DEBUG("ad->view_top:[%d]", ad->view_top); + + if (earjack_status.bstatus == EINA_TRUE) { + if (ad->ctxpopup_radio_group_eo != NULL) + elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_RECEIVER_EARJACK); + + ad->speaker_status = EINA_FALSE; + ad->headset_status = EINA_FALSE; + + if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) + || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { + if (ad->view_st[ad->view_top] != NULL) { + ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); + } + } + } else { + if (_vcui_is_headset_conected() == EINA_TRUE) { + if (ad->ctxpopup_radio_group_eo != NULL) + elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_HEADSET); + + ad->speaker_status = EINA_FALSE; + ad->headset_status = EINA_TRUE; + + if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) + || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { + if (ad->view_st[ad->view_top] != NULL) { + ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); + } + } + } else { + if (ad->ctxpopup_radio_group_eo != NULL) + elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_RECEIVER_EARJACK); + + ad->speaker_status = EINA_FALSE; + ad->headset_status = EINA_FALSE; + + if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) + || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { + if (ad->view_st[ad->view_top] != NULL) { + ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); + } + } + } + } + } + break; + + case VC_ENGINE_MSG_ACTION_INCOM_FORCE_TO_UI: + { + call_data_t *call_data = _vcui_doc_get_recent_mo_call_data(); + if (call_data != NULL && _vcui_doc_get_call_handle(call_data) == NO_HANDLE) { + _vcui_doc_remove_call_data_from_list(call_data); + _vcui_doc_set_recent_mo_call_data(NULL); + } + } + break; + + case VC_ENGINE_MSG_MESSAGE_BOX_TO_UI: + { + vcall_engine_device_control_lcd_state(VC_LCD_ON_UNLOCK); + + vc_engine_msg_box_type msg_box = msg->msg_box; + _vcui_view_popup_load(_(gszcall_error_msg[msg_box.string_id]), POPUP_TIMEOUT_LONG, EINA_TRUE); + } + break; + + case VC_ENGINE_MSG_REDIAL_TO_UI: + { + CALL_UI_DEBUG("not used"); + } + break; + + case VC_ENGINE_MSG_NOTI_WBAMR_TO_UI: + { + vc_engine_wbamr_status_type wbamr_status = msg->wbamr_status; + ad->wbamr_status = wbamr_status.bstatus; + } + break; + default: + break; + } + + _vcui_doc_print_all_call_data(gszcall_callback_msg[event]); + + CALL_UI_DEBUG("End.."); +} diff --git a/ui/vcui-doc-launch.c b/ui/src/vcui-doc-launch.c similarity index 65% rename from ui/vcui-doc-launch.c rename to ui/src/vcui-doc-launch.c index d58ea02..477b546 100755 --- a/ui/vcui-doc-launch.c +++ b/ui/src/vcui-doc-launch.c @@ -15,23 +15,29 @@ */ +#include + #include "vcui-application.h" #include "contacts-ug.h" #define MSG_COMPOSER_UG "msg-composer-efl" #define MSG_PKG "org.tizen.message" #define ADD_TO_CONTACTS_UG "contacts-details-efl" +#define VIEW_CONTACT_UG "contacts-details-efl" struct vcui_ug_priv_data *local_priv_data = NULL; #define COMMON_FUNCTIONS #ifdef COMMON_FUNCTIONS +#if 0 static void __vcui_doc_launch_ug_common_back_btn_cb(void *data, Evas_Object *obj, void *event_info) { Evas_Object *navi = data; elm_naviframe_item_pop(navi); } +#endif +#ifdef _LOCAL_UG_EFFECT_ static void __vcui_doc_launch_ug_common_hide_effect_finished(void *data, Evas_Object *obj, const char *emission, const char *source) { struct vcui_ug_priv_data *temp_priv_data = (struct vcui_ug_priv_data *)data; @@ -50,7 +56,7 @@ static void __vcui_doc_launch_ug_common_hide_effect_finished(void *data, Evas_Ob if (temp_priv_data->on_destroy_callback != NULL) temp_priv_data->on_destroy_callback(temp_priv_data->destroy_callback_param); - ug_destroy((struct ui_gadget *)(temp_priv_data->need_ug)); + ug_destroy((ui_gadget_h)(temp_priv_data->need_ug)); free(temp_priv_data); local_priv_data = NULL; @@ -59,11 +65,11 @@ static void __vcui_doc_launch_ug_common_hide_effect_finished(void *data, Evas_Ob CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished end"); } } +#endif -static void __vcui_doc_launch_ug_common_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv) +static void __vcui_doc_launch_ug_common_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) { Evas_Object *base, *win; - struct vcui_ug_priv_data *temp_priv_data = (struct vcui_ug_priv_data *)priv; if (!ug) return; @@ -84,17 +90,18 @@ static void __vcui_doc_launch_ug_common_layout_cb(struct ui_gadget *ug, enum ug_ edje_object_signal_callback_add(elm_layout_edje_get(ly), "elm,action,hide,finished", "", __vcui_doc_launch_ug_common_hide_effect_finished, temp_priv_data); edje_object_signal_emit(elm_layout_edje_get(ly), "elm,state,show", ""); #else + win = ug_get_window(); evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, base); evas_object_show(base); #endif } -static void __vcui_doc_launch_ug_common_destroy_cb(struct ui_gadget *ug, void *priv) +static void __vcui_doc_launch_ug_common_destroy_cb(ui_gadget_h ug, void *priv) { CALL_UI_DEBUG(""); struct vcui_ug_priv_data *temp_priv_data = NULL; - if(priv != NULL) + if (priv != NULL) temp_priv_data = (struct vcui_ug_priv_data *)priv; else temp_priv_data = local_priv_data; @@ -157,19 +164,21 @@ static void __vcui_doc_launch_ug_common_destroy_cb(struct ui_gadget *ug, void *p } #endif -static void __vcui_doc_launch_ug_contact_list_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv) +static void __vcui_doc_launch_ug_contact_list_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) { __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv); CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_layout_cb success"); } -static void __vcui_doc_launch_ug_contact_list_destroy_cb(struct ui_gadget *ug, void *priv) +static void __vcui_doc_launch_ug_contact_list_destroy_cb(ui_gadget_h ug, void *priv) { + vcui_app_call_data_t *ad = _vcui_get_app_data(); __vcui_doc_launch_ug_common_destroy_cb(ug, priv); + ad->contact_ug = NULL; CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_destroy_cb success"); } -static void __vcui_doc_launch_ug_contact_list_result_cb(struct ui_gadget *ug, bundle *result, void *priv) +static void __vcui_doc_launch_ug_contact_list_result_cb(ui_gadget_h ug, service_h result, void *priv) { CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_result_cb nothing"); } @@ -177,19 +186,21 @@ static void __vcui_doc_launch_ug_contact_list_result_cb(struct ui_gadget *ug, bu void _vcui_doc_launch_contact_list_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data) { CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug start"); - bundle *bd = bundle_create(); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + service_h service; - if (bd == NULL) { - CALL_UI_DEBUG("bundle_craete() return NULL"); + int ret = service_create(&service); + if (ret < 0) { + CALL_UI_DEBUG("service_create() return error : %d", ret); return; } - bundle_add(bd, "type", "1"); + service_add_extra_data(service, "type", "1"); struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data; if (pugs_array->last_ug_type == VCUI_UG_TYPE_CONTACT_LIST) { CALL_UI_DEBUG("launch exit because of same ug execution"); - bundle_free(bd); + service_destroy(service); return; } struct ug_cbs cbs = { 0, }; @@ -199,8 +210,8 @@ void _vcui_doc_launch_contact_list_ug(void *parent_ui_gadget, void *navi, void * struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data)); if (temp_priv_data == NULL) { - CALL_UI_DEBUG("malloc error.\n"); - bundle_free(bd); + CALL_UI_DEBUG("malloc error."); + service_destroy(service); return; } temp_priv_data->on_start_callback = on_start_callback; @@ -211,7 +222,7 @@ void _vcui_doc_launch_contact_list_ug(void *parent_ui_gadget, void *navi, void * temp_priv_data->need_ug_lists = ugs_array_data; local_priv_data = cbs.priv = temp_priv_data; - struct ui_gadget *ug = ug_create(parent_ui_gadget, PKGNAME_CONTACT_UG, UG_MODE_FULLVIEW, bd, &cbs); + ui_gadget_h ug = ug_create(parent_ui_gadget, PKGNAME_CONTACT_UG, UG_MODE_FULLVIEW, service, &cbs); temp_priv_data->need_ug = ug; if (ug == NULL) { free(temp_priv_data); @@ -222,24 +233,25 @@ void _vcui_doc_launch_contact_list_ug(void *parent_ui_gadget, void *navi, void * pugs_array->ug_count = pugs_array->ug_count + 1; pugs_array->last_ug_type = VCUI_UG_TYPE_CONTACT_LIST; pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug); + ad->contact_ug = ug; } - bundle_free(bd); + service_destroy(service); CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug end"); } -static void __vcui_doc_launch_ug_phoneui_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv) +static void __vcui_doc_launch_ug_phoneui_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) { __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv); CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_layout_cb success"); } -static void __vcui_doc_launch_ug_phoneui_destroy_cb(struct ui_gadget *ug, void *priv) +static void __vcui_doc_launch_ug_phoneui_destroy_cb(ui_gadget_h ug, void *priv) { __vcui_doc_launch_ug_common_destroy_cb(ug, priv); CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_destroy_cb success"); } -static void __vcui_doc_launch_ug_phoneui_result_cb(struct ui_gadget *ug, bundle *result, void *priv) +static void __vcui_doc_launch_ug_phoneui_result_cb(ui_gadget_h ug, service_h result, void *priv) { CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_result_cb nothing"); } @@ -247,19 +259,20 @@ static void __vcui_doc_launch_ug_phoneui_result_cb(struct ui_gadget *ug, bundle void _vcui_doc_launch_phoneui_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data) { CALL_UI_DEBUG("launch_PHONEUI UG start"); - bundle *bd = bundle_create(); + service_h service; - if (bd == NULL) { - CALL_UI_DEBUG("bundle_craete() return NULL"); + int ret = service_create(&service); + if (ret < 0) { + CALL_UI_DEBUG("service_create() return error : %d", ret); return; } - bundle_add(bd, "type", "1"); + service_add_extra_data(service, "type", "51"); struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data; if (pugs_array->last_ug_type == VCUI_UG_TYPE_ADD_CALL) { CALL_UI_DEBUG("launch exit because of same ug execution"); - bundle_free(bd); + service_destroy(service); return; } struct ug_cbs cbs = { 0, }; @@ -269,8 +282,8 @@ void _vcui_doc_launch_phoneui_ug(void *parent_ui_gadget, void *navi, void *paren struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data)); if (temp_priv_data == NULL) { - CALL_UI_DEBUG("malloc error.\n"); - bundle_free(bd); + CALL_UI_DEBUG("malloc error."); + service_destroy(service); return; } temp_priv_data->on_start_callback = on_start_callback; @@ -281,7 +294,7 @@ void _vcui_doc_launch_phoneui_ug(void *parent_ui_gadget, void *navi, void *paren temp_priv_data->need_ug_lists = ugs_array_data; local_priv_data = cbs.priv = temp_priv_data; - struct ui_gadget *ug = ug_create(parent_ui_gadget, PKGNAME_DIALER_UG, UG_MODE_FULLVIEW, bd, &cbs); + ui_gadget_h ug = ug_create(parent_ui_gadget, PKGNAME_DIALER_UG, UG_MODE_FULLVIEW, service, &cbs); temp_priv_data->need_ug = ug; if (ug == NULL) { free(temp_priv_data); @@ -293,10 +306,11 @@ void _vcui_doc_launch_phoneui_ug(void *parent_ui_gadget, void *navi, void *paren pugs_array->last_ug_type = VCUI_UG_TYPE_ADD_CALL; pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug); } - bundle_free(bd); + service_destroy(service); CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug end"); } +#if 0 static void __vcui_doc_launch_render_flush_post_cb(void *data, Evas *e, void *event_info) { vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; @@ -306,25 +320,54 @@ static void __vcui_doc_launch_render_flush_post_cb(void *data, Evas *e, void *ev edje_object_signal_emit(_EDJ(ad->ly), "elm,state,show", ""); evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, __vcui_doc_launch_render_flush_post_cb); } +#endif void _vcui_doc_launch_msg_composer(void *data, char *number) { CALL_UI_DEBUG(".."); - bundle *kb; - kb = bundle_create(); + service_h service; + int ret = SERVICE_ERROR_NONE; + + ret = service_create(&service); + if (ret != SERVICE_ERROR_NONE) { + CALL_UI_DEBUG("service_create() return error : %d", ret); + return; + } + + ret = service_set_operation(service, SERVICE_OPERATION_SEND_TEXT); + if (ret != SERVICE_ERROR_NONE) { + CALL_UI_DEBUG("service_set_operation() return error : %d", ret); + ret = service_destroy(service); + return; + } + + ret = service_set_package(service, MSG_PKG); + if (ret != SERVICE_ERROR_NONE) { + CALL_UI_DEBUG("service_set_package() return error : %d", ret); + ret = service_destroy(service); + return; + } + + ret = service_add_extra_data(service, SERVICE_DATA_TO, number); + if (ret != SERVICE_ERROR_NONE) { + CALL_UI_DEBUG("service_add_extra_data() return error : %d", ret); + ret = service_destroy(service); + return; + } - bundle_add(kb, "type", "compose"); - bundle_add(kb, "TO", number); - aul_launch_app(MSG_PKG, kb); - bundle_free(kb); + ret = service_send_launch_request(service, NULL, NULL); + if (ret != SERVICE_ERROR_NONE) { + CALL_UI_DEBUG("service_send_launch_request() is failed : %d", ret); + } + + service_destroy(service); } void _vcui_doc_launch_destroy_ug_all(void *ugs_array_data) { CALL_UI_DEBUG(".."); vcui_app_call_data_t *ad = _vcui_get_app_data(); - Evas_Object *base; struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data; if (pugs_array != NULL) { @@ -339,7 +382,7 @@ void _vcui_doc_launch_destroy_ug_all(void *ugs_array_data) if (base != NULL) { evas_object_hide(base); - elm_objectt_part_content_unset(base, "elm.swallow.content"); + elm_layout_content_unset(base, "elm.swallow.content"); evas_object_del(base); } if (local_priv_data->on_destroy_callback != NULL) @@ -373,18 +416,18 @@ void _vcui_doc_launch_destroy_ug_all(void *ugs_array_data) } } -static void __vcui_doc_launch_ug_contact_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv) +static void __vcui_doc_launch_ug_contact_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) { __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv); CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_layout_cb success"); } -static void __vcui_doc_launch_ug_contact_result_cb(struct ui_gadget *ug, bundle *result, void *priv) +static void __vcui_doc_launch_ug_contact_result_cb(ui_gadget_h ug, service_h result, void *priv) { CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_result_cb nothing"); } -static void __vcui_doc_launch_ug_contact_destroy_cb(struct ui_gadget *ug, void *priv) +static void __vcui_doc_launch_ug_contact_destroy_cb(ui_gadget_h ug, void *priv) { CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_destroy_cb.."); vcui_app_call_data_t *ad = _vcui_get_app_data(); @@ -397,23 +440,24 @@ void _vcui_doc_launch_add_to_contacts_ug(void *parent_ui_gadget, void *navi, voi { CALL_UI_DEBUG("launch_ADD_TO_CONTACTS UG start"); vcui_app_call_data_t *ad = _vcui_get_app_data(); - bundle *bd = bundle_create(); + service_h service; char buf[4] = {0,}; - if (bd == NULL) { - CALL_UI_DEBUG("bundle_craete() return NULL"); + int ret = service_create(&service); + if (ret < 0) { + CALL_UI_DEBUG("service_create() return error : %d", ret); return; } - snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_ADD_WITH_NUM); - bundle_add(bd, CT_UG_BUNDLE_TYPE, buf); /*CT_UG_REQUEST_ADD_WITH_NUM*/ - CALL_UI_DEBUG("number %s", (char*) data); - bundle_add(bd, CT_UG_BUNDLE_NUM, (char*) data); + snprintf(buf, sizeof(buf), "%d", 22); + service_add_extra_data(service, "type", buf); + CALL_UI_DEBUG("number %s", (char *)data); + service_add_extra_data(service, "ct_num", (char *)data); struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data; if (pugs_array->last_ug_type == VCUI_UG_TYPE_ADD_TO_CONTACTS) { CALL_UI_DEBUG("launch exit because of same ug execution"); - bundle_free(bd); + service_destroy(service); return; } struct ug_cbs cbs = { 0, }; @@ -423,8 +467,8 @@ void _vcui_doc_launch_add_to_contacts_ug(void *parent_ui_gadget, void *navi, voi struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data)); if (temp_priv_data == NULL) { - CALL_UI_DEBUG("malloc error.\n"); - bundle_free(bd); + CALL_UI_DEBUG("malloc error."); + service_destroy(service); return; } temp_priv_data->on_start_callback = on_start_callback; @@ -435,7 +479,7 @@ void _vcui_doc_launch_add_to_contacts_ug(void *parent_ui_gadget, void *navi, voi temp_priv_data->need_ug_lists = ugs_array_data; local_priv_data = cbs.priv = temp_priv_data; - struct ui_gadget *ug = ug_create(parent_ui_gadget, ADD_TO_CONTACTS_UG, UG_MODE_FULLVIEW, bd, &cbs); + ui_gadget_h ug = ug_create(parent_ui_gadget, ADD_TO_CONTACTS_UG, UG_MODE_FULLVIEW, service, &cbs); temp_priv_data->need_ug = ug; if (ug == NULL) { free(temp_priv_data); @@ -448,6 +492,69 @@ void _vcui_doc_launch_add_to_contacts_ug(void *parent_ui_gadget, void *navi, voi pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug); ad->contact_ug = ug; } - bundle_free(bd); + service_destroy(service); CALL_UI_DEBUG("_vcui_doc_launch_add_to_contacts_ug end"); } + +void _vcui_doc_launch_view_contact_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data, void *data) +{ + CALL_UI_DEBUG("launch_VIEW_CONTACT UG start"); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + service_h service; + char buf[4] = {0,}; + char contactId[128] = {0,}; + + int ret = service_create(&service); + if (ret < 0) { + CALL_UI_DEBUG("service_create() return error : %d", ret); + return; + } + + snprintf(buf, sizeof(buf), "%d", 0); + service_add_extra_data(service, "type", buf); /*CT_UG_REQUEST_DETAIL*/ + CALL_UI_DEBUG("ct_id %d", (int)data); + snprintf(contactId, sizeof(contactId), "%d", (int)data); + service_add_extra_data(service, "ct_id", contactId); + + struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data; + if (pugs_array->last_ug_type == VCUI_UG_TYPE_VIEW_CONTACT) { + CALL_UI_DEBUG("launch exit because of same ug execution"); + service_destroy(service); + return; + } + struct ug_cbs cbs = { 0, }; + cbs.layout_cb = __vcui_doc_launch_ug_contact_layout_cb; + cbs.destroy_cb = __vcui_doc_launch_ug_contact_destroy_cb; + cbs.result_cb = __vcui_doc_launch_ug_contact_result_cb; + + struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data)); + if (temp_priv_data == NULL) { + CALL_UI_DEBUG("malloc error."); + service_destroy(service); + return; + } + temp_priv_data->on_start_callback = on_start_callback; + temp_priv_data->on_destroy_callback = on_destroy_callback; + temp_priv_data->destroy_callback_param = callback_param; + temp_priv_data->need_navi = navi; + temp_priv_data->need_parent = parent; + temp_priv_data->need_ug_lists = ugs_array_data; + local_priv_data = cbs.priv = temp_priv_data; + + ui_gadget_h ug = ug_create(parent_ui_gadget, VIEW_CONTACT_UG, UG_MODE_FULLVIEW, service, &cbs); + temp_priv_data->need_ug = ug; + if (ug == NULL) { + free(temp_priv_data); + local_priv_data = NULL; + CALL_UI_DEBUG("_vcui_doc_launch_view_contact_ug fail"); + } else { + struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data; + pugs_array->ug_count = pugs_array->ug_count + 1; + pugs_array->last_ug_type = VCUI_UG_TYPE_VIEW_CONTACT; + pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug); + ad->contact_ug = ug; + } + service_destroy(service); + CALL_UI_DEBUG("_vcui_doc_launch_view_contact_ug end"); +} + diff --git a/ui/src/vcui-document.c b/ui/src/vcui-document.c new file mode 100755 index 0000000..0eaa709 --- /dev/null +++ b/ui/src/vcui-document.c @@ -0,0 +1,976 @@ +/* + * 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 "vcui-application.h" +#include "vcui-document.h" + +struct _call_data_t { + unsigned char call_handle; + int contact_id; + int contact_phone_type; + int bday_remaining_days; + time_t start_time; + + char call_num[VC_PHONE_NUMBER_LENGTH_MAX]; + char call_display[VC_DISPLAY_NAME_LENGTH_MAX]; + char call_file_path[VC_IMAGE_PATH_LENGTH_MAX]; + char call_full_file_path[VC_IMAGE_PATH_LENGTH_MAX]; + + gboolean brejected; /* auto reject */ + + /* The below 2 fields are required on UI side as well, even though we can get these values from engine data structure + * When call is ended, engine will clear the call object info and hence we cannot get these status at this moment + * So we have to maintain a copy in UI side as well */ + int call_type; /* whether MO or MT call*/ + int caller_status; /* HOLD/UNHOLD */ +}; + +static call_data_t *recent_mo; +static call_data_t *recent_mt; +static call_data_t *recent_call; +static Eina_List *caller_list; + +/** + * This function initializes the data structure pointers maintained in the document file + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_data_init() +{ + recent_mo = NULL; + recent_mt = NULL; + recent_call = NULL; + caller_list = NULL; +} + +/** + * This function allocates memory for the call data structure - call_data_t + * + * @return pointer to the memory allocated for call-data structure, or NULL if memory allocation fails + * @param[in] nothing +*/ +call_data_t *_vcui_doc_allocate_call_data_memory(void) +{ + call_data_t *pcall_data = NULL; + + pcall_data = (call_data_t *)calloc(1, sizeof(call_data_t)); + if (pcall_data == NULL) { + CALL_UI_DEBUG("memory allocation failed..."); + } + return pcall_data; +} + +/** + * This function retrieves the value of the call handle + * + * @return value of the call handle + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_handle(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->call_handle; +} + +/** + * This function assigns the value of call handle for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] call_handle new value of the call handle +*/ +void _vcui_doc_set_call_handle(call_data_t *pcall_data, int call_handle) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + pcall_data->call_handle = call_handle; +} + +/** + * This function retrieves the value of the call number + * + * @return pointer to the call number string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_call_number(call_data_t *pcall_data) +{ + VCUI_RETURN_NULL_IF_FAIL(pcall_data); + return (char *) pcall_data->call_num; +} + +/** + * This function assigns the value of call number for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pnumber pointer to the call number string +*/ +void _vcui_doc_set_call_number(call_data_t *pcall_data, char *pnumber) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + memset(pcall_data->call_num, 0, sizeof(pcall_data->call_num)); + vcall_engine_util_strcpy(pcall_data->call_num, VC_PHONE_NUMBER_LENGTH_MAX, pnumber); +} + +/** + * This function retrieves the value of the call name (available from contact DB) + * + * @return pointer to the call name string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_call_display_name(call_data_t *pcall_data) +{ + VCUI_RETURN_NULL_IF_FAIL(pcall_data); + return (char *) pcall_data->call_display; +} + +/** + * This function assigns the value of contact name for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pname pointer to the call number string +*/ +void _vcui_doc_set_call_display_name(call_data_t *pcall_data, char *pname) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + memset(pcall_data->call_display, 0, sizeof(pcall_data->call_display)); + vcall_engine_util_strcpy(pcall_data->call_display, VC_DISPLAY_NAME_LENGTH_MAX, pname); +} + +/** + * This function retrieves the caller-ID file path (caller-ID for split screen) + * + * @return pointer to the caller-ID file path string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_caller_id_file_path(call_data_t *pcall_data) +{ + VCUI_RETURN_NULL_IF_FAIL(pcall_data); + return (char *) pcall_data->call_file_path; +} + +/** + * This function assigns the value of caller-ID file-path for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pfile_path pointer to the caller-ID file-path string +*/ +void _vcui_doc_set_caller_id_file_path(call_data_t *pcall_data, char *pfile_path) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + memset(pcall_data->call_file_path, 0, sizeof(pcall_data->call_file_path)); + vcall_engine_util_strcpy(pcall_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, pfile_path); +} + +/** + * This function retrieves the caller-ID full file path (caller-ID for full screen) + * + * @return pointer to the caller-ID full file path string + * @param[in] pcall_data pointer to the call-data structure +*/ +char *_vcui_doc_get_caller_id_full_file_path(call_data_t *pcall_data) +{ + VCUI_RETURN_NULL_IF_FAIL(pcall_data); + return (char *) pcall_data->call_full_file_path; +} + +/** + * This function assigns the value of caller-ID full file-path for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] pfull_file_path pointer to the caller-ID full file-path string +*/ +void _vcui_doc_set_caller_id_full_file_path(call_data_t *pcall_data, char *pfull_file_path) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + memset(pcall_data->call_full_file_path, 0, sizeof(pcall_data->call_full_file_path)); + vcall_engine_util_strcpy(pcall_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, pfull_file_path); +} + +/** + * This function retrieves the value of the call start time + * + * @return value of the call start time + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_start_time(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->start_time; +} + +/** + * This function assigns the value of call start time for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure +*/ +void _vcui_doc_set_call_start_time(call_data_t *pcall_data) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + time(&(pcall_data->start_time)); +} + +/** + * This function retrieves the value of the contact index + * + * @return value of the contact index + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_contact_index(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->contact_id; +} + +/** + * This function assigns the value of contact index for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] contact_index value of the contact index +*/ +void _vcui_doc_set_contact_index(call_data_t *pcall_data, int contact_index) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + pcall_data->contact_id = contact_index; +} + +/** + * This function retrieves the value of the contact phone type + * + * @return value of the contact phone type + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_contact_phone_type(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->contact_phone_type; +} + +/** + * This function assigns the value of contact phone type for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] phone_type value of the contact phone type +*/ +void _vcui_doc_set_contact_phone_type(call_data_t *pcall_data, int phone_type) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + pcall_data->contact_phone_type = phone_type; +} + +/** + * This function retrieves the value of the remaining days for the contact birthday + * + * @return value of the contact remaining days in birthday + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_birthday_remaining_days(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->bday_remaining_days; +} + +/** + * This function assigns the value of birthday remaining days for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] bday_rem_days value of the birthday remaining days +*/ +void _vcui_doc_set_birthday_remaining_days(call_data_t *pcall_data, int bday_rem_days) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + pcall_data->bday_remaining_days = bday_rem_days; +} + +/** + * This function retrieves the value of the auto reject status + * + * @return value of the auto reject status + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_auto_reject_status(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->brejected; +} + +/** + * This function assigns the value of auto reject status for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] bauto_rejected value of the auto reject status +*/ +void _vcui_doc_set_auto_reject_status(call_data_t *pcall_data, gboolean bauto_rejected) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + pcall_data->brejected = bauto_rejected; +} + +/** + * This function retrieves if a call is MO or MT type + * + * @return value of the call type - MO or MT + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_type(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->call_type; +} + +/** + * This function assigns the value of call type for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] call_type type of call, MO or MT +*/ +void _vcui_doc_set_call_type(call_data_t *pcall_data, int call_type) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + pcall_data->call_type = call_type; +} + +/** + * This function retrieves the call status of a particular call data structure (HOLD/UNHOLD) + * + * @return value of the call status, HOLD/UNHOLD + * @param[in] pcall_data pointer to the call-data structure +*/ +int _vcui_doc_get_call_status(call_data_t *pcall_data) +{ + VCUI_RETURN_INVALID_IF_FAIL(pcall_data); + return pcall_data->caller_status; +} + +/** + * This function assigns the value of call status for a given pointer of the call-data structure + * + * @return nothing + * @param[in] pcall_data pointer to the call-data structure + * @param[in] call_status status of call, active/held +*/ +void _vcui_doc_set_call_status(call_data_t *pcall_data, int call_status) +{ + VCUI_RETURN_IF_FAIL(pcall_data); + pcall_data->caller_status = call_status; +} + +/** + * This function retrieves the pointer to the most recent MO(outgoing) call data + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_recent_mo_call_data() +{ + return recent_mo; +} + +/** + * This function assigns the pointer of the most recent MO(outgoing) call data + * to the pointer stored in the vcui-document file (recent_mo) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be copied/assigned +*/ +void _vcui_doc_set_recent_mo_call_data(call_data_t *in) +{ + CALL_UI_DEBUG(".."); + if (in == NULL) { + CALL_UI_DEBUG("set recent_mo to null"); + } + if (recent_mo != NULL && recent_mo->call_handle == NO_HANDLE) { + CALL_UI_DEBUG("Set_recent 1"); + free(recent_mo); + recent_mo = NULL; + } + _vcui_doc_set_all_recent(in); + recent_mo = in; +} + +/** + * This function retrieves the pointer to the most recent MT(incoming) call data + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_recent_mt_call_data() +{ + return recent_mt; +} + +/** + * This function assigns the pointer of the most recent MT(incoming) call data + * to the pointer stored in the vcui-document file (recent_mt) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be copied/assigned +*/ +void _vcui_doc_set_recent_mt_call_data(call_data_t *in) +{ + CALL_UI_DEBUG(".."); + if (in == NULL) { + CALL_UI_DEBUG("set recent_mt to null"); + } + _vcui_doc_set_all_recent(in); + recent_mt = in; +} + +/** + * This function retrieves the pointer to the most recent call data, either MT(incoming)/MO(outgoing) + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_recent_call_data() +{ + CALL_UI_DEBUG(".."); + if (recent_call == NULL) { + CALL_UI_DEBUG("recent is NULL"); + if (recent_mo != NULL) { + recent_call = recent_mo; + CALL_UI_DEBUG("recent is mo"); + } else if (recent_mt != NULL) { + recent_call = recent_mt; + CALL_UI_DEBUG("recent is mt"); + } + } + return recent_call; +} + +/** + * This function assigns the pointer of the most recent MT(incoming)/MO(outgoing) call data + * to the pointer stored in the vcui-document file (recent_call) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be copied/assigned +*/ +void _vcui_doc_set_all_recent(call_data_t *in) +{ + CALL_UI_DEBUG(".."); + if (in == NULL) { + CALL_UI_DEBUG("set recent_call to null"); + } + recent_call = in; +} + +/** + * This function adds the call data structure to the list of call data maintained in the + * vcui-document file (caller_list link list) + * + * @return nothing + * @param[in] in pointer to the call-data structure to be copied/assigned +*/ +void _vcui_doc_add_call_data(call_data_t *in) +{ + if (in == NULL) + return; + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd == in) { + return; + } + } + + caller_list = eina_list_append(caller_list, (void *)in); +} + +/** + * This function updates the call data structure contained in the list of call data maintained in the + * vcui-document file (caller_list link list) with the new call-data structure + * + * @return nothing + * @param[in] in pointer to the call-data structure to be updated +*/ +void _vcui_doc_update_call_data(call_data_t *in) +{ + if (in == NULL) + return; + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd == in) { + *cd = *in; + return; + } + } +} + +/** + * This function checks if the call data pointer data is valid and present in the 'caller_list' list + * + * @return TRUE if the call-data is present and FALSE if there is no such call-data in the list + * @param[in] in pointer to the call-data structure +*/ +Eina_Bool _vcui_doc_is_valid_call_data(call_data_t *in) +{ + if (in == NULL) + return EINA_FALSE; + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd == in) { + return EINA_TRUE; + } + } + + return EINA_FALSE; +} + +/** + * This function removes the call data structure from the list of call data maintained in the + * vcui-document file (caller_list link list) and frees the call data structure + * + * @return nothing + * @param[in] in pointer to the call-data structure to be added +*/ +void _vcui_doc_remove_call_data(call_data_t *in) +{ + if (in == NULL) { + CALL_UI_DEBUG("Call data is Null"); + return; + } + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd == in) { + if (in == _vcui_doc_get_recent_mo_call_data()) + _vcui_doc_set_recent_mo_call_data(NULL); + if (in == _vcui_doc_get_recent_mt_call_data()) + _vcui_doc_set_recent_mt_call_data(NULL); + + caller_list = eina_list_remove(caller_list, in); + free(in); + in = NULL; + CALL_UI_DEBUG("Call data removed"); + break; + } + + } + + if (_vcui_doc_get_all_call_data_count() == 0) { + eina_list_free(caller_list); + caller_list = NULL; + } + +} + +/** + * This function removes the call data structure from the list of call data maintained in the + * vcui-document file (caller_list link list) + * + * @return a pointer to the call data structure which is passed + * @param[in] in pointer to the call-data structure to be added +*/ +call_data_t *_vcui_doc_remove_call_data_from_list(call_data_t *in) +{ + if (in == NULL) { + CALL_UI_DEBUG("Call data is Null"); + return NULL; + } + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd == in) { + caller_list = eina_list_remove(caller_list, in); + return in; + } + } + return NULL; +} + +/** + * This function removes all the call data from list and frees the memory + * + * @return nothing + * @param[in] void +*/ +void _vcui_doc_remove_all_call_data() +{ + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + free(cd); + cd = NULL; + } + } + eina_list_free(caller_list); + caller_list = NULL; +} + +/** + * This function retrieves the earliest call data based on the call status + * + * @return pointer to the call data structure + * @param[in] call_status value of the call status (hold/unhold) +*/ +call_data_t *_vcui_doc_get_call_data_by_call_status(int call_status) +{ + + Eina_List *l = NULL; + call_data_t *fast_cd = NULL; + call_data_t *cd = NULL; + int i = 0; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == call_status) { + if (i == 0) { + fast_cd = cd; + i++; + continue; + } else { + if (fast_cd->start_time > cd->start_time) { + fast_cd = cd; + } + } + i++; + } + } + } + return fast_cd; +} + +/** + * This function retrieves the most recent MO call data + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_call_data_mo_type() +{ + + Eina_List *l = NULL; + call_data_t *last_cd = NULL; + call_data_t *cd = NULL; + int i = 0; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->call_type == CALL_OUTGOING) { + if (i == 0) { + last_cd = cd; + i++; + continue; + } else { + if (last_cd->start_time < cd->start_time) { + last_cd = cd; + } + } + i++; + } + } + } + return last_cd; +} + +/** + * This function retrieves the first call data in the list + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_first_call_data_from_list() +{ + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + return cd; + } + } + return NULL; +} + +/** + * This function retrieves the first call data in the list which is of UNHOLD status + * + * @return pointer to the call data structure + * @param[in] nothing +*/ +call_data_t *_vcui_doc_get_first_call_data_by_unhold_status() +{ + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == CALL_UNHOLD) { + return cd; + } + } + } + return NULL; +} + +/** + * This function retrieves the call data based on the given call handle + * + * @return pointer to the call data structure + * @param[in] handle value of the call handle +*/ +call_data_t *_vcui_doc_get_call_data_by_handle(int handle) +{ + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->call_handle == handle) { + return cd; + } + } + } + return NULL; +} + +/** + * This function retrieves the count of call data which are in HOLD status + * + * @return count of held call data + * @param[in] nothing +*/ +int _vcui_doc_get_hold_call_data_count() +{ + int i = 0; + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == CALL_HOLD) { + i++; + } + } + } + CALL_UI_DEBUG("(%d)", i); + return i; +} + +/** + * This function retrieves the count of call data which are in UNHOLD status + * + * @return count of active call data + * @param[in] nothing +*/ +int _vcui_doc_get_unhold_call_data_count() +{ + int i = 0; + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == CALL_UNHOLD) { + i++; + } + } + } + CALL_UI_DEBUG("(%d)", i); + return i; +} + +/** + * This function retrieves the count of call data which are in NO status (neither hold/unhold) + * + * @return count of 'no status' call data + * @param[in] nothing +*/ +int _vcui_doc_get_no_status_call_data_count() +{ + int i = 0; + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == NO_STATUS) { + i++; + } + } + } + return i; +} + +/** + * This function retrieves the count of all call data in the list + * + * @return count of all call data + * @param[in] nothing +*/ +int _vcui_doc_get_all_call_data_count() +{ + int i = eina_list_count(caller_list); + return i; +} + +/** + * This function retrieves the call status of a group (greater than 1 member group) + * + * @return value of the call status (HOLD/UNHOLD) + * @param[in] nothing +*/ +int _vcui_doc_get_group_call_status() +{ + if (_vcui_doc_get_all_call_data_count() > 1) { + if (_vcui_doc_get_hold_call_data_count() > 1) { + return CALL_HOLD; + } else { + return CALL_UNHOLD; + } + } else { + return CALL_UNHOLD; + } +} + +/** + * This function retrieves the pointer to the list containing the call data with HOLD status + * + * @return pointer to the HOLD call data list + * @param[in] nothing +*/ +Eina_List *_vcui_doc_get_caller_list_with_hold_status() +{ + if (_vcui_doc_get_all_call_data_count() == 0) + return NULL; + Eina_List *hold_list = NULL; + Eina_List *l = NULL; + call_data_t *cd = NULL; + + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == CALL_HOLD) { + hold_list = eina_list_append(hold_list, cd); + } + } + } + return hold_list; +} + +/** + * This function retrieves the pointer to the list containing the call data with UNHOLD status + * + * @return pointer to the UNHOLD call data list + * @param[in] nothing +*/ +Eina_List *_vcui_doc_get_caller_list_with_unhold_status() +{ + if (_vcui_doc_get_all_call_data_count() == 0) + return NULL; + Eina_List *unhold_list = NULL; + Eina_List *l = NULL; + call_data_t *cd = NULL; + + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + CALL_UI_DEBUG("_vcui_doc_get_caller_list_with_unhold_status"); + if (cd->caller_status == CALL_UNHOLD) { + CALL_UI_DEBUG("find it"); + unhold_list = eina_list_append(unhold_list, cd); + } + } + } + return unhold_list; +} + +/** + * This function prints all the call data structure members + * + * @return nothing + * @param[in] msg_pos type of message +*/ +void _vcui_doc_print_all_call_data(char *msg_pos) +{ + CALL_UI_DEBUG(" --------%s------------", msg_pos); + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + CALL_UI_DEBUG(" call_handle %d", cd->call_handle); + CALL_UI_DEBUG(" call_num %s", cd->call_num); + CALL_UI_DEBUG(" call_display %s", cd->call_display); + CALL_UI_DEBUG(" call_file_path %s", cd->call_file_path); + CALL_UI_DEBUG(" call_full_file_path %s", cd->call_full_file_path); + CALL_UI_DEBUG(" call_time %d", (int)(cd->start_time)); + } + } + CALL_UI_DEBUG(" --------------------------"); +} + +/** + * This function assigns UNHOLD call status to all the call data in the list + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_set_all_call_data_to_unhold_status() +{ + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == CALL_HOLD) { + cd->caller_status = CALL_UNHOLD; + } + } + } +} + +/** + * This function assigns HOLD call status to all the call data in the list + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_set_all_call_data_to_hold_status() +{ + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == CALL_UNHOLD) { + cd->caller_status = CALL_HOLD; + } + } + } +} + +/** + * This function swaps the HOLD and UNHOLD calls in the call list + * + * @return nothing + * @param[in] nothing +*/ +void _vcui_doc_swap_all_call_data_status() +{ + Eina_List *l = NULL; + call_data_t *cd = NULL; + EINA_LIST_FOREACH(caller_list, l, cd) { + if (cd != NULL) { + if (cd->caller_status == CALL_HOLD) { + cd->caller_status = CALL_UNHOLD; + } else if (cd->caller_status == CALL_UNHOLD) { + cd->caller_status = CALL_HOLD; + } + } + } +} + diff --git a/ui/vcui-view-callend.c b/ui/src/vcui-view-callend.c similarity index 59% rename from ui/vcui-view-callend.c rename to ui/src/vcui-view-callend.c index fca9be6..3412c58 100755 --- a/ui/vcui-view-callend.c +++ b/ui/src/vcui-view-callend.c @@ -20,6 +20,15 @@ #include "vcui-view-callend.h" #include "vcui-view-elements.h" +#define VCUI_VIEW_CALLEND_LAYOUT_ID "ENDCALLVIEW" +typedef struct { + Evas_Object *contents; + Evas_Object *caller_info; + Evas_Object *btn_ly; + Evas_Object *ic; /* small size call image */ + vcui_app_call_status_t call_status; +} endcall_view_priv_t; + static call_data_t *call_data = NULL; static int __vcui_view_callend_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); @@ -62,7 +71,7 @@ static void __vcui_view_callend_draw_screen(Evas_Object *eo, void *data) /* ============ Check valid Evas Object ============= */ int valid = 0; - valid = _vcui_check_valid_eo(priv->contents, "ENDCALLVIEW"); + valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_CALLEND_LAYOUT_ID); if (valid == -1) { CALL_UI_DEBUG("[========== ENDCALLVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); return; @@ -72,30 +81,38 @@ static void __vcui_view_callend_draw_screen(Evas_Object *eo, void *data) if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) { CALL_UI_DEBUG("CALL_END_TYPE_SINGLE_CALL type end screen"); + char *file_path = _vcui_doc_get_caller_id_file_path(call_data); + char *call_number = _vcui_doc_get_call_number(call_data); + char *call_name = _vcui_doc_get_call_display_name(call_data); + /* call image */ _vcui_delete_contact_image(priv->contents); - if (strcmp((char *)call_data->call_file_path, NOIMG_ICON) == 0 && strcmp((char *)call_data->call_full_file_path, NOIMG_ICON) == 0) { - _vcui_show_wallpaper_image(priv->contents); + if (strcmp(file_path, NOIMG_ICON) == 0) { + _vcui_show_call_not_saved_bg_img(priv->contents); + _vcui_show_default_image(priv->contents, vd->app_data->win_main, CALLER_ID_DEFAULT); } else { - if (strcmp((char *)call_data->call_full_file_path, NOIMG_ICON) == 0) { /* normal size */ + _vcui_show_call_bg_img(priv->contents); + { _vcui_show_wallpaper_image(priv->contents); - priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, call_data->call_file_path); - } else { /* full size */ - _vcui_set_full_image(priv->contents, vd->app_data->win_main, call_data->call_full_file_path); + priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, file_path); } } + _vcui_create_voicecall_button(vd, call_number); + _vcui_create_videocall_button(vd, call_number); + _vcui_create_message_button(vd, call_number); + /* call name (if nothing, call number) */ - if (strlen((char *)call_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)call_data->call_num); - edje_object_signal_emit(_EDJ(eo), "show-all-buttons", "end-screen"); + if (strlen(call_name) == 0) { + _vcui_show_caller_info_name(vd, call_number, EINA_FALSE); + _vcui_create_add_to_contacts_button(vd, call_number); } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)call_data->call_display); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)call_data->call_num); - edje_object_signal_emit(_EDJ(eo), "show-some-buttons", "end-screen"); + int ct_id = _vcui_doc_get_contact_index(call_data); + _vcui_show_caller_info_name(vd, call_name, EINA_FALSE); + _vcui_show_caller_info_number(vd, call_number, EINA_FALSE); + _vcui_create_view_contact_button(vd, ct_id); } - - _vcui_view_common_set_each_time(call_data->start_time); + _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data)); } else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) { CALL_UI_DEBUG("CALL_END_TYPE_CONF_CALL type end screen"); char buf[DEF_BUF_LEN] = { 0, }; @@ -104,22 +121,21 @@ static void __vcui_view_callend_draw_screen(Evas_Object *eo, void *data) _vcui_show_wallpaper_image(priv->contents); priv->ic = _vcui_show_default_image(priv->contents, vd->app_data->win_main, CONF_ICON); if (priv->call_status == CALL_HOLD) { - double scale_factor = 0.0; - scale_factor = elm_config_scale_get(); - CALL_UI_DEBUG("scale_factor %f", scale_factor); - - if (scale_factor == 1.0) { + CALL_UI_DEBUG("ad->root_w: %d ad->root_h: %d", ad->root_w, ad->root_h); + if (ad->root_w == MAIN_WIN_HD_W && ad->root_h == MAIN_WIN_HD_H) { edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_HD", "CID_HD"); - } else { + } else if (ad->root_w == MAIN_WIN_WVGA_W && ad->root_h == MAIN_WIN_WVGA_H) { edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_WVGA", "CID_WVGA"); } } else { edje_object_signal_emit(_EDJ(priv->contents), "HIDE_DIM", "CID"); } + _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_FALSE); + snprintf(buf, DEF_BUF_LEN, "%d %s", (_vcui_doc_get_hold_call_data_count() + _vcui_doc_get_unhold_call_data_count()), _("IDS_CALL_BODY_PEOPLE")); + _vcui_show_caller_info_number(vd, buf, EINA_FALSE); - edje_object_part_text_set(_EDJ(eo), "txt_call_name", _("IDS_CALL_OPT_CONFERENCE_CALL")); - snprintf(buf, DEF_BUF_LEN, "%d %s", (_vcui_doc_get_count_hold() + _vcui_doc_get_count_unhold()), _("IDS_CALL_BODY_PEOPLE")); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", buf); /* in case of multicallconf, it is num of people */ + /*create a small button for Hold/Swap*/ + _vcui_create_hold_swap_button(vd); _vcui_create_top_left_button_disabled(vd); _vcui_create_top_middle_button_disabled(vd); @@ -128,8 +144,6 @@ static void __vcui_view_callend_draw_screen(Evas_Object *eo, void *data) _vcui_create_bottom_middle_button_disabled(vd); _vcui_create_bottom_right_button_disabled(vd); - _vcui_create_button_bigend_disabled(vd); - } else { CALL_UI_DEBUG("invalid type... return"); return; @@ -138,21 +152,16 @@ static void __vcui_view_callend_draw_screen(Evas_Object *eo, void *data) evas_object_show(eo); } -static Evas_Object *__vcui_view_callend_create_contents(void *data) +static Evas_Object *__vcui_view_callend_create_contents(void *data, char *grp_name) { if (data == NULL) { CALL_UI_DEBUG("ERROR"); return NULL; } voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_app_call_data_t *ad = vd->app_data; Evas_Object *eo = NULL; - /* load edje */ - if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_END_SINGLECALL); - else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_END_CONFCALL); + eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grp_name); if (eo == NULL) return NULL; @@ -188,18 +197,19 @@ static int __vcui_view_callend_oncreate(voice_call_view_data_t *view_data, int p voice_call_view_data_t *vd = view_data; vcui_app_call_data_t *ad = vd->app_data; endcall_view_priv_t *priv = (endcall_view_priv_t *)vd->priv; + Evas_Object *sep_ly = NULL; CALL_UI_DEBUG("call_end_type[%d]", ad->call_end_type); if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) { call_data = (call_data_t *)param2; } else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) { - priv->call_status = _vcui_doc_get_show_callstatus(); - call_data = _vcui_doc_get_last_status(priv->call_status); + priv->call_status = _vcui_doc_get_group_call_status(); + call_data = _vcui_doc_get_call_data_by_call_status(priv->call_status); } if (call_data == NULL) { CALL_UI_DEBUG("call Data is NULL"); - return; + return VC_ERROR; } if (!vd->layout) { @@ -210,11 +220,26 @@ static int __vcui_view_callend_oncreate(voice_call_view_data_t *view_data, int p CALL_UI_DEBUG("ERROR"); return VC_ERROR; } + /* Create Contents */ - priv->contents = __vcui_view_callend_create_contents(vd); + if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) { + priv->contents = __vcui_view_callend_create_contents(vd, GRP_END_SINGLECALL); + sep_ly = __vcui_view_callend_create_contents(vd, GRP_SEPARATOR_LAYOUT_3BUTTON); + elm_object_part_content_set(priv->contents, "btn_bg", sep_ly); + } else if (ad->call_end_type == CALL_END_TYPE_CONF_CALL) { + priv->contents = __vcui_view_callend_create_contents(vd, GRP_END_CONFCALL); + sep_ly = __vcui_view_callend_create_contents(vd, GRP_SEPARATOR_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_bg", sep_ly); + priv->btn_ly = __vcui_view_callend_create_contents(vd, GRP_BUTTON_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly); + } + priv->caller_info = __vcui_view_callend_create_contents(vd, GRP_CALLER_INFO); + elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info); + edje_object_signal_emit(_EDJ(priv->caller_info), "set-end-caller_ifno", "end-screen"); + elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents); - evas_object_name_set(priv->contents, "ENDCALLVIEW"); + evas_object_name_set(priv->contents, VCUI_VIEW_CALLEND_LAYOUT_ID); CALL_UI_DEBUG("[========== ENDCALLVIEW: priv->contents Addr : [%p] ==========]", priv->contents); } else { @@ -249,6 +274,10 @@ static int __vcui_view_callend_onshow(voice_call_view_data_t *view_data) CALL_UI_KPI("__vcui_view_callend_onshow start"); endcall_view_priv_t *priv = (endcall_view_priv_t *)view_data->priv; + /*change the orientation to normal - 0 */ + elm_win_rotation_with_resize_set(view_data->app_data->win_main, 0); + elm_win_rotation_with_resize_set(view_data->app_data->popup_mw, 0); + __vcui_view_callend_draw_screen(priv->contents, view_data); evas_object_hide(view_data->layout); @@ -271,6 +300,11 @@ static int __vcui_view_callend_ondestroy(voice_call_view_data_t *view_data) priv->contents = NULL; } + if (priv->caller_info) { + evas_object_del(priv->caller_info); + priv->caller_info = NULL; + } + free(priv); priv = NULL; } @@ -289,3 +323,66 @@ static int __vcui_view_callend_ondestroy(voice_call_view_data_t *view_data) CALL_UI_DEBUG("complete destroy one view"); return VC_NO_ERROR; } + +int _vc_ui_view_callend_check_valid_eo(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + endcall_view_priv_t *priv = NULL; + int valid = -1; + + VCUI_RETURN_VALUE_IF_FAIL(vd , -1); + priv = (endcall_view_priv_t *) vd->priv; + + valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_CALLEND_LAYOUT_ID); + + return valid; +} + +Evas_Object *_vc_ui_view_callend_get_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + endcall_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (endcall_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->contents; +} + +Evas_Object *_vc_ui_view_callend_get_button_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + endcall_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (endcall_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->btn_ly; +} + +void _vc_ui_view_callend_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur) +{ + endcall_view_priv_t *priv = NULL; + + VCUI_RETURN_IF_FAIL(vd); + priv = (endcall_view_priv_t *) vd->priv; + + VCUI_RETURN_IF_FAIL(priv); + edje_object_part_text_set(_EDJ(priv->caller_info), "txt_status", _(pcall_dur)); +} + +Evas_Object *_vc_ui_view_callend_get_caller_info(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + endcall_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (endcall_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->caller_info; +} + diff --git a/ui/vcui-view-choice.c b/ui/src/vcui-view-choice.c similarity index 69% rename from ui/vcui-view-choice.c rename to ui/src/vcui-view-choice.c index c3d688a..27427dc 100755 --- a/ui/vcui-view-choice.c +++ b/ui/src/vcui-view-choice.c @@ -19,7 +19,6 @@ #include "vcui-app-data.h" #include "vcui-view-choice.h" #include "vcui-view-dialing.h" -#include "vcui-view-incoming.h" #include "vcui-view-incoming-lock.h" #include "vcui-view-single-call.h" #include "vcui-view-multi-call-list.h" @@ -29,15 +28,14 @@ #include "vcui-view-callend.h" static const char *vcui_view_name[] = { "VIEW_DIALLING_VIEW", - "VIEW_INCOMING_VIEW", "VIEW_INCOMING_LOCK_VIEW", "VIEW_INCALL_ONECALL_VIEW", "VIEW_INCALL_MULTICALL_SPLIT_VIEW", "VIEW_INCALL_MULTICALL_CONF_VIEW", "VIEW_INCALL_MULTICALL_LIST_VIEW", - "VIEW_INCALL_KEYPAD_VIEW", "VIEW_ENDCALL_VIEW", - "VIEW_MAX", + "VIEW_QUICKPANEL_VIEW", + "VIEW_MAX", }; void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2, void *param3) @@ -55,8 +53,8 @@ void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2 _vcui_doc_launch_destroy_ug_all(&(ad->ugs_array_data)); #else if (ad->ugs_array_data.ug_count != 0) { - Eina_List *l; - struct ui_gadget *ug; + Eina_List *l = NULL; + ui_gadget_h ug = NULL; EINA_LIST_FOREACH(ad->ugs_array_data.ug_lists, l, ug) { CALL_UI_DEBUG("Destroy UG due to _vcui_view_change"); ug_destroy(ug); @@ -64,6 +62,7 @@ void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2 ad->ugs_array_data.ug_lists = eina_list_free(ad->ugs_array_data.ug_lists); ad->ugs_array_data.ug_count = 0; ad->ugs_array_data.last_ug_type = VCUI_UG_TYPE_NOE; + ad->contact_ug = NULL; } #endif if (ad->view_st[view_id]) { @@ -71,39 +70,25 @@ void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2 voice_call_view_data_t *vd = (voice_call_view_data_t *) ad->view_st[view_id]; if (vd->layout) { if (view_id == VIEW_DIALLING_VIEW) { - vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW"); - } else if (view_id == VIEW_INCOMING_VIEW) { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "INCOMINGVIEW"); + valid = _vc_ui_view_dialing_check_valid_eo(vd); } else if (view_id == VIEW_INCOMING_LOCK_VIEW) { - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "INCOMINGLOCKVIEW"); + valid = _vc_ui_view_incoming_lock_check_valid_eo(vd); } else if (view_id == VIEW_INCALL_ONECALL_VIEW) { - incall_one_view_priv_t *priv = (incall_one_view_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "ONEVIEW"); + valid = _vc_ui_view_single_call_check_valid_eo(vd); } else if (view_id == VIEW_INCALL_MULTICALL_SPLIT_VIEW) { - incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWSPLIT"); + valid = _vcui_view_multi_call_split_check_valid_eo(vd); } else if (view_id == VIEW_INCALL_MULTICALL_CONF_VIEW) { - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWCONF"); + valid = _vcui_view_multi_call_conf_check_valid_eo(vd); } else if (view_id == VIEW_INCALL_MULTICALL_LIST_VIEW) { - vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWLIST"); - } else if (view_id == VIEW_INCALL_KEYPAD_VIEW) { - vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW"); + valid = _vcui_view_multi_call_list_check_valid_eo(vd); } else if (view_id == VIEW_ENDCALL_VIEW) { - endcall_view_priv_t *priv = (endcall_view_priv_t *) vd->priv; - valid = _vcui_check_valid_eo(priv->contents, "ENDCALLVIEW"); + valid = _vc_ui_view_callend_check_valid_eo(vd); } else { CALL_UI_DEBUG("[============ BAD INPUT!!!! Check Input Layout!!!!! %d============]", view_id); } if (valid == -1) { CALL_UI_DEBUG("[========== WARNING!! Invalid Evas Object ==========]"); ad->view_st[view_id] = NULL; - /* free priv */ } } @@ -112,11 +97,11 @@ void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2 } ad->view_before_top = ad->view_top; /* hold the current top window in the before_top pointer */ ad->view_top = view_id; /* set the new top window to the view_id which is passed... this step enables in setting 00:00:00 as timer */ - if (view_id == VIEW_DIALLING_VIEW || view_id == VIEW_INCOMING_VIEW || view_id == VIEW_INCOMING_LOCK_VIEW) { + if (view_id == VIEW_DIALLING_VIEW || view_id == VIEW_INCOMING_LOCK_VIEW) { _vcui_raise_main_win(); } if ((ad->view_before_top != -1) && (ad->view_before_top != view_id)) { - CALL_UI_DEBUG("hide & destory [%d]", ad->view_before_top); + CALL_UI_DEBUG("hide & destroy [%d]", ad->view_before_top); CALL_UI_KPI("%s onHide start", vcui_view_name[ad->view_before_top]); ad->view_st[ad->view_before_top]->onHide(ad->view_st[ad->view_before_top]); CALL_UI_KPI("%s onHide done", vcui_view_name[ad->view_before_top]); @@ -147,21 +132,22 @@ void _vcui_view_change(vcui_app_call_view_id_t view_id, int param1, void *param2 void _vcui_view_auto_change() { CALL_UI_DEBUG(".."); - if (_vcui_doc_get_count_nostatus() == 1) { - call_data_t *call_data = _vcui_doc_get_all_recent(); - if (call_data->mo_mt_status == CALL_OUTGOING) { - _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL); - } else if (call_data->mo_mt_status == CALL_INCOMING) { - if (_vcui_is_idle_lock() == CALL_UNLOCK) - _vcui_view_change(VIEW_INCOMING_VIEW, 0, NULL, NULL); - else - _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, 0, NULL, NULL); + void *data = _vcui_view_get_second_mtcall_popup_data(); + _vcui_view_popup_second_mtcall_unload(data); + + if (_vcui_doc_get_no_status_call_data_count() == 1) { + call_data_t *call_data = _vcui_doc_get_recent_call_data(); + int call_type = _vcui_doc_get_call_type(call_data); + if (call_type == CALL_OUTGOING) { + _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL); + } else if (call_type == CALL_INCOMING) { + _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, 0, NULL, NULL); } else { CALL_UI_DEBUG("ERROR"); } - } else if (_vcui_doc_get_count() > 1) { - if (_vcui_doc_get_count_unhold() == 0 || _vcui_doc_get_count_hold() == 0) { + } else if (_vcui_doc_get_all_call_data_count() > 1) { + if (_vcui_doc_get_unhold_call_data_count() == 0 || _vcui_doc_get_hold_call_data_count() == 0) { _vcui_view_change(VIEW_INCALL_MULTICALL_CONF_VIEW, 0, NULL, NULL); } else { _vcui_view_change(VIEW_INCALL_MULTICALL_SPLIT_VIEW, 0, NULL, NULL); @@ -203,3 +189,36 @@ void _vcui_view_destroy(vcui_app_call_view_id_t view_id) ad->view_st[view_id]->onDestroy(ad->view_st[view_id]); } } + +void _vcui_view_quickpanel_change() +{ +#ifdef _QUICKPANNEL_SUPPORT_ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + if (ad->win_quickpanel) { + if (_vcui_doc_get_all_call_data_count() < 1) { + CALL_UI_DEBUG("destroy quickpanel"); + ad->view_st[VIEW_QUICKPANEL_VIEW]->onHide(ad->view_st[VIEW_QUICKPANEL_VIEW]); + ad->view_st[VIEW_QUICKPANEL_VIEW]->onDestroy(ad->view_st[VIEW_QUICKPANEL_VIEW]); + ad->win_quickpanel = NULL; + } else { + if (ad->view_st[VIEW_QUICKPANEL_VIEW]->layout != NULL) { + CALL_UI_DEBUG("update quickpanel"); + ad->view_st[VIEW_QUICKPANEL_VIEW]->onUpdate(ad->view_st[VIEW_QUICKPANEL_VIEW], NULL, NULL); + } + } + } else { + CALL_UI_DEBUG("create quickpanel"); + if (ad->view_st[VIEW_QUICKPANEL_VIEW] == NULL) { + voice_call_view_data_t *view_data = ad->func_new[VIEW_QUICKPANEL_VIEW] (ad); + ad->view_st[VIEW_QUICKPANEL_VIEW] = view_data; + } + if (ad->view_st[VIEW_QUICKPANEL_VIEW]->layout == NULL) { + CALL_UI_DEBUG("create!!"); + ad->view_st[VIEW_QUICKPANEL_VIEW]->onCreate(ad->view_st[VIEW_QUICKPANEL_VIEW], 0, NULL, NULL); + } + } +#else + CALL_UI_DEBUG("Not applied yet"); +#endif +} diff --git a/ui/vcui-view-common.c b/ui/src/vcui-view-common.c similarity index 69% rename from ui/vcui-view-common.c rename to ui/src/vcui-view-common.c index 8c1cf06..17e7cad 100755 --- a/ui/vcui-view-common.c +++ b/ui/src/vcui-view-common.c @@ -17,15 +17,17 @@ #include "vcui-application.h" #include "vcui-view-common.h" +#include "vcui-view-layout-hd.h" #include "vcui-view-dialing.h" -#include "vcui-view-incoming.h" +#include "vcui-view-incoming-lock.h" #include "vcui-view-single-call.h" #include "vcui-view-multi-call-split.h" #include "vcui-view-multi-call-conf.h" #include "vcui-view-multi-call-list.h" #include "vcui-view-keypad.h" #include "vcui-view-callend.h" +#include "vcui-view-quickpanel.h" static vcui_view_common_t gincall_common_data; @@ -41,8 +43,6 @@ static vcui_view_common_t *__vcui_view_common_get_common_data() static Eina_Bool __vcui_view_common_timer_cb(void *data) { - //voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - //vcui_app_call_data_t *ad = vd->app_data; vcui_view_common_t *common_data = __vcui_view_common_get_common_data(); char dur[TIME_BUF_LEN]; static int end_count = 0; @@ -92,8 +92,8 @@ static Eina_Bool __vcui_view_common_timer_end_cb(void *data) } else if (common_data->time_count == 3) { _vcui_view_common_set_text_time(_(" ")); } else if (common_data->time_count == 4) { - char data[VC_DATA_LENGTH_MAX] = { 0, }; - _vcui_view_common_set_text_time(_vcui_get_endcause_string(end_type, data)); + char data_txt[VC_DATA_LENGTH_MAX] = { 0, }; + _vcui_view_common_set_text_time(_vcui_get_endcause_string(end_type, data_txt)); } common_data->time_count++; @@ -116,7 +116,6 @@ static Eina_Bool __vcui_view_common_timer_end_dialing_cb(void *data) { CALL_UI_DEBUG(".."); vcui_view_common_t *common_data = __vcui_view_common_get_common_data(); - vcui_app_call_data_t *ad = _vcui_get_app_data(); if (common_data->tm_end_dialing) { ecore_timer_del(common_data->tm_end_dialing); @@ -124,10 +123,8 @@ static Eina_Bool __vcui_view_common_timer_end_dialing_cb(void *data) } if (common_data->bredial == EINA_TRUE) { - /*_vcui_view_all_hide();*/ - _vcui_engine_interface_process_auto_redial(EINA_TRUE); + vcall_engine_process_auto_redial(EINA_TRUE); _vcui_view_popup_load_redial(); - _vcui_view_dialing_draw_txt_dialing(ad->view_st[VIEW_DIALLING_VIEW]); } else { _vcui_view_common_call_terminate_or_view_change(); } @@ -154,106 +151,31 @@ void _vcui_view_common_set_text_time(char *time_dur) { vcui_app_call_data_t *ad = _vcui_get_app_data(); voice_call_view_data_t *data = ad->view_st[ad->view_top]; - int valid = 0; if (data != NULL) { if (data->type == VIEW_INCALL_ONECALL_VIEW) { - if (data->priv) { - incall_one_view_priv_t *priv = data->priv; - if (priv->contents) { - /* ============ Check valid Evas Object ============= */ - valid = _vcui_check_valid_eo(priv->contents, "ONEVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== ONEVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO - } else { - CALL_UI_DEBUG("ERR : Null Evas_Object priv->contents"); - } - - } + _vc_ui_view_single_call_set_call_timer(data, time_dur); } else if (data->type == VIEW_INCALL_MULTICALL_SPLIT_VIEW) { - if (data->priv) { - incall_multi_view_split_priv_t *priv = data->priv; - /* ============ Check valid Evas Object ============= */ - valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWSPLIT"); - if (valid == -1) { - CALL_UI_DEBUG("[========== MULTIVIEWSPLIT : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO - } else { - CALL_UI_DEBUG("ERR : Null Evas_Object data->layout"); - } + _vcui_view_multi_call_split_set_call_timer(data, time_dur); } else if (data->type == VIEW_INCALL_MULTICALL_CONF_VIEW) { - if (data->priv) { - vcui_view_multi_call_conf_priv_t *priv = data->priv; - /* ============ Check valid Evas Object ============= */ - valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWCONF"); - if (valid == -1) { - CALL_UI_DEBUG("[========== MULTIVIEWCONF : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO - } else { - CALL_UI_DEBUG("ERR : Null Evas_Object data->layout"); - } + _vcui_view_multi_call_conf_set_call_timer(data, time_dur); } else if (data->type == VIEW_INCALL_MULTICALL_LIST_VIEW) { - if (data->priv) { - vcui_view_multi_call_list_priv_t *priv = data->priv; - /* ============ Check valid Evas Object ============= */ - valid = _vcui_check_valid_eo(priv->contents, "MULTIVIEWLIST"); - if (valid == -1) { - CALL_UI_DEBUG("[========== MULTIVIEWLIST : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO - } else { - CALL_UI_DEBUG("ERR : Null Evas_Object data->layout"); - } - } else if (data->type == VIEW_INCALL_KEYPAD_VIEW) { - if (data->priv) { - vcui_view_keypad_priv_t *priv = data->priv; - /* ============ Check valid Evas Object ============= */ - valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO - } else { - CALL_UI_DEBUG("ERR : Null Evas_Object data->layout"); - } + _vcui_view_multi_call_list_set_call_timer(data, time_dur); } else if (data->type == VIEW_ENDCALL_VIEW) { - if (data->priv) { - endcall_view_priv_t *priv = data->priv; - /* ============ Check valid Evas Object ============= */ - valid = _vcui_check_valid_eo(priv->contents, "ENDCALLVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(time_dur)); //TODO - } else { - CALL_UI_DEBUG("ERR : Null Evas_Object data->layout"); - } + _vc_ui_view_callend_set_call_timer(data, time_dur); } else { - /*to do nothing in case of other view.*/ + /*to do nothing in case of other view. */ } } - } + + if (ad->win_quickpanel && ad->quickpanel_layout) { + _vc_ui_view_qp_set_call_timer(ad->quickpanel_layout, time_dur); + } +} void _vcui_view_common_set_each_time(time_t starttime) { time_t curr_time; - //char call_duration[9]; unsigned long call_duration_in_sec = 0; unsigned long sec = 0; unsigned long min = 0; @@ -267,7 +189,7 @@ void _vcui_view_common_set_each_time(time_t starttime) vcui_view_common_t *common_data = __vcui_view_common_get_common_data(); - // set the start time for every call + /*set the start time for every call */ common_data->start_call_time = starttime; CALL_UI_DEBUG(" common_data->start_call_time %lu", (unsigned long)common_data->start_call_time); @@ -348,7 +270,7 @@ void _vcui_view_common_call_end_show_dialing(int end_type, int bredial) if (ad->call_end_type == CALL_END_TYPE_NONE) { _vcui_view_dialing_draw_txt_ended(ad->view_st[ad->view_top], end_type); } else if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL) { - common_data->time_end_flag = TIME_END_START; // to stop timer from updating the call end screen + common_data->time_end_flag = TIME_END_START; /*to stop timer from updating the call end screen */ _vcui_view_common_set_text_time(_vcui_get_endcause_string(end_type, data)); } @@ -399,7 +321,7 @@ int _vcui_view_common_call_terminate_or_view_change(void) CALL_UI_DEBUG(".."); vcui_app_call_data_t *ad = _vcui_get_app_data(); - if (_vcui_doc_get_count() == 0) { + if (_vcui_doc_get_all_call_data_count() == 0) { if (ad->contact_ug == NULL) { CALL_UI_DEBUG("EXIT - contact ug is closed"); elm_exit(); @@ -418,3 +340,55 @@ int _vcui_view_common_call_terminate_or_view_change(void) } return VC_NO_ERROR; } + +void _vcui_view_common_show_noid_image(Evas_Object *layout) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + Evas_Object *noid_icon = NULL; + + noid_icon = edje_object_part_swallow_get(_EDJ(layout), "swl-cid-noid"); + if (noid_icon) { + edje_object_part_unswallow(_EDJ(layout), noid_icon); + evas_object_del(noid_icon); + } + + noid_icon = elm_image_add(ad->win_main); + elm_object_part_content_set(layout, "swl-cid-noid", noid_icon); + elm_image_file_set(noid_icon, MO_NOCALLER_ID_ICON, NULL); + + edje_object_signal_emit(_EDJ(layout), "show-noid-image", "show-noid"); +} + +void _vcui_view_common_update_mute_btn() +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + vcui_app_call_view_id_t view_id = ad->view_top; + voice_call_view_data_t *vd = ad->view_st[view_id]; + VCUI_RETURN_IF_FAIL(vd); + + int valid = 0; + + if (vd->layout) { + if (view_id == VIEW_DIALLING_VIEW) { + valid = _vc_ui_view_dialing_check_valid_eo(vd); + } else if (view_id == VIEW_INCALL_ONECALL_VIEW) { + valid = _vc_ui_view_single_call_check_valid_eo(vd); + } else if (view_id == VIEW_INCALL_MULTICALL_SPLIT_VIEW) { + valid = _vcui_view_multi_call_split_check_valid_eo(vd); + } else if (view_id == VIEW_INCALL_MULTICALL_CONF_VIEW) { + valid = _vcui_view_multi_call_conf_check_valid_eo(vd); + } else if (view_id == VIEW_INCALL_MULTICALL_LIST_VIEW) { + valid = _vcui_view_multi_call_list_check_valid_eo(vd); + } else { + CALL_UI_DEBUG("[============ BAD INPUT!!!! Check Input Layout!!!!! %d============]", view_id); + } + if (valid == -1) { + CALL_UI_DEBUG("[========== WARNING!! Invalid Evas Object ==========]"); + return; + } + } + + _vcui_create_bottom_middle_button(vd); +} + diff --git a/ui/vcui-view-dialing.c b/ui/src/vcui-view-dialing.c similarity index 60% rename from ui/vcui-view-dialing.c rename to ui/src/vcui-view-dialing.c index b18a144..4d8c1b3 100755 --- a/ui/vcui-view-dialing.c +++ b/ui/src/vcui-view-dialing.c @@ -18,6 +18,17 @@ #include "vcui-application.h" #include "vcui-view-dialing.h" #include "vcui-view-elements.h" +#include "vcui-view-common.h" +#include "vcui-app-window.h" +#include "vcui-view-keypad.h" + +#define VIEW_DIALING_LAYOUT_ID "DIALVIEW" +typedef struct { + Evas_Object *contents; + Evas_Object *caller_info; + Evas_Object *btn_ly; + Evas_Object *ic; +} vcui_view_dialing_priv_t; static int __vcui_view_dialing_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); static int __vcui_view_dialing_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); @@ -59,111 +70,20 @@ void _vcui_view_dialing_draw_txt_ended(voice_call_view_data_t *vd, int end_type) } vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv; + vcui_app_call_data_t *ad = _vcui_get_app_data(); int valid = 0; - valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW"); + valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID); if (valid == -1) { CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); } else { char data[VC_DATA_LENGTH_MAX] = { 0, }; - edje_object_part_text_set(_EDJ(priv->contents), "txt_mo_status", _(_vcui_get_endcause_string(end_type, data))); + edje_object_part_text_set(_EDJ(priv->caller_info), "txt_status", _(_vcui_get_endcause_string(end_type, data))); + ad->quickpanel_text = data; } /* ============ Check valid Evas Object ============= */ } -void _vcui_view_dialing_draw_txt_connecting(voice_call_view_data_t *vd) -{ - /* ============ Check valid Evas Object ============= */ - if (vd == NULL) { - CALL_UI_DEBUG("View Data is NULL"); - return; - } - - vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv; - - int valid = 0; - valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - } else { - edje_object_part_text_set(_EDJ(priv->contents), "txt_mo_status", _("IDS_CALL_POP_CONNECTING")); - } - /* ============ Check valid Evas Object ============= */ -} - -void _vcui_view_dialing_draw_txt_dialing(voice_call_view_data_t *vd) -{ - /* ============ Check valid Evas Object ============= */ - if (vd == NULL) { - CALL_UI_DEBUG("View Data is NULL"); - return; - } - - vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv; - - int valid = 0; - valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - } else { - edje_object_part_text_set(_EDJ(priv->contents), "txt_mo_status", _("IDS_CALL_POP_DIALLING")); - } - /* ============ Check valid Evas Object ============= */ -} - -static void __vcui_view_dialing_update_screen(Evas_Object *eo, void *data) -{ - CALL_UI_DEBUG(".."); - - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv; - - call_data_t *now_call_data = _vcui_doc_get_recent_mo(); - - /* ============ Check valid Evas Object ============= */ - int valid = 0; - valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - - if (now_call_data == NULL) { - CALL_UI_DEBUG("Now Data is NULL"); - return; - } - - /* call image */ - if (strcmp((char *)priv->now_data->call_file_path, NOIMG_ICON) == 0) { - _vcui_show_wallpaper_image(priv->contents); - } else { - CALL_UI_DEBUG("there is caller image."); - - _vcui_show_wallpaper_image(priv->contents); - priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, priv->now_data->call_file_path); - } - - /* call name (if nothing, call number) */ - if (strlen((char *)priv->now_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_num); - } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_display); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)priv->now_data->call_num); - } - - _vcui_create_top_left_button_disabled(vd); - _vcui_create_top_middle_button_disabled(vd); - _vcui_create_top_right_button_disabled(vd); - _vcui_create_bottom_left_button(vd); - _vcui_create_bottom_middle_button_disabled(vd); - _vcui_create_bottom_right_button_disabled(vd); - - _vcui_create_button_bigend(vd); - - evas_object_show(eo); -} - static void __vcui_view_dialing_draw_screen(Evas_Object *eo, void *data) { CALL_UI_DEBUG(".."); @@ -171,11 +91,12 @@ static void __vcui_view_dialing_draw_screen(Evas_Object *eo, void *data) voice_call_view_data_t *vd = (voice_call_view_data_t *)data; vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv; - call_data_t *now_call_data = _vcui_doc_get_recent_mo(); + call_data_t *now_call_data = _vcui_doc_get_recent_mo_call_data(); + Eina_Bool bshift_alert = EINA_FALSE; /* ============ Check valid Evas Object ============= */ int valid = 0; - valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW"); + valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID); if (valid == -1) { CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); return; @@ -187,46 +108,57 @@ static void __vcui_view_dialing_draw_screen(Evas_Object *eo, void *data) return; } + char *file_path = _vcui_doc_get_caller_id_file_path(now_call_data); + CALL_UI_DEBUG("file_path: %s", file_path); + /* call image */ - if (strcmp((char *)priv->now_data->call_file_path, NOIMG_ICON) == 0) { - _vcui_show_wallpaper_image(priv->contents); + _vcui_delete_contact_image(priv->contents); + if (strcmp(file_path, NOIMG_ICON) == 0) { + _vcui_view_common_show_noid_image(priv->contents); + bshift_alert = EINA_TRUE; } else { - CALL_UI_DEBUG("there is caller image."); - - _vcui_show_wallpaper_image(priv->contents); - priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, priv->now_data->call_file_path); + { + _vcui_show_wallpaper_image(priv->contents); + priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, file_path); + } } + _vcui_show_call_bg_img(priv->contents); + + char *call_number = _vcui_doc_get_call_number(now_call_data); + char *call_name = _vcui_doc_get_call_display_name(now_call_data); /* call name (if nothing, call number) */ - if (strlen((char *)priv->now_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_num); + if (strlen(call_name) == 0) { + _vcui_show_caller_info_name(vd, call_number, EINA_FALSE); } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_display); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)priv->now_data->call_num); + _vcui_show_caller_info_name(vd, call_name, EINA_FALSE); + _vcui_show_caller_info_number(vd, call_number, EINA_FALSE); } - edje_object_part_text_set(_EDJ(priv->contents), "txt_mo_status", _("IDS_CALL_POP_DIALLING")); + _vcui_show_caller_info_icon(vd, EINA_FALSE); + _vcui_show_caller_info_status(vd, _("IDS_CALL_POP_CALLING"), EINA_FALSE); _vcui_create_top_left_button_disabled(vd); - _vcui_create_top_middle_button_disabled(vd); - _vcui_create_top_right_button_disabled(vd); + _vcui_create_top_middle_button(vd); + _vcui_create_top_right_button(vd); _vcui_create_bottom_left_button(vd); _vcui_create_bottom_middle_button_disabled(vd); - _vcui_create_bottom_right_button_disabled(vd); - _vcui_create_button_bigend(vd); + _vcui_create_bottom_right_button(vd); + + _vcui_elements_check_keypad_n_hide(vd); evas_object_show(eo); } -static Evas_Object *__vcui_view_dialing_create_contents(void *data) +static Evas_Object *__vcui_view_dialing_create_contents(void *data, char *grpname) { CALL_UI_KPI("__vcui_view_dialing_create_contents start"); voice_call_view_data_t *vd = (voice_call_view_data_t *)data; Evas_Object *eo = NULL; /* load edje */ - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_MOVIEW); + eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grpname); if (eo == NULL) return NULL; CALL_UI_KPI("__vcui_view_dialing_create_contents done"); @@ -262,6 +194,7 @@ static int __vcui_view_dialing_oncreate(voice_call_view_data_t *view_data, int p vcui_app_call_data_t *ad = view_data->app_data; vcui_view_dialing_priv_t *priv = view_data->priv; + Evas_Object *sep_ly = NULL; if (!view_data->layout) { @@ -273,10 +206,19 @@ static int __vcui_view_dialing_oncreate(voice_call_view_data_t *view_data, int p return VC_ERROR; } /* Create Contents */ - priv->contents = __vcui_view_dialing_create_contents(view_data); + priv->contents = __vcui_view_dialing_create_contents(view_data, GRP_MOVIEW); elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); - evas_object_name_set(priv->contents, "DIALVIEW"); + priv->caller_info = __vcui_view_dialing_create_contents(view_data, GRP_CALLER_INFO); + elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info); + + sep_ly = __vcui_view_dialing_create_contents(view_data, GRP_SEPARATOR_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_bg", sep_ly); + + priv->btn_ly = __vcui_view_dialing_create_contents(view_data, GRP_BUTTON_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly); + + evas_object_name_set(priv->contents, VIEW_DIALING_LAYOUT_ID); CALL_UI_DEBUG("[========== DIALVIEW: priv->contents Addr : [%p] ==========]", priv->contents); } @@ -289,7 +231,7 @@ static int __vcui_view_dialing_onupdate(voice_call_view_data_t *view_data, void CALL_UI_DEBUG("dialling view update"); vcui_view_dialing_priv_t *priv = view_data->priv; - __vcui_view_dialing_update_screen(priv->contents, view_data); + __vcui_view_dialing_draw_screen(priv->contents, view_data); return VC_NO_ERROR; } @@ -299,7 +241,7 @@ static int __vcui_view_dialing_onhide(voice_call_view_data_t *view_data) int valid = 0; vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)view_data->priv; - valid = _vcui_check_valid_eo(priv->contents, "DIALVIEW"); + valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID); if (valid == -1) { CALL_UI_DEBUG("[========== DIALVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); @@ -315,11 +257,6 @@ static int __vcui_view_dialing_onshow(voice_call_view_data_t *view_data) CALL_UI_DEBUG("dialling view show"); vcui_view_dialing_priv_t *priv = view_data->priv; - priv->now_data = _vcui_doc_get_recent_mo(); - if (priv->now_data == NULL) { - CALL_UI_DEBUG("call data is null"); - return VC_ERROR; - } __vcui_view_dialing_draw_screen(priv->contents, view_data); @@ -346,6 +283,19 @@ static int __vcui_view_dialing_ondestroy(voice_call_view_data_t *view_data) vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *)vd->priv; if (priv != NULL) { + if (priv->btn_ly) { + evas_object_del(priv->btn_ly); + priv->btn_ly = NULL; + } + + if (priv->caller_info) { + evas_object_del(priv->caller_info); + priv->caller_info = NULL; + } + + /*Delete keypad layout*/ + _vcui_keypad_delete_layout(priv->contents); + if (priv->contents) { evas_object_del(priv->contents); priv->contents = NULL; @@ -366,3 +316,55 @@ static int __vcui_view_dialing_ondestroy(voice_call_view_data_t *view_data) _vcui_cache_flush(); return VC_NO_ERROR; } + +int _vc_ui_view_dialing_check_valid_eo(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + vcui_view_dialing_priv_t *priv = NULL; + int valid = -1; + + VCUI_RETURN_VALUE_IF_FAIL(vd , -1); + priv = (vcui_view_dialing_priv_t *) vd->priv; + + valid = _vcui_check_valid_eo(priv->contents, VIEW_DIALING_LAYOUT_ID); + + return valid; +} + +Evas_Object *_vc_ui_view_dialing_get_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_dialing_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_dialing_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->contents; +} + +Evas_Object *_vc_ui_view_dialing_get_button_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_dialing_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_dialing_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->btn_ly; +} + +Evas_Object *_vc_ui_view_dialing_get_caller_info(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_dialing_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_dialing_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->caller_info; +} + diff --git a/ui/src/vcui-view-elements.c b/ui/src/vcui-view-elements.c new file mode 100755 index 0000000..cc56ac5 --- /dev/null +++ b/ui/src/vcui-view-elements.c @@ -0,0 +1,1575 @@ +/* + * 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 "vcui-application.h" +#include "vcui-view-elements.h" +#include "vcui-view-dialing.h" +#include "vcui-view-single-call.h" +#include "vcui-view-multi-call-conf.h" +#include "vcui-view-multi-call-split.h" +#include "vcui-view-multi-call-list.h" +#include "vcui-view-keypad.h" +#include "vcui-view-incoming-lock.h" +#include "vcui-view-callend.h" +#include "vcui-view-quickpanel.h" +#include "vcui-view-popup.h" + +static void __vcui_hold_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_unhold_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_join_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_keypad_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_contacts_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_addcall_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_sound_path_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_spk_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_spk_press_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_mute_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_bigend_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_videocall_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_voicecall_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_msg_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __vcui_hold_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + vcall_engine_process_hold_call(); +} + +static void __vcui_unhold_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + vcall_engine_process_hold_call(); +} + +void _vcui_swap_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + ad->bholdisleft = ad->bswapped; + _vcui_view_popup_load(_("IDS_CALL_POP_SWAPPED"), POPUP_TIMEOUT_LONG, EINA_FALSE); + vcall_engine_process_hold_call(); +} + +static void __vcui_join_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + _vcui_create_top_left_button_disabled(data); + vcall_engine_join_call(); +} + +void _vcui_conf_img_cb(void *data, Evas_Object *obj, void *event_info) +{ /* for multicall list view */ + CALL_UI_DEBUG(".."); + _vcui_view_change(VIEW_INCALL_MULTICALL_LIST_VIEW, 0, 0, 0); +} + +static void __vcui_keypad_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + Evas_Object *view_ly = NULL; + + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + view_ly = _vc_ui_view_dialing_get_layout(vd); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + view_ly = _vc_ui_view_single_call_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + view_ly = _vcui_view_multi_call_split_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + view_ly = _vcui_view_multi_call_conf_get_main_layout(vd); + } + break; + default: + CALL_UI_DEBUG("code should never reach here"); + return; + } + + if (_vcui_keypad_get_show_status() == EINA_FALSE) { /*show keypad region*/ + CALL_UI_DEBUG(".."); + + /*Hide caller info area*/ + edje_object_signal_emit(_EDJ(view_ly), "HIDE", "CALL_AREA"); + edje_object_signal_emit(_EDJ(view_ly), "HIDE_NOISE_REDUCTIION", "NOISE_REDUCTIION"); + edje_object_signal_emit(_EDJ(view_ly), "HIDE_SOUND_EQ", "SOUND_EQ"); + + /*Show keypad layout - ON view*/ + edje_object_signal_emit(_EDJ(view_ly), "SHOW", "KEYPAD_BTN"); + + /*Actual show with animation*/ + _vcui_keypad_show_layout(vd); + + elm_object_text_set(obj, dgettext("sys_string", "IDS_COM_SK_HIDE")); + + _vcui_keypad_set_show_status(EINA_TRUE); + } else { + CALL_UI_DEBUG(".."); + + /*Hide animation on keypad*/ + _vcui_keypad_show_hide_effect(vd, view_ly); + + /*Set keypad text*/ + elm_object_text_set(obj, _("IDS_CALL_SK3_KEYPAD")); + + /*Set keypad status flag*/ + _vcui_keypad_set_show_status(EINA_FALSE); + } +} + +static void __vcui_contacts_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + if (ad->beffect_show == EINA_TRUE) { + ad->bcontact_clicked = EINA_TRUE; + } else { + _vcui_doc_launch_contact_list_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data)); + } +} + +static void __vcui_addcall_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + if (ad->beffect_show == EINA_TRUE) { + ad->badd_call_clicked = EINA_TRUE; + } else { + _vcui_doc_launch_phoneui_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data)); + } +} + +static void __vcui_sound_path_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + _vcui_view_popup_load_snd_path(data); +} + +/* #define RCS_TEST */ + +static void __vcui_spk_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + CALL_UI_DEBUG("vd->type:[%d]", vd->type); + + vcall_engine_process_loudspeaker(EINA_TRUE); + + ad->speaker_status = EINA_TRUE; + _vcui_create_bottom_left_button(vd); + +} + +static void __vcui_spk_press_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + CALL_UI_DEBUG("vd->type:[%d]", vd->type); + + vcall_engine_process_loudspeaker(EINA_FALSE); + + ad->speaker_status = EINA_FALSE; + _vcui_create_bottom_left_button(vd); + +} + +static void __vcui_mute_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + CALL_UI_DEBUG("vd->type:[%d]", vd->type); + + vcall_engine_process_voice_mute(EINA_TRUE); + + ad->mute_status = EINA_TRUE; + if (vd->type == VIEW_QUICKPANEL_VIEW) { + _vcui_view_common_update_mute_btn(); + } else { + _vcui_create_bottom_middle_button(vd); + } + _vcui_create_quickpanel_mute_button(vd); + +} + +static void __vcui_mute_press_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + CALL_UI_DEBUG("vd->type:[%d]", vd->type); + + vcall_engine_process_voice_mute(EINA_FALSE); + + ad->mute_status = EINA_FALSE; + + if (vd->type == VIEW_QUICKPANEL_VIEW) { + _vcui_view_common_update_mute_btn(); + } else { + _vcui_create_bottom_middle_button(vd); + } + _vcui_create_quickpanel_mute_button(vd); + +} + +static void __vcui_bigend_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + CALL_UI_DEBUG("vd->type:[%d]", vd->type); + + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + vcall_engine_cancel_call(); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + vcall_engine_release_call(); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + int call_status = -1; + call_status = _vcui_view_multi_call_conf_get_call_status(vd); + if (call_status == CALL_HOLD) + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_HELD_CALLS); + else if (call_status == CALL_UNHOLD) + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS); + ad->call_end_type = CALL_END_TYPE_CONF_CALL; + } + break; + case VIEW_INCALL_MULTICALL_LIST_VIEW: + { + int call_status = -1; + call_status = _vcui_view_multi_call_list_get_call_status(vd); + if (call_status == CALL_HOLD) + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_HELD_CALLS); + else if (call_status == CALL_UNHOLD) + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS); + int grp_count = 0; + vcall_engine_get_group_count(&grp_count); + CALL_UI_DEBUG("No. of groups - %d", grp_count); + if (grp_count == 1) + ad->call_end_type = CALL_END_TYPE_CONF_CALL; + else + ad->call_end_type = CALL_END_TYPE_NONE; + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return; + break; + + } +} + +Evas_Object *__vcui_create_button_style(void *data, Evas_Object **p_button, char *part_name) +{ + Evas_Object *layout; + Evas_Object *sw; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + layout = _vc_ui_view_dialing_get_button_layout(vd); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + layout = _vc_ui_view_single_call_get_button_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + layout = _vcui_view_multi_call_split_get_button_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + layout = _vcui_view_multi_call_conf_get_button_layout(vd); + } + break; + case VIEW_ENDCALL_VIEW: + { + layout = _vc_ui_view_callend_get_button_layout(vd); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + + } + + sw = edje_object_part_swallow_get(_EDJ(layout), part_name); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + *p_button = elm_button_add(layout); + elm_object_part_content_set(layout, part_name, *p_button); + + return layout; +} + +/* Add-Call/Join button ENABLED*/ +Evas_Object *_vcui_create_top_left_button(void *data) +{ + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + Evas_Object *btn; + Evas_Object *layout; + Eina_Bool bjoin = EINA_FALSE; + + if (vd->type == VIEW_INCALL_MULTICALL_SPLIT_VIEW) + bjoin = EINA_TRUE; + + layout = __vcui_create_button_style(data, &btn, "top_left_button"); + { + if (bjoin) { + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_join"); + elm_object_style_set(btn, "style_call_sixbtn_join"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_join"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_JOIN")); + evas_object_smart_callback_add(btn, "clicked", __vcui_join_btn_cb, vd); + } else { + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_add"); + elm_object_style_set(btn, "style_call_sixbtn_add"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_add"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_ADD_CALL")); + evas_object_smart_callback_add(btn, "clicked", __vcui_addcall_btn_cb, data); + } + } + return btn; +} + +/* Add-Call/Join Button DISABLED */ +Evas_Object *_vcui_create_top_left_button_disabled(void *data) +{ + CALL_UI_KPI("_vcui_create_top_left_button_disabled start"); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + Evas_Object *btn; + Evas_Object *layout; + Eina_Bool bjoin = EINA_FALSE; + + if (vd->type == VIEW_INCALL_MULTICALL_SPLIT_VIEW) + bjoin = EINA_TRUE; + + layout = __vcui_create_button_style(data, &btn, "top_left_button"); + { + if (bjoin) { + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled_join"); + elm_object_style_set(btn, "style_call_sixbtn_disabled_join"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled_join"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_JOIN")); + } else { + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled_add"); + elm_object_style_set(btn, "style_call_sixbtn_disabled_add"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled_add"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_ADD_CALL")); + } + } + + CALL_UI_KPI("_vcui_create_top_left_button_disabled done"); + + return btn; +} + +/* Keypad Button ENABLED */ +Evas_Object *_vcui_create_top_middle_button(void *data) +{ + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *view_ly = NULL; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + layout = __vcui_create_button_style(data, &btn, "top_middle_button"); + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_keypad"); + elm_object_style_set(btn, "style_call_sixbtn_keypad"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_keypad"); + + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + view_ly = _vc_ui_view_dialing_get_layout(vd); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + view_ly = _vc_ui_view_single_call_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + view_ly = _vcui_view_multi_call_split_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + view_ly = _vcui_view_multi_call_conf_get_main_layout(vd); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + } + + /*Create keypad layout*/ + _vcui_keypad_create_layout(vd, view_ly); + if (_vcui_keypad_get_show_status() == EINA_FALSE) { + elm_object_text_set(btn, _("IDS_CALL_SK3_KEYPAD")); + } else { + elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_SK_HIDE")); + } + evas_object_smart_callback_add(btn, "clicked", __vcui_keypad_btn_cb, data); + + return btn; +} + +/* Keypad Button DISABLED */ +Evas_Object *_vcui_create_top_middle_button_disabled(void *data) +{ + CALL_UI_KPI("_vcui_create_top_middle_button_disabled start"); + Evas_Object *btn; + Evas_Object *layout; + + layout = __vcui_create_button_style(data, &btn, "top_middle_button"); + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled_keypad"); + elm_object_style_set(btn, "style_call_sixbtn_disabled_keypad"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled_keypad"); + elm_object_text_set(btn, _("IDS_CALL_SK3_KEYPAD")); + CALL_UI_KPI("_vcui_create_top_middle_button_disabled done"); + + return btn; +} + +/* End Call Button ENABLED */ +Evas_Object *_vcui_create_top_right_button(void *data) +{ + Evas_Object *btn; + Evas_Object *layout; + + layout = __vcui_create_button_style(data, &btn, "top_right_button"); + elm_object_style_set(btn, "style_call_sixbtn_end"); + elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL")); + evas_object_smart_callback_add(btn, "clicked", __vcui_bigend_btn_cb, data); + + return btn; +} + +/* End Call Button DISABLED */ +Evas_Object *_vcui_create_top_right_button_disabled(void *data) +{ + Evas_Object *btn; + Evas_Object *layout; + + layout = __vcui_create_button_style(data, &btn, "top_right_button"); + elm_object_style_set(btn, "style_call_sixbtn_disabled_end"); + elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL")); + + return btn; +} + +/* Speaker Button ENABLED */ +Evas_Object *_vcui_create_bottom_left_button(void *data) +{ + CALL_UI_KPI("_vcui_create_bottom_left_button start"); + Evas_Object *btn; + Evas_Object *layout; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + layout = __vcui_create_button_style(data, &btn, "bottom_left_button"); + if (EINA_TRUE == _vcui_is_headset_conected()) { + elm_object_style_set(btn, "style_call_sixbtn_speaker"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_SOUND_ABB")); + evas_object_smart_callback_add(btn, "clicked", __vcui_sound_path_btn_cb, vd); + } else { + elm_object_text_set(btn, _("IDS_CALL_BUTTON_SPEAKER")); + if (ad->speaker_status == EINA_FALSE) { + elm_object_style_set(btn, "style_call_sixbtn_speaker"); + evas_object_smart_callback_add(btn, "clicked", __vcui_spk_btn_cb, vd); + } else { + elm_object_style_set(btn, "style_call_sixbtn_speaker_on"); + evas_object_smart_callback_add(btn, "clicked", __vcui_spk_press_btn_cb, vd); + } + } + CALL_UI_KPI("_vcui_create_bottom_left_button done"); + + return btn; +} + +/* Speaker Button DISABLED */ +Evas_Object *_vcui_create_bottom_left_button_disabled(void *data) +{ + CALL_UI_KPI("_vcui_create_bottom_left_button_disabled start"); + Evas_Object *btn; + Evas_Object *layout; + + layout = __vcui_create_button_style(data, &btn, "bottom_left_button"); + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled_speaker"); + elm_object_style_set(btn, "style_call_sixbtn_disabled_speaker"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled_speaker"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_SPEAKER")); + CALL_UI_KPI("_vcui_create_bottom_left_button_disabled done"); + + return btn; +} + +/* Mute Button ENABLED */ +Evas_Object *_vcui_create_bottom_middle_button(void *data) +{ + Evas_Object *btn; + Evas_Object *layout; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + layout = __vcui_create_button_style(data, &btn, "bottom_middle_button"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_MUTE_ABB")); + if (ad->mute_status == EINA_FALSE) { + elm_object_style_set(btn, "style_call_sixbtn_mute"); + evas_object_smart_callback_add(btn, "clicked", __vcui_mute_btn_cb, vd); + } else { + elm_object_style_set(btn, "style_call_sixbtn_mute_on"); + evas_object_smart_callback_add(btn, "clicked", __vcui_mute_press_btn_cb, vd); + } + + return btn; +} + +/* Mute Button DISABLED */ +Evas_Object *_vcui_create_bottom_middle_button_disabled(void *data) +{ + CALL_UI_KPI("_vcui_create_bottom_middle_button_disabled start"); + Evas_Object *btn; + Evas_Object *layout; + + layout = __vcui_create_button_style(data, &btn, "bottom_middle_button"); + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled_mute"); + elm_object_style_set(btn, "style_call_sixbtn_disabled_mute"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled_mute"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_MUTE_ABB")); + CALL_UI_KPI("_vcui_create_bottom_middle_button_disabled done"); + + return btn; +} + +/* Share/Contacts Button ENABLED */ +Evas_Object *_vcui_create_bottom_right_button(void *data) +{ + Evas_Object *btn; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + __vcui_create_button_style(data, &btn, "bottom_right_button"); + + { + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_contacts"); + elm_object_style_set(btn, "style_call_sixbtn_contacts"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_contacts"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_CONTACTS")); + evas_object_smart_callback_add(btn, "clicked", __vcui_contacts_btn_cb, vd); + } + + return btn; +} + +/* Share/Contacts Button DISABLED */ +Evas_Object *_vcui_create_bottom_right_button_disabled(void *data) +{ + CALL_UI_KPI("_vcui_create_bottom_right_button_disabled start"); + Evas_Object *btn; + + __vcui_create_button_style(data, &btn, "bottom_right_button"); + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled"); + + { + CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled_contacts"); + elm_object_style_set(btn, "style_call_sixbtn_disabled_contacts"); + CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled_contacts"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_CONTACTS")); + } + + CALL_UI_KPI("_vcui_create_bottom_right_button_disabled done"); + + return btn; +} + +Evas_Object *_vcui_create_hold_swap_button(void *data) +{ + Evas_Object *btn; + Evas_Object *ic; + Evas_Object *layout; + Evas_Object *sw; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + int call_status = 0; + Eina_Bool bswap_button = EINA_FALSE; + Eina_Bool bhold_button = EINA_FALSE; + + switch (vd->type) { + case VIEW_INCALL_ONECALL_VIEW: + { + layout = _vc_ui_view_single_call_get_layout(vd); + call_status = _vc_ui_view_single_call_get_call_status(vd); + bhold_button = EINA_TRUE; + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + layout = _vcui_view_multi_call_conf_get_main_layout(vd); + call_status = _vcui_view_multi_call_conf_get_call_status(vd); + bhold_button = EINA_TRUE; + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + layout = _vcui_view_multi_call_split_get_layout(vd); + bswap_button = EINA_TRUE; + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + } + CALL_UI_DEBUG("vd type:[%d], call_status:[%d]", vd->type, call_status); + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_hold_swap"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_hold_swap", btn); + ic = elm_image_add(layout); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_resizable_set(ic, 1, 1); + elm_object_content_set(btn, ic); + + if (bhold_button) { + elm_object_style_set(btn, "style_normal_holdbtn"); + if (call_status == CALL_UNHOLD) { + elm_image_file_set(ic, HOLD_ICON, NULL); + edje_object_part_text_set(_EDJ(layout), "txt_hold_swap", _("IDS_CALL_BUTTON_HOLD")); + evas_object_smart_callback_add(btn, "clicked", __vcui_hold_btn_cb, vd); + } else { /* CALL_HOLD */ + elm_image_file_set(ic, UNHOLD_ICON, NULL); + edje_object_part_text_set(_EDJ(layout), "txt_hold_swap", _("IDS_CALL_BUTTON_UNHOLD")); + evas_object_smart_callback_add(btn, "clicked", __vcui_unhold_btn_cb, vd); + } + } else if (bswap_button) { + elm_object_style_set(btn, "style_normal_swapbtn"); + elm_image_file_set(ic, SWAP_ICON, NULL); + edje_object_part_text_set(_EDJ(layout), "txt_hold_swap", _("Swap")); + evas_object_smart_callback_add(btn, "clicked", _vcui_swap_btn_cb, vd); + } + + return layout; +} + +Evas_Object *_vcui_create_button_bigend(void *data) +{ + CALL_UI_KPI("_vcui_create_button_bigend start"); + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *sw; + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + layout = _vc_ui_view_dialing_get_layout(vd); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + layout = _vc_ui_view_single_call_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + layout = _vcui_view_multi_call_split_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + layout = _vcui_view_multi_call_conf_get_main_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_LIST_VIEW: + { + layout = _vcui_view_multi_call_list_get_main_layout(vd); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + + } + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_bigend"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_bigend", btn); + CALL_UI_KPI("elm_object_style_set start :: style_call_text_only_red"); + elm_object_style_set(btn, "style_call_text_only_red"); + CALL_UI_KPI("elm_object_style_set done :: style_call_text_only_red"); + elm_object_text_set(btn, _("IDS_CALL_OPT_END_ALL_CALLS")); + evas_object_smart_callback_add(btn, "clicked", __vcui_bigend_btn_cb, vd); + CALL_UI_KPI("_vcui_create_button_bigend done"); + return layout; +} + +Evas_Object *_vcui_create_button_bigend_disabled(void *data) +{ + CALL_UI_KPI("_vcui_create_button_bigend_disabled start"); + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *sw; + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + layout = _vc_ui_view_dialing_get_layout(vd); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + layout = _vc_ui_view_single_call_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + layout = _vcui_view_multi_call_split_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + layout = _vcui_view_multi_call_conf_get_main_layout(vd); + } + break; + case VIEW_ENDCALL_VIEW: + { + layout = _vc_ui_view_callend_get_layout(vd); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + + } + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_bigend"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_bigend", btn); + CALL_UI_KPI("elm_object_style_set start :: style_call_text_only_red_disabled"); + elm_object_style_set(btn, "style_call_text_only_red_disabled"); + CALL_UI_KPI("elm_object_style_set done :: style_call_text_only_red_disabled"); + elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL")); + CALL_UI_KPI("_vcui_create_button_bigend_disabled done"); + return layout; +} + +Evas_Object *_vcui_create_conf_list_button_hold(void *data) +{ + Evas_Object *btn; + Evas_Object *ic; + Evas_Object *layout; + Evas_Object *sw; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + int call_status = 0; + switch (vd->type) { + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + layout = _vcui_view_multi_call_conf_get_main_layout(vd); + call_status = _vcui_doc_get_group_call_status(); + } + break; + case VIEW_INCALL_MULTICALL_LIST_VIEW: + { + layout = _vcui_view_multi_call_list_get_main_layout(vd); + call_status = _vcui_doc_get_group_call_status(); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + + } + CALL_UI_DEBUG("vd type:[%d], call_status:[%d]", vd->type, call_status); + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_hold"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + CALL_UI_KPI("elm_object_style_set start :: style_list_holdbtn"); + elm_object_style_set(btn, "style_list_holdbtn"); + CALL_UI_KPI("elm_object_style_set done :: style_list_holdbtn"); + elm_object_part_content_set(layout, "btn_hold", btn); + ic = elm_image_add(layout); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_resizable_set(ic, 1, 1); + elm_object_content_set(btn, ic); + + if (call_status == CALL_UNHOLD) { + elm_image_file_set(ic, HOLD_ICON, NULL); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_HOLD")); + + evas_object_smart_callback_add(btn, "clicked", __vcui_hold_btn_cb, vd); + } else { /* CALL_HOLD */ + elm_image_file_set(ic, UNHOLD_ICON, NULL); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_UNHOLD")); + + evas_object_smart_callback_add(btn, "clicked", __vcui_unhold_btn_cb, vd); + } + + return layout; +} + +Evas_Object *_vcui_show_wallpaper_image(Evas_Object *contents) +{ + Evas_Object *d_image = NULL; + return d_image; +} + +void _vcui_delete_contact_image(Evas_Object *contents) +{ + Evas_Object *sw; + + sw = edje_object_part_swallow_get(_EDJ(contents), "swl_cid"); + if (sw) { + edje_object_part_unswallow(_EDJ(contents), sw); + evas_object_del(sw); + } +} + +Evas_Object *_vcui_show_contact_image(Evas_Object *contents, Evas_Object *win_main, char *path) +{ + Evas_Object *sw; + Evas_Object *ic; + + sw = edje_object_part_swallow_get(_EDJ(contents), "swl_cid"); + if (sw) { + edje_object_part_unswallow(_EDJ(contents), sw); + evas_object_del(sw); + } + + ic = elm_image_add(win_main); + elm_object_part_content_set(contents, "swl_cid", ic); + elm_image_file_set(ic, path, NULL); + + return ic; +} + +Evas_Object *_vcui_show_default_image(Evas_Object *contents, Evas_Object *win_main, char *path) +{ + Evas_Object *sw; + Evas_Object *ic; + + sw = edje_object_part_swallow_get(_EDJ(contents), "swl_cid"); + if (sw) { + edje_object_part_unswallow(_EDJ(contents), sw); + evas_object_del(sw); + } + + ic = elm_image_add(win_main); + elm_object_part_content_set(contents, "swl_cid", ic); + elm_image_file_set(ic, path, NULL); + + return ic; +} + +static void __vcui_more_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG("__vcui_more_btn_cb.."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + _vcui_view_popup_load_more_option(data); +} + +static void __vcui_videocall_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG("__vcui_videocall_btn_cb.."); + char *tel_num = (char *)data; + + bundle *kb; + kb = bundle_create(); + bundle_add(kb, "KEY_CALL_TYPE", "MO"); + bundle_add(kb, "number", tel_num); + aul_launch_app("org.tizen.vtmain", kb); + bundle_free(kb); + + free(tel_num); + tel_num = NULL; + + _vcui_view_common_call_end_timer_reset(); + evas_object_smart_callback_del(obj, "clicked", __vcui_videocall_btn_cb); +} + +static void __vcui_voicecall_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG("__vcui_voicecall_btn_cb.."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + char *tel_num = (char *)data; + vcui_call_mo_data_t call_data; + + _vcui_view_common_timer_redial_reset(); + ad->speaker_status = EINA_FALSE; + ad->mute_status = EINA_FALSE; + ad->wbamr_status = EINA_FALSE; + + memset(&call_data, 0, sizeof(call_data)); + + snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tel_num); + call_data.ct_index = -1; + + vcall_engine_process_normal_call(call_data.call_number, call_data.ct_index, EINA_FALSE); + + free(tel_num); + tel_num = NULL; + + evas_object_smart_callback_del(obj, "clicked", __vcui_voicecall_btn_cb); +} + +static void __vcui_msg_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG("__vcui_msg_btn_cb.."); + char *tel_num = (char *)data; + + _vcui_doc_launch_msg_composer(NULL, tel_num); + + free(tel_num); + tel_num = NULL; + + _vcui_view_common_call_end_timer_reset(); + evas_object_smart_callback_del(obj, "clicked", __vcui_msg_btn_cb); +} + +static void __vcui_add_to_contacts_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = ad->view_st[VIEW_ENDCALL_VIEW]; + char *tel_num = (char *)data; + + _vcui_doc_launch_add_to_contacts_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data), tel_num); + + free(tel_num); + tel_num = NULL; + + evas_object_smart_callback_del(obj, "clicked", __vcui_add_to_contacts_btn_cb); +} + +static void __vcui_view_contact_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = ad->view_st[VIEW_ENDCALL_VIEW]; + + _vcui_doc_launch_view_contact_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data), data); + + evas_object_smart_callback_del(obj, "clicked", __vcui_view_contact_btn_cb); +} + +Evas_Object *_vcui_create_videocall_button(void *data, char *number) +{ + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *sw; + voice_call_view_data_t *vd = NULL; + char *tel_number = NULL; + + VCUI_RETURN_NULL_IF_FAIL((vd = (voice_call_view_data_t *)data) != NULL); + layout = _vc_ui_view_callend_get_layout(vd); + + tel_number = strdup(number); + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_videocall"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_videocall", btn); + elm_object_style_set(btn, "style_call_end_video_call_button"); + + elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")); + evas_object_smart_callback_add(btn, "clicked", __vcui_videocall_btn_cb, tel_number); + + return layout; +} + +Evas_Object *_vcui_create_voicecall_button(void *data, char *number) +{ + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *sw; + voice_call_view_data_t *vd = NULL; + char *tel_number = NULL; + + VCUI_RETURN_NULL_IF_FAIL((vd = (voice_call_view_data_t *)data) != NULL); + layout = _vc_ui_view_callend_get_layout(vd); + + tel_number = strdup(number); + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_voicecall"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_voicecall", btn); + elm_object_style_set(btn, "style_call_end_voice_call_button"); + + elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_BODY_VOICE_CALL")); + evas_object_smart_callback_add(btn, "clicked", __vcui_voicecall_btn_cb, tel_number); + + return layout; +} + +Evas_Object *_vcui_create_message_button(void *data, char *number) +{ + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *sw; + voice_call_view_data_t *vd = NULL; + char *tel_number = NULL; + + VCUI_RETURN_NULL_IF_FAIL((vd = (voice_call_view_data_t *)data) != NULL); + layout = _vc_ui_view_callend_get_layout(vd); + + tel_number = strdup(number); + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_message"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_message", btn); + elm_object_style_set(btn, "style_call_end_message_button"); + + elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_BODY_MESSAGE")); + evas_object_smart_callback_add(btn, "clicked", __vcui_msg_btn_cb, tel_number); + + return layout; +} + +Evas_Object *_vcui_create_add_to_contacts_button(void *data, char *number) +{ + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *sw; + char *tel_number = strdup(number); + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + switch (vd->type) { + case VIEW_ENDCALL_VIEW: + { + layout = _vc_ui_view_callend_get_layout(vd); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + if (tel_number != NULL) { + free(tel_number); + tel_number = NULL; + } + return NULL; + break; + + } + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_contacts"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_contacts", btn); + elm_object_style_set(btn, "style_call_text_only_grey"); + elm_object_text_set(btn, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")); + evas_object_smart_callback_add(btn, "clicked", __vcui_add_to_contacts_btn_cb, tel_number); + + return layout; +} + +Evas_Object *_vcui_create_view_contact_button(void *data, int ct_id) +{ + Evas_Object *btn; + Evas_Object *layout; + Evas_Object *sw; + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + switch (vd->type) { + case VIEW_ENDCALL_VIEW: + { + layout = _vc_ui_view_callend_get_layout(vd); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + + } + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_contacts"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_contacts", btn); + elm_object_style_set(btn, "style_call_text_only_grey"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_VIEW_CONTACT")); + evas_object_smart_callback_add(btn, "clicked", __vcui_view_contact_btn_cb, (void *)ct_id); + + return layout; +} + +static void __qp_end_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + int grp_count = 0; + + vcall_engine_get_group_count(&grp_count); + CALL_UI_DEBUG("No. of groups - %d", grp_count); + + if (grp_count > 1) { + CALL_UI_DEBUG("multi-party call"); + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS); + } else if (grp_count == 1) { + CALL_UI_DEBUG("single-party call"); + int all_calls = 0, call_status = 0; + all_calls = _vcui_doc_get_all_call_data_count(); + call_status = _vcui_doc_get_group_call_status(); + CALL_UI_DEBUG("all_calls[%d], call_status[%d]", all_calls, call_status); + + if (all_calls > 1) { + CALL_UI_DEBUG("End active conference call"); + if (call_status == CALL_HOLD) + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_HELD_CALLS); + else + vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS); + ad->call_end_type = CALL_END_TYPE_CONF_CALL; /*conf call end screen SHOW */ + } else if (all_calls == 1) { + CALL_UI_DEBUG("End single active call"); + vcall_engine_release_call(); + } else { + CALL_UI_DEBUG("invalid case"); + } + } else { + CALL_UI_DEBUG("dialing/connecting screen end"); + vcall_engine_cancel_call(); + } +} + +Evas_Object *_vcui_create_quickpanel_mute_button(void *data) +{ + CALL_UI_DEBUG(".."); + Evas_Object *btn, *layout, *sw; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + CALL_UI_DEBUG("vd->type: %d", vd->type); + + layout = ad->quickpanel_layout; + VCUI_RETURN_NULL_IF_FAIL(layout); + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_left"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + + elm_object_part_content_set(layout, "btn_left", btn); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_MUTE_ABB")); + + if (ad->mute_status == EINA_FALSE) { + elm_object_style_set(btn, "style_call_qp_text_only_normal"); + evas_object_smart_callback_add(btn, "clicked", __vcui_mute_btn_cb, vd); + } else { + Evas_Object *ic = elm_image_add(layout); + elm_image_file_set(ic, QP_MUTE_ICON, NULL); + elm_object_content_set(btn, ic); + + elm_object_style_set(btn, "style_call_small_text_with_icon"); + evas_object_smart_callback_add(btn, "clicked", __vcui_mute_press_btn_cb, vd); + } + + return layout; +} + +Evas_Object *_vcui_create_quickpanel_unhold_button(void *data) +{ + CALL_UI_DEBUG(".."); + Evas_Object *btn, *layout, *sw; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + CALL_UI_DEBUG("vd->type: %d", vd->type); + + layout = ad->quickpanel_layout; + VCUI_RETURN_NULL_IF_FAIL(layout); + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_left"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_left", btn); + elm_object_style_set(btn, "style_call_qp_text_only_normal"); + + elm_object_text_set(btn, _("IDS_CALL_BUTTON_UNHOLD")); + evas_object_smart_callback_add(btn, "clicked", __vcui_hold_btn_cb, vd); + + return layout; +} + +Evas_Object *_vcui_create_quickpanel_end_button(void *data) +{ + CALL_UI_DEBUG(".."); + Evas_Object *btn, *layout, *sw; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + CALL_UI_DEBUG("vd->type: %d", vd->type); + + switch (vd->type) { + case VIEW_QUICKPANEL_VIEW: + { + layout = ad->quickpanel_layout; + } + break; + + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + return NULL; + break; + + } + + sw = edje_object_part_swallow_get(_EDJ(layout), "btn_right"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_right", btn); + elm_object_style_set(btn, "style_call_qp_text_only_end"); + elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL")); + evas_object_smart_callback_add(btn, "clicked", __qp_end_btn_cb, vd); + + return layout; +} + +static Evas_Object *__vcui_create_caller_info(void *data, Eina_Bool bhold) +{ + Evas_Object *caller_info = NULL; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + caller_info = _vc_ui_view_dialing_get_caller_info(vd); + } + break; + case VIEW_INCOMING_LOCK_VIEW: + { + caller_info = _vc_ui_view_incoming_lock_get_caller_info(vd); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + caller_info = _vc_ui_view_single_call_get_caller_info(vd); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + caller_info = _vc_ui_view_multi_call_conf_get_caller_info(vd); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + if (bhold == EINA_TRUE) { + caller_info = _vc_ui_view_multi_call_split_get_caller_info_hold(vd); + } else { + caller_info = _vc_ui_view_multi_call_split_get_caller_info_unhold(vd); + } + } + break; + case VIEW_ENDCALL_VIEW: + { + caller_info = _vc_ui_view_callend_get_caller_info(vd); + } + break; + default: + CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); + break; + } + + return caller_info; +} + + +/* Caller info name or number*/ +void _vcui_show_caller_info_name(void *data, const char *name, Eina_Bool bhold) +{ + Evas_Object *layout = NULL; + + layout = __vcui_create_caller_info(data, bhold); + edje_object_part_text_set(_EDJ(layout), "txt_call_name", name); +} + +/* Caller info number */ +void _vcui_show_caller_info_number(void *data, const char *number, Eina_Bool bhold) +{ + Evas_Object *layout = NULL; + + layout = __vcui_create_caller_info(data, bhold); + edje_object_part_text_set(_EDJ(layout), "txt_phone_num", number); +} + +/* Caller info icon*/ +Evas_Object *_vcui_show_caller_info_icon(void *data, Eina_Bool bhold) +{ + Evas_Object *sw = NULL; + Evas_Object *ic = NULL; + Evas_Object *btn = NULL; + Evas_Object *layout = NULL; + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + layout = __vcui_create_caller_info(data, bhold); + + sw = edje_object_part_swallow_get(_EDJ(layout), "caller_info_icon"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + if (vd->type == VIEW_DIALLING_VIEW || + vd->type == VIEW_INCOMING_LOCK_VIEW) { + CALL_UI_DEBUG("Call status icon"); + ic = elm_image_add(layout); + elm_image_file_set(ic, CALLER_INFO_ICON, NULL); + elm_object_part_content_set(layout, "caller_info_icon", ic); + + return ic; + } else { + CALL_UI_DEBUG("More button"); + + edje_object_signal_emit(_EDJ(layout), "show_vert_separtor", "call-screen"); + + btn = elm_button_add(layout); + CALL_UI_KPI("elm_object_style_set start :: style_caller_info_morebtn"); + elm_object_style_set(btn, "style_caller_info_morebtn"); + CALL_UI_KPI("elm_object_style_set done :: style_caller_info_morebtn"); + elm_object_part_content_set(layout, "caller_info_icon", btn); + + evas_object_smart_callback_add(btn, "clicked", __vcui_more_btn_cb, vd); + + return btn; + } +} + +/* Caller info status*/ +Evas_Object *_vcui_show_caller_info_status(void *data, const char *status, Eina_Bool bhold) +{ + Evas_Object *layout = NULL; + + layout = __vcui_create_caller_info(data, bhold); + edje_object_part_text_set(_EDJ(layout), "txt_status", status); + + return layout; +} + +Evas_Object *_vcui_show_contact_image_split(Evas_Object *contents, const char *path, const char *full_path, Eina_Bool bhold) +{ + Evas_Object *sw = NULL; + Evas_Object *img = NULL; + char *part = NULL; + + if (bhold) { + part = "swl_cid_hold"; + } else { + part = "swl_cid_unhold"; + } + + sw = edje_object_part_swallow_get(_EDJ(contents), part); + if (sw) { + edje_object_part_unswallow(_EDJ(contents), sw); + evas_object_del(sw); + } + + if (strcmp(full_path, CONF_SPLIT_ICON) == 0) { + CALL_UI_DEBUG("Conf Image"); + img = elm_image_add(contents); + elm_image_file_set(img, CONF_SPLIT_ICON, NULL); + } else if ((strncmp(full_path, IMGDIR, strlen(IMGDIR)) == 0) || (strlen(full_path) == 0)) { + CALL_UI_DEBUG("No caller image"); + img = elm_image_add(contents); + elm_image_file_set(img, NOIMG_SPLIT_ICON, NULL); + } else { + CALL_UI_DEBUG("Display : %s", full_path); + img = elm_bg_add(contents); + elm_bg_load_size_set(img, MAIN_WIN_HD_W, 445); + elm_bg_file_set(img, full_path, NULL); + evas_object_size_hint_weight_set(img, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(img, 0.5, 0.5); + evas_object_show(img); + } + + elm_object_part_content_set(contents, part, img); + return img; +} + +Evas_Object *_vcui_show_call_bg_img(Evas_Object *contents) +{ + Evas_Object *d_image; + Evas_Object *sw; + + sw = edje_object_part_swallow_get(_EDJ(contents), "call_bg_img"); + if (sw) { + edje_object_part_unswallow(_EDJ(contents), sw); + evas_object_del(sw); + } + + d_image = elm_image_add(contents); + elm_image_file_set(d_image, CALL_BG_IMG, NULL); + elm_object_part_content_set(contents, "call_bg_img", d_image); + + return d_image; +} + +Evas_Object *_vcui_show_call_not_saved_bg_img(Evas_Object *contents) +{ + Evas_Object *d_image; + Evas_Object *sw; + + sw = edje_object_part_swallow_get(_EDJ(contents), "call_bg_img"); + if (sw) { + edje_object_part_unswallow(_EDJ(contents), sw); + evas_object_del(sw); + } + + d_image = elm_image_add(contents); + elm_image_file_set(d_image, CALL_NOT_SAVED_BG_IMG, NULL); + elm_object_part_content_set(contents, "call_bg_img", d_image); + + return d_image; +} + +void _vcui_elements_check_keypad_n_hide(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + Evas_Object *view_ly = NULL; + + switch (vd->type) { + case VIEW_DIALLING_VIEW: + { + view_ly = _vc_ui_view_dialing_get_layout(vd); + } + break; + case VIEW_INCALL_ONECALL_VIEW: + { + view_ly = _vc_ui_view_single_call_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_SPLIT_VIEW: + { + view_ly = _vcui_view_multi_call_split_get_layout(vd); + } + break; + case VIEW_INCALL_MULTICALL_CONF_VIEW: + { + view_ly = _vcui_view_multi_call_conf_get_main_layout(vd); + } + break; + default: + CALL_UI_DEBUG("code should never reach here"); + return; + } + + if (_vcui_keypad_get_show_status() == EINA_TRUE) { + /*Hide caller info area*/ + edje_object_signal_emit(_EDJ(view_ly), "HIDE", "CALL_AREA"); + } +} + diff --git a/ui/src/vcui-view-incoming-lock.c b/ui/src/vcui-view-incoming-lock.c new file mode 100755 index 0000000..38d6df3 --- /dev/null +++ b/ui/src/vcui-view-incoming-lock.c @@ -0,0 +1,1142 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "vcui-application.h" +#include "vcui-app-window.h" +#include "vcui-view-incoming-lock.h" +#include "vcui-view-layout-hd.h" + +#define VCUI_REJECT_MSG_LENGTH_MAX (140+1) +#define REJ_MSG_GENLIST_DATA "reject_msg_genlist_data" +#define REJ_MSG_LIST_OPEN_STATUS_KEY "list_open_status_key" +#define REJ_MSG_GENLIST_INDEX "reject_msg_genlist_index" +#define VCUI_CST_REJECT_MSG_GET "cst_reject_msg_get" +#define VCUI_CST_SO_PATH "/opt/ug/lib/libug-setting-call-efl.so" +#define VIEW_INCOMING_LOCK_LAYOUT_ID "INCOMINGLOCKVIEW" + +typedef struct { + Evas_Object *contents; + Evas_Object *caller_info; + Evas_Object *ic; + Evas_Object *lock_reject_with_msg; + Evas_Object *msg_glist; + + double y_scale_factor; + + int reject_with_msg_start_y; + int reject_with_msg_cur_y; + + int msg_list_height; + + gboolean bmouse_down_pressed; /*Tracks the mouse-down, mouse-move and mouse-up events are executed in sequence*/ + + void *dl_handle; + Elm_Genlist_Item_Class *itc_reject_msg; + Evas_Coord y_momentum; + char *(*msg_func_ptr) (int); + char reject_msg[VCUI_REJECT_MSG_LENGTH_MAX]; +} incoming_lock_view_priv_t; + +static int __vcui_view_incoming_lock_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); +static int __vcui_view_incoming_lock_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); +static int __vcui_view_incoming_lock_onhide(voice_call_view_data_t *view_data); +static int __vcui_view_incoming_lock_onshow(voice_call_view_data_t *view_data); +static int __vcui_view_incoming_lock_ondestroy(voice_call_view_data_t *view_data); + +static voice_call_view_data_t s_view = { + .type = VIEW_INCOMING_LOCK_VIEW, + .app_data = NULL, + .layout = NULL, + .onCreate = __vcui_view_incoming_lock_oncreate, + .onUpdate = __vcui_view_incoming_lock_onupdate, + .onHide = __vcui_view_incoming_lock_onhide, + .onShow = __vcui_view_incoming_lock_onshow, + .onDestroy = __vcui_view_incoming_lock_ondestroy, + .priv = NULL, +}; + +voice_call_view_data_t *_vcui_view_incoming_lock_new(vcui_app_call_data_t *ad) +{ + + s_view.app_data = ad; + s_view.priv = calloc(1, sizeof(incoming_lock_view_priv_t)); + + if (!s_view.priv) { + CALL_UI_DEBUG("ERROR!!!!!!!!!!!"); + } + + return &s_view; +} + +static Evas_Object *__vcui_view_incoming_lock_load_edj(Evas *evas, char *edjname, const char *grpname) +{ + Evas_Object *edj; + + edj = edje_object_add(evas); + if (!edje_object_file_set(edj, edjname, grpname)) { + CALL_UI_DEBUG("ERROR!!"); + return NULL; + } + + return edj; +} + +static void __vcui_view_incoming_lock_accept_cb(void *data, Evas_Object *obj, void *event_info) +{ + int all_call_count = 0; + int nostatus_call_count = 0; + int unhold_call_count = 0; + int hold_call_count = 0; + + if (_vcui_is_phonelock_status() == EINA_FALSE) + vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); + + all_call_count = _vcui_doc_get_all_call_data_count(); + nostatus_call_count = _vcui_doc_get_no_status_call_data_count(); + unhold_call_count = _vcui_doc_get_unhold_call_data_count(); + hold_call_count = _vcui_doc_get_hold_call_data_count(); + CALL_UI_DEBUG("all_call_count:%d >>>> nostatus_call_count:%d >>>> unhold_call_count:%d >>>> hold_call_count:%d", \ + all_call_count, nostatus_call_count, unhold_call_count, hold_call_count); + + if (unhold_call_count == 0) { + CALL_UI_DEBUG("No Call Or Held call - Accept"); + vcall_engine_answer_call(); + } else { + CALL_UI_DEBUG("Show popup - 2nd MT call - test volume popup"); + _vcui_view_popup_second_mtcall_load(_("IDS_CALL_HEADER_ACCEPT_CALL_AFTER"), unhold_call_count, hold_call_count); + } +} + +static Evas_Object *__vcui_view_incoming_lock_create_accept_btn(Evas_Object *layout) +{ + Evas_Object *btn; + + Evas_Object *sw = edje_object_part_swallow_get(_EDJ(layout), "btn_accept"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_accept", btn); + elm_object_style_set(btn, "sweep"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_ACCEPT")); + evas_object_smart_callback_add(btn, "clicked", __vcui_view_incoming_lock_accept_cb, NULL); + + return btn; +} + +static void __vcui_view_incoming_lock_reject_cb(void *data, Evas_Object *obj, void *event_info) +{ + vcall_engine_reject_call(); +} + +static Evas_Object *__vcui_view_incoming_lock_create_reject_btn(Evas_Object *layout) +{ + Evas_Object *btn; + + Evas_Object *sw = edje_object_part_swallow_get(_EDJ(layout), "btn_reject"); + if (sw) { + edje_object_part_unswallow(_EDJ(layout), sw); + evas_object_del(sw); + } + + btn = elm_button_add(layout); + elm_object_part_content_set(layout, "btn_reject", btn); + elm_object_style_set(btn, "sweep"); + elm_object_text_set(btn, _("IDS_CALL_BUTTON_REJECT")); + evas_object_smart_callback_add(btn, "clicked", __vcui_view_incoming_lock_reject_cb, NULL); + + return btn; +} + +static void __reject_msg_list_param_reset(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + + priv->y_momentum = 0; + priv->reject_with_msg_start_y = 0; + priv->reject_with_msg_cur_y = 0; + priv->bmouse_down_pressed = EINA_FALSE; +} + +static void __reject_screen_transit_complete_cb(void *data, Elm_Transit *transit) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + + if (EINA_FALSE == evas_object_data_get(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY)) { + edje_object_signal_emit(priv->lock_reject_with_msg, "show-up-arrow", "reject_msg"); + } else { + edje_object_signal_emit(priv->lock_reject_with_msg, "show-down-arrow", "reject_msg"); + } + + __reject_msg_list_param_reset(vd); + + return; +} + +static Eina_Bool __rej_msg_show_sliding_effect(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + Evas_Object *screen_ly; + Elm_Transit *transit; + int xpos = 0; + int ypos = 0; + int width = 0; + int height = 0; + int transit_y = 0; + int max_height_limit = 0; + + screen_ly = priv->lock_reject_with_msg; + transit = elm_transit_add(); + elm_transit_object_add(transit, screen_ly); + + evas_object_geometry_get(priv->lock_reject_with_msg, &xpos, &ypos, &width, &height); + CALL_UI_DEBUG("reject_w_msg dimensions ---> x[%d] y[%d] w[%d] h[%d]", xpos, ypos, width, height); + CALL_UI_DEBUG("priv->y_momentum: %d", priv->y_momentum); + + /*Max height possible*/ + max_height_limit = (priv->msg_list_height) * (priv->y_scale_factor); + CALL_UI_DEBUG("max_height_limit: %d", max_height_limit); + + if (EINA_FALSE == evas_object_data_get(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY)) { + CALL_UI_DEBUG("Close list... Check if opening is feasible"); + + if (priv->y_momentum) { + CALL_UI_DEBUG("Momentum..."); + + if (priv->y_momentum < -1500) { + CALL_UI_DEBUG("Huge Momentum... Move the layout"); + + /*effect to pull up the window.*/ + transit_y = -(max_height_limit + ypos); + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_TRUE); + } else { + CALL_UI_DEBUG("Small Momentum.."); + + if (ypos != 0) { /*Reject msg layout is displaced from its original position*/ + if (-ypos < max_height_limit/2) { /*Layout position is lesser than half of the height*/ + CALL_UI_DEBUG("Movement L.T. HALF the height.."); + + /*effect to pull down the window.*/ + transit_y = -ypos; + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_FALSE); + } else if (-ypos >= max_height_limit/2 && -ypos <= max_height_limit) { /*Layout position is greater than half of the height*/ + CALL_UI_DEBUG("Movement G.T. HALF the height.."); + + /*effect to pull up the window.*/ + transit_y = -(max_height_limit + ypos); + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_TRUE); + } + } + } + } else { + CALL_UI_DEBUG("NO Momentum... Dont open"); + + if (ypos != 0) { /*Reject msg layout is displaced from its original position*/ + if (-ypos < max_height_limit/2) { /*Layout position is lesser than half of the height*/ + CALL_UI_DEBUG("Movement L.T. HALF the height.."); + + /*effect to pull down the window.*/ + transit_y = -ypos; + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_FALSE); + } else if (-ypos >= max_height_limit/2 && -ypos <= max_height_limit) { /*Layout position is greater than half of the height*/ + CALL_UI_DEBUG("Movement G.T. HALF the height.."); + + /*effect to pull up the window.*/ + transit_y = -(max_height_limit + ypos); + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_TRUE); + } + } + } + } else { + CALL_UI_DEBUG("Open list... Check if closing is feasible"); + + if (priv->y_momentum) { + CALL_UI_DEBUG("Momentum..."); + + if (priv->y_momentum > 1500) { + CALL_UI_DEBUG("Huge Momentum... Move the layout"); + + /*effect to pull down the window.*/ + transit_y = -ypos; + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_FALSE); + } else { + CALL_UI_DEBUG("Small Momentum.."); + + if (ypos != 0) { /*Reject msg layout is displaced from its original position*/ + if (-ypos < (max_height_limit * 0.8)) { /*Layout position is lesser than 80% of the height*/ + CALL_UI_DEBUG("Movement L.T. 80 percent of the height.."); + + /*effect to pull down the window.*/ + transit_y = -ypos; + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_FALSE); + } else if (-ypos >= (max_height_limit * 0.8) && -ypos <= max_height_limit) { /*Layout position is greater than half of the height*/ + CALL_UI_DEBUG("Movement G.T. 80 percent of the height.."); + + /*effect to pull up the window.*/ + transit_y = -(max_height_limit + ypos); + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_TRUE); + } + } + } + } else { + CALL_UI_DEBUG("NO Momentum... Dont close"); + + if (ypos != 0) { /*Reject msg layout is displaced from its original position*/ + if (-ypos < (max_height_limit * 0.8)) { /*Layout position is lesser than 80% of the height*/ + CALL_UI_DEBUG("Movement L.T. 80 percent of the height.."); + + /*effect to pull down the window.*/ + transit_y = -ypos; + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_FALSE); + } else if (-ypos >= (max_height_limit * 0.8) && -ypos <= max_height_limit) { /*Layout position is greater than half of the height*/ + CALL_UI_DEBUG("Movement G.T. 80 percent of the height.."); + + /*effect to pull up the window.*/ + transit_y = -(max_height_limit + ypos); + + elm_transit_effect_translation_add(transit, 0, 0, 0, transit_y); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_TRUE); + } + } + } + } + + elm_transit_del_cb_set(transit, __reject_screen_transit_complete_cb, vd); + + if (priv->y_momentum < 0) + priv->y_momentum = -priv->y_momentum; + + if (priv->y_momentum < 1500) { + elm_transit_duration_set(transit, 0.5); + } else if (priv->y_momentum >= 1500 && priv->y_momentum < 3000) { + elm_transit_duration_set(transit, 0.4); + } else if (priv->y_momentum >= 3000 && priv->y_momentum < 4500) { + elm_transit_duration_set(transit, 0.3); + } else if (priv->y_momentum >= 4500) { + elm_transit_duration_set(transit, 0.2); + } + evas_object_show(screen_ly); /*It must be called before elm_transit_go(). transit policy*/ + elm_transit_objects_final_state_keep_set(transit, EINA_TRUE); /*Keep the window position as end of effect.*/ + elm_transit_go(transit); + + return ECORE_CALLBACK_CANCEL; +} + +static void __vcui_view_incoming_lock_reject_with_msg_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + Evas_Event_Mouse_Move *ev = event_info; + + priv->reject_with_msg_start_y = ev->cur.canvas.y; + priv->bmouse_down_pressed = EINA_TRUE; +} + +static void __vcui_view_incoming_lock_reject_with_msg_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + Evas_Event_Mouse_Move *ev = event_info; + int diff_y = 0; + int max_height_limit = 0; + + /*Max height possible*/ + max_height_limit = (priv->msg_list_height) * (priv->y_scale_factor); + CALL_UI_DEBUG("max_height_limit: %d", max_height_limit); + + if (priv->bmouse_down_pressed) { + CALL_UI_DEBUG("mouse down was pressed - handle move event"); + priv->reject_with_msg_cur_y = ev->cur.canvas.y; + + diff_y = (priv->reject_with_msg_cur_y - priv->reject_with_msg_start_y) * (priv->y_scale_factor); + CALL_UI_DEBUG("diff_y [<<< %d >>>>]", diff_y); + + if (EINA_FALSE == evas_object_data_get(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY)) { + if ((diff_y > -max_height_limit) && (diff_y <= 0)) { + /*Lies between 0 and msg-list layout height*/ + evas_object_move(priv->lock_reject_with_msg, 0, diff_y); + } else if (diff_y <= -max_height_limit) { + /*Special case - Move the max distance - msg-list height*/ + evas_object_move(priv->lock_reject_with_msg, 0, -max_height_limit); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_TRUE); + __reject_screen_transit_complete_cb(vd, NULL); + } + } else { + if ((diff_y >= 0) && (diff_y < max_height_limit)) { + /*Lies between 0 and msg-list layout height*/ + evas_object_move(priv->lock_reject_with_msg, 0, -(max_height_limit - diff_y)); + } else if (diff_y >= max_height_limit) { + /*Special case - Move the max distance - msg-list height*/ + evas_object_move(priv->lock_reject_with_msg, 0, 0); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, (const void *)EINA_FALSE); + __reject_screen_transit_complete_cb(vd, NULL); + } + } + } else { + CALL_UI_DEBUG("mouse down was NOT pressed - DONT handle move event"); + } +} + +static void __vcui_view_incoming_lock_reject_with_msg_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + + if (priv->bmouse_down_pressed) { + ecore_idler_add(__rej_msg_show_sliding_effect, vd); + } else { + CALL_UI_DEBUG("mouse down was NOT pressed - DONT handle up event"); + } +} + +static void __send_reject_msg_status_cb(msg_handle_t Handle, msg_struct_t pStatus, void *pUserParam) +{ + VCUI_RETURN_IF_FAIL(pStatus != NULL); + int status = MSG_NETWORK_SEND_FAIL; + + msg_get_int_value(pStatus, MSG_SENT_STATUS_NETWORK_STATUS_INT, &status); + CALL_UI_DEBUG("status:[%d]", status); + if (status != MSG_NETWORK_SEND_SUCCESS) { + CALL_UI_DEBUG(".."); + _vcui_view_popup_replace(_("IDS_MSGC_POP_SENDINGFAILED"), POPUP_TIMEOUT_SHORT, EINA_TRUE); + } +} + +static Eina_Bool __send_reject_msg_on_idle(void *data) +{ + VCUI_RETURN_FALSE_IF_FAIL(data != NULL); + + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + call_data_t *call_data = NULL; + + msg_error_t err = MSG_SUCCESS; + msg_handle_t msgHandle = NULL; + + call_data = _vcui_doc_get_recent_mt_call_data(); + if (call_data == NULL) { + CALL_UI_DEBUG("call data is null"); + return EINA_FALSE; + } + + err = msg_open_msg_handle(&msgHandle); + if (err != MSG_SUCCESS) { + CALL_UI_DEBUG("msg_open_msg_handle()- failed [%d]", err); + return EINA_FALSE; + } + + err = msg_reg_sent_status_callback(msgHandle, &__send_reject_msg_status_cb, NULL); + if (err != MSG_SUCCESS) { + CALL_UI_DEBUG("msg_reg_sent_status_callback()- failed [%d]", err); + msg_close_msg_handle(&msgHandle); + return EINA_FALSE; + } + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_struct_t pReq = msg_create_struct(MSG_STRUCT_REQUEST_INFO); + + /* Set message type to SMS reject*/ + msg_set_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, MSG_TYPE_SMS_REJECT); + + /* No setting send option */ + msg_set_bool_value(sendOpt, MSG_SEND_OPT_SETTING_BOOL, FALSE); + + /* Set message body */ + if (msg_set_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, priv->reject_msg, strlen(priv->reject_msg))!= MSG_SUCCESS) { + return EINA_FALSE; + } + + /* Create address list*/ + msg_struct_list_s *addr_list; + msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list); + msg_struct_t addr_info = addr_list->msg_struct_info[0]; + char *call_number = _vcui_doc_get_call_number(call_data); + + /* Set message address */ + msg_set_int_value(addr_info, MSG_ADDRESS_INFO_RECIPIENT_TYPE_INT, MSG_RECIPIENTS_TYPE_TO); + msg_set_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, call_number, strlen(call_number)); + addr_list->nCount = 1; + + /* Set message struct to Request*/ + msg_set_struct_handle(pReq, MSG_REQUEST_MESSAGE_HND, msgInfo); + msg_set_struct_handle(pReq, MSG_REQUEST_SENDOPT_HND, sendOpt); + + /* Send message */ + err = msg_sms_send_message(msgHandle, pReq); + if (err != MSG_SUCCESS) { + CALL_UI_DEBUG("msg_sms_send_message() - failed [%d]", err); + msg_close_msg_handle(&msgHandle); + _vcui_view_popup_replace(_("IDS_MSGC_POP_SENDINGFAILED"), POPUP_TIMEOUT_SHORT, EINA_TRUE); + } else { + CALL_UI_DEBUG("Sending..."); + } + + msg_release_struct(&pReq); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + return EINA_FALSE; +} + +static char *__reject_list_get_msg_by_index(void *data, int index) +{ + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + + char *ret_str = NULL; + + if (priv->msg_func_ptr) { + ret_str = (char *) priv->msg_func_ptr(index); /* i : reject msg index(0 ~ 4)*/ + CALL_UI_DEBUG("ret_str(%s)", ret_str); + } + + return ret_str; +} + +static char *__reject_msg_gl_label_get_msg(void *data, Evas_Object *obj, const char *part) +{ + VCUI_RETURN_NULL_IF_FAIL(part != NULL); + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)evas_object_data_get(obj, REJ_MSG_GENLIST_DATA); + + int index = (int)data; + CALL_UI_DEBUG("index: %d", index); + char *entry_label = NULL; + char *msg_str = NULL; + + if (!strcmp(part, "elm.text")) { + if (index != -1) { + msg_str = __reject_list_get_msg_by_index(vd, index); + CALL_UI_DEBUG("msg_str(%s)", msg_str); + + if (msg_str != NULL) { + entry_label = elm_entry_markup_to_utf8(msg_str); + if (entry_label == NULL) { + free(msg_str); + msg_str = NULL; + return NULL; + } + free(msg_str); + msg_str = NULL; + return entry_label; + } + } else { + CALL_UI_DEBUG(".."); + msg_str = _("No message"); + return strdup(msg_str); + } + } + + return NULL; +} + +static void __reject_msg_send_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + VCUI_RETURN_IF_FAIL(data != NULL); + CALL_UI_DEBUG(".."); + + char *ret_str = NULL; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + int index = (int)evas_object_data_get(obj, REJ_MSG_GENLIST_INDEX); + + ret_str = __reject_list_get_msg_by_index(vd, index); + if (ret_str) { + snprintf(priv->reject_msg, sizeof(priv->reject_msg), "%s", ret_str); + free(ret_str); + } + + vcall_engine_reject_call(); + + ecore_timer_add(TIMER_TIMEOUT_0_3_SEC, __send_reject_msg_on_idle, vd); +} + +static Evas_Object *__reject_msg_gl_content_get_msg(void *data, Evas_Object *obj, const char *part) +{ + CALL_UI_DEBUG(".."); + + Evas_Object *button; + int index = (int)data; + CALL_UI_DEBUG("index: %d", index); + + if (!strcmp(part, "elm.swallow.end")) { + if (index != -1) { + voice_call_view_data_t *vd = (voice_call_view_data_t *)evas_object_data_get(obj, REJ_MSG_GENLIST_DATA); + button = elm_button_add(obj); + evas_object_data_set(button, REJ_MSG_GENLIST_INDEX, data); + elm_object_text_set(button, dgettext("sys_string", "IDS_COM_SK_SEND")); + evas_object_propagate_events_set(button, EINA_FALSE); + evas_object_smart_callback_add(button, "clicked", __reject_msg_send_btn_cb, vd); + return button; + } else { + CALL_UI_DEBUG("do nothing for index [%d]", index); + } + } + + return NULL; +} + +static void __reject_msg_gl_sel_msg(void *data, Evas_Object *obj, void *event_info) +{ + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); +} + +static Evas_Event_Flags __reject_msg_flick_gesture_move_event_cb(void *data, void *event_info) +{ + CALL_UI_DEBUG("Flick_Gesture Move"); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + Elm_Gesture_Line_Info *info = (Elm_Gesture_Line_Info *)event_info; + + CALL_UI_DEBUG("*********************************************"); + CALL_UI_DEBUG("info->angle = %lf", info->angle); + CALL_UI_DEBUG("info->momentum.mx = %d, info->momentum.my = %d", info->momentum.mx, info->momentum.my); + CALL_UI_DEBUG("info->momentum.n = %d", info->momentum.n); + CALL_UI_DEBUG("info->momentum.tx = %d, info->momentum.ty = %d", info->momentum.tx, info->momentum.ty); + CALL_UI_DEBUG("info->momentum.x1 = %d, info->momentum.x2 = %d", info->momentum.x1, info->momentum.x2); + CALL_UI_DEBUG("info->momentum.y1 = %d, info->momentum.y2 = %d", info->momentum.y1, info->momentum.y2); + CALL_UI_DEBUG("*********************************************"); + + priv->y_momentum = info->momentum.my; + + return EVAS_EVENT_FLAG_NONE; +} + +static void __reject_msg_back_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + + if (NULL == vd) { + CALL_UI_DEBUG("view data is NULL"); + return; + } + evas_object_move(priv->lock_reject_with_msg, 0, 0); + edje_object_signal_emit(priv->lock_reject_with_msg, "show-up-arrow", "reject_msg"); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, EINA_FALSE); + +} + +static void __create_new_msg_cb(void *data, Evas_Object *obj, void *event_info) +{ + VCUI_RETURN_IF_FAIL(data != NULL); + CALL_UI_DEBUG(".."); + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + char *tel_number = NULL; + call_data_t *call_data = NULL; + + vcall_engine_reject_call(); + + vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); + + call_data = _vcui_doc_get_recent_mt_call_data(); + if (call_data == NULL) { + CALL_UI_DEBUG("call data is null"); + return; + } + tel_number = _vcui_doc_get_call_number(call_data); + _vcui_doc_launch_msg_composer(vd, tel_number); +} + +static void __reject_msg_create_call_setting_handle(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + char *error = NULL; + + priv->dl_handle = dlopen(VCUI_CST_SO_PATH, RTLD_LAZY); + if (priv->dl_handle) { + priv->msg_func_ptr = dlsym(priv->dl_handle, VCUI_CST_REJECT_MSG_GET); + if ((error = dlerror()) != NULL) { + CALL_UI_DEBUG("dlsym failed!!! error = %s", error); + priv->msg_func_ptr = NULL; + dlclose(priv->dl_handle); + priv->dl_handle = NULL; + } + } else { + CALL_UI_DEBUG("failed to open libug-setting-call-efl.so"); + } +} + +static void __reject_msg_list_height_update(void *data, int msg_cnt) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + + CALL_UI_DEBUG("msg_cnt[%d]", msg_cnt); + + switch (msg_cnt) { + case 0: + case 1: + priv->msg_list_height = MTLOCK_REJECT_MSG_ONE_LINE_LIST_HEIGHT+MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT; + edje_object_signal_emit(priv->lock_reject_with_msg, "show-one-line", "reject-list"); + break; + case 2: + priv->msg_list_height = MTLOCK_REJECT_MSG_TWO_LINE_LIST_HEIGHT+MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT; + edje_object_signal_emit(priv->lock_reject_with_msg, "show-two-line", "reject-list"); + break; + case 3: + priv->msg_list_height = MTLOCK_REJECT_MSG_THREE_LINE_LIST_HEIGHT+MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT; + edje_object_signal_emit(priv->lock_reject_with_msg, "show-three-line", "reject-list"); + break; + case 4: + priv->msg_list_height = MTLOCK_REJECT_MSG_FOUR_LINE_LIST_HEIGHT+MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT; + edje_object_signal_emit(priv->lock_reject_with_msg, "show-four-line", "reject-list"); + break; + case 5: + priv->msg_list_height = MTLOCK_REJECT_MSG_FIVE_LINE_LIST_HEIGHT+MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT; + edje_object_signal_emit(priv->lock_reject_with_msg, "show-five-line", "reject-list"); + break; + case 6: + priv->msg_list_height = MTLOCK_REJECT_MSG_SIX_LINE_LIST_HEIGHT+MTLOCK_REJECT_MSG_TOOLBAR_HEIGHT; + edje_object_signal_emit(priv->lock_reject_with_msg, "show-six-line", "reject-list"); + break; + default: + break; + } +} + +static void __reject_msg_create_glist(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + int msg_cnt = 0; + int index = 0; + + /* msg count from setting */ + vconf_get_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, &msg_cnt); + CALL_UI_DEBUG("msg_cnt: %d", msg_cnt); + + /* create gen list */ + priv->msg_glist = elm_genlist_add(priv->lock_reject_with_msg); + evas_object_data_set(priv->msg_glist, REJ_MSG_GENLIST_DATA, (const void *)vd); + evas_object_size_hint_weight_set(priv->msg_glist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(priv->msg_glist, EVAS_HINT_FILL, EVAS_HINT_FILL); + edje_object_part_swallow(priv->lock_reject_with_msg, "swl_msglist", priv->msg_glist); + + priv->itc_reject_msg = elm_genlist_item_class_new(); + + priv->itc_reject_msg->item_style = "call/reject_msg"; + priv->itc_reject_msg->func.text_get = __reject_msg_gl_label_get_msg; + priv->itc_reject_msg->func.content_get = __reject_msg_gl_content_get_msg; + priv->itc_reject_msg->func.state_get = NULL; + priv->itc_reject_msg->func.del = NULL; + + if (msg_cnt == 0 ) { + index = -1; + elm_genlist_item_append(priv->msg_glist, priv->itc_reject_msg, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __reject_msg_gl_sel_msg, NULL); + } else { + for (index = 0; index < msg_cnt; index++) { + elm_genlist_item_append(priv->msg_glist, priv->itc_reject_msg, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __reject_msg_gl_sel_msg, NULL); + } + } + + /*Adjust the list height*/ + __reject_msg_list_height_update(vd, msg_cnt); +} + +static void __reject_msg_create_gesture_layer(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + Evas_Object *rej_msg_gesture_layer = NULL; + Evas_Object *rej_msg_bg = NULL; + + rej_msg_bg = (Evas_Object *)edje_object_part_object_get(priv->lock_reject_with_msg, "reject_msg_bg"); + rej_msg_gesture_layer = elm_gesture_layer_add(priv->lock_reject_with_msg); + if (FALSE == elm_gesture_layer_attach(rej_msg_gesture_layer, (Evas_Object *)rej_msg_bg)) { + CALL_UI_DEBUG("elm_gesture_layer_attach failed !!"); + evas_object_del(rej_msg_gesture_layer); + rej_msg_gesture_layer = NULL; + } else { + elm_gesture_layer_cb_set(rej_msg_gesture_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_MOVE, __reject_msg_flick_gesture_move_event_cb, vd); + } +} + +static void __reject_msg_create_toolbar(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + Evas_Object *rej_msg_toolbar = NULL; + Evas_Object *btn = NULL; + Elm_Object_Item *item = NULL; + + rej_msg_toolbar = elm_toolbar_add(priv->lock_reject_with_msg); + elm_toolbar_homogeneous_set(rej_msg_toolbar, TRUE); + elm_toolbar_shrink_mode_set(rej_msg_toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_toolbar_item_append(rej_msg_toolbar, REJ_MSG_CREATE_ICON, NULL, __create_new_msg_cb, vd); + item = elm_toolbar_item_append(rej_msg_toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(item, EINA_TRUE); + item = elm_toolbar_item_append(rej_msg_toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(item, EINA_TRUE); + item = elm_toolbar_item_append(rej_msg_toolbar, NULL, NULL, NULL, NULL); + btn = elm_button_add(rej_msg_toolbar); + elm_object_style_set(btn, "naviframe/back_btn/default"); + evas_object_smart_callback_add(btn, "clicked", __reject_msg_back_cb, vd); + elm_object_item_content_set(item, btn); + edje_object_part_swallow(priv->lock_reject_with_msg, "swl_msgtoolbar", rej_msg_toolbar); +} + +static Evas_Object *__vcui_view_incoming_lock_create_reject_msg_layout(void *data) +{ + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + vcui_app_call_data_t *ad = vd->app_data; + Evas_Object *rej_msg_bg = NULL; + + if (priv->lock_reject_with_msg != NULL) { + evas_object_del(priv->lock_reject_with_msg); + priv->lock_reject_with_msg = NULL; + } + priv->lock_reject_with_msg = __vcui_view_incoming_lock_load_edj(evas_object_evas_get(ad->win_main), EDJ_NAME, GRP_LOCK_REJECT_WITH_MSG); + evas_object_resize(priv->lock_reject_with_msg, ad->root_w, ad->root_h); + + __reject_msg_create_call_setting_handle(vd); + + __reject_msg_create_glist(vd); + + __reject_msg_create_gesture_layer(vd); + + __reject_msg_create_toolbar(vd); + + rej_msg_bg = (Evas_Object *)edje_object_part_object_get(priv->lock_reject_with_msg, "reject_msg_bg"); + evas_object_event_callback_add(rej_msg_bg, EVAS_CALLBACK_MOUSE_DOWN, __vcui_view_incoming_lock_reject_with_msg_mouse_down_cb, vd); + evas_object_event_callback_add(rej_msg_bg, EVAS_CALLBACK_MOUSE_MOVE, __vcui_view_incoming_lock_reject_with_msg_mouse_move_cb, vd); + evas_object_event_callback_add(rej_msg_bg, EVAS_CALLBACK_MOUSE_UP, __vcui_view_incoming_lock_reject_with_msg_mouse_up_cb, vd); + + edje_object_part_text_set(priv->lock_reject_with_msg, "reject_msg_text", _("IDS_VCALL_BUTTON_REJECT_WITH_MESSAGE")); + edje_object_signal_emit(priv->lock_reject_with_msg, "show-up-arrow", "reject_msg"); + evas_object_data_set(priv->lock_reject_with_msg, REJ_MSG_LIST_OPEN_STATUS_KEY, EINA_FALSE); + + __reject_msg_list_param_reset(vd); + + evas_object_show(priv->lock_reject_with_msg); + + return priv->lock_reject_with_msg; +} + +static void __vcui_view_incoming_lock_draw_screen(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + Evas_Object *eo = priv->contents; + vcui_app_call_data_t *ad = vd->app_data; + + call_data_t *call_data = _vcui_doc_get_recent_mt_call_data(); + if (call_data == NULL) { + CALL_UI_DEBUG("call data is null"); + return; + } + if (_vcui_doc_get_call_type(call_data) != CALL_INCOMING) { + CALL_UI_DEBUG("it is not call_incoming."); + return; + } + + char *file_path = _vcui_doc_get_caller_id_file_path(call_data); + + /* call image */ + _vcui_delete_contact_image(priv->contents); + if (strcmp(file_path, NOIMG_ICON) == 0) { + _vcui_show_wallpaper_image(priv->contents); + } else { + CALL_UI_DEBUG("Caller ID file_path: %s", file_path); + { + _vcui_show_wallpaper_image(priv->contents); + priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, file_path); + } + } + _vcui_show_call_bg_img(priv->contents); + + char *call_number = _vcui_doc_get_call_number(call_data); + char *call_name = _vcui_doc_get_call_display_name(call_data); + /* call name (if nothing, call number) */ + if (strlen(call_name) == 0) { + _vcui_show_caller_info_name(vd, call_number, EINA_FALSE); + } else { + _vcui_show_caller_info_name(vd, call_name, EINA_FALSE); + _vcui_show_caller_info_number(vd, call_number, EINA_FALSE); + } + + _vcui_show_caller_info_icon(vd, EINA_FALSE); + _vcui_show_caller_info_status(vd, dgettext("sys_string", "IDS_COM_BODY_VOICE_CALL"), EINA_FALSE); + + __vcui_view_incoming_lock_create_accept_btn(priv->contents); + __vcui_view_incoming_lock_create_reject_btn(priv->contents); + + if (!(_vcui_is_phonelock_status() == EINA_TRUE)) { + if (strlen(call_number) > 0) { + __vcui_view_incoming_lock_create_reject_msg_layout(vd); + } + } + ad->beffect_needed = EINA_TRUE; + + evas_object_show(eo); + +} + +static Evas_Object *__vcui_view_incoming_lock_create_contents(void *data, char *grpname) +{ + if (data == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + Evas_Object *eo; + + /* load edje */ + eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grpname); + if (eo == NULL) + return NULL; + + return eo; +} + +static Evas_Object *__vcui_view_incoming_lock_create_layout_main(Evas_Object *parent) +{ + if (parent == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + + Evas_Object *ly; + ly = elm_layout_add(parent); + retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); + + elm_layout_theme_set(ly, "standard", "window", "integration"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, ly); + + edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); + edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); + evas_object_show(ly); + + return ly; +} + +static int __vcui_view_incoming_lock_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) +{ + CALL_UI_DEBUG("mt-lock view create!!"); + + vcui_app_call_data_t *ad = view_data->app_data; + incoming_lock_view_priv_t *priv = view_data->priv; + + evas_object_pointer_mode_set(ad->win_main, EVAS_OBJECT_POINTER_MODE_NOGRAB); + if (!view_data->layout) { + view_data->layout = __vcui_view_incoming_lock_create_layout_main(ad->win_main); + if (view_data->layout == NULL) { + CALL_UI_DEBUG("ERROR"); + return VC_ERROR; + } + priv->contents = __vcui_view_incoming_lock_create_contents(view_data, GRP_MTLOCK); + elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); + + priv->caller_info = __vcui_view_incoming_lock_create_contents(view_data, GRP_CALLER_INFO); + elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info); + + evas_object_name_set(priv->contents, VIEW_INCOMING_LOCK_LAYOUT_ID); + CALL_UI_DEBUG("[========== INCOMINGLOCKVIEW: priv->contents Addr : [%p] ==========]", priv->contents); + + } + + __vcui_view_incoming_lock_onshow(view_data); + return VC_NO_ERROR; +} + +static int __vcui_view_incoming_lock_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) +{ + CALL_UI_DEBUG("mt-lock view update!!"); + + __vcui_view_incoming_lock_onshow(view_data); + return VC_NO_ERROR; +} + +static int __vcui_view_incoming_lock_onhide(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("mt-lock view hide!!"); + + evas_object_hide(view_data->layout); + return VC_NO_ERROR; +} + +static int __vcui_view_incoming_lock_onshow(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("mt-lock view show!!"); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)view_data->priv; + int result = 0; + + /*change the orientation to normal - 0*/ + elm_win_rotation_with_resize_set(view_data->app_data->win_main, 0); + elm_win_rotation_with_resize_set(view_data->app_data->popup_mw, 0); + + if (ad->root_w == MAIN_WIN_HD_W && ad->root_h == MAIN_WIN_HD_H) { + priv->y_scale_factor = 1; + } else if (ad->root_w == MAIN_WIN_WVGA_W && ad->root_h == MAIN_WIN_WVGA_H) { + priv->y_scale_factor = (double) MAIN_WIN_WVGA_H/MAIN_WIN_HD_H; + } + CALL_UI_DEBUG("y_scale_factor %f", priv->y_scale_factor); + + __vcui_view_incoming_lock_draw_screen(view_data); + + evas_object_hide(view_data->layout); + evas_object_show(view_data->layout); + _vcui_app_win_set_noti_type(EINA_TRUE); + + result = utilx_grab_key(ad->disp, ad->win, KEY_POWER, TOP_POSITION_GRAB); + if (result) + CALL_UI_DEBUG("KEY_VOLUMEUP key grab failed"); + + result = utilx_grab_key(ad->disp, ad->win, KEY_SELECT, TOP_POSITION_GRAB); + if (result) + CALL_UI_DEBUG("KEY_VOLUMEUP key grab failed"); + + return VC_NO_ERROR; +} + +static int __vcui_view_incoming_lock_ondestroy(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("mt-lock view destroy!!"); + + vcui_app_call_data_t *ad = _vcui_get_app_data(); + + voice_call_view_data_t *vd = ad->view_st[VIEW_INCOMING_LOCK_VIEW]; + incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; + + if (_vcui_is_idle_lock() == CALL_LOCK) + _vcui_app_win_set_noti_type(EINA_TRUE); + else + _vcui_app_win_set_noti_type(EINA_FALSE); + + ad->bmute_ringtone = EINA_FALSE; + if (priv != NULL) { + + if (priv->itc_reject_msg) { + elm_genlist_item_class_free(priv->itc_reject_msg); + priv->itc_reject_msg = NULL; + } + if (priv->lock_reject_with_msg) { + evas_object_del(priv->lock_reject_with_msg); + priv->lock_reject_with_msg = NULL; + } + if (priv->caller_info) { + evas_object_del(priv->caller_info); + priv->caller_info = NULL; + } + + if (priv->contents) { + evas_object_del(priv->contents); + priv->contents = NULL; + } + + free(priv); + priv = NULL; + } + + if (vd->layout != NULL) { + evas_object_hide(vd->layout); + evas_object_del(vd->layout); + vd->layout = NULL; + } + + ad->view_st[VIEW_INCOMING_LOCK_VIEW] = NULL; + + _vcui_cache_flush(); + + utilx_ungrab_key(ad->disp, ad->win, KEY_SELECT); + utilx_ungrab_key(ad->disp, ad->win, KEY_POWER); + + return VC_NO_ERROR; +} + +int _vc_ui_view_incoming_lock_check_valid_eo(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + incoming_lock_view_priv_t *priv = NULL; + int valid = -1; + + VCUI_RETURN_VALUE_IF_FAIL(vd , -1); + priv = (incoming_lock_view_priv_t *) vd->priv; + + valid = _vcui_check_valid_eo(priv->contents, VIEW_INCOMING_LOCK_LAYOUT_ID); + + return valid; +} + +Evas_Object *_vc_ui_view_incoming_lock_get_caller_info(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incoming_lock_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incoming_lock_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->caller_info; +} + +Evas_Object *_vc_ui_view_incoming_lock_get_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incoming_lock_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incoming_lock_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->contents; +} diff --git a/ui/src/vcui-view-keypad.c b/ui/src/vcui-view-keypad.c new file mode 100755 index 0000000..e8d306b --- /dev/null +++ b/ui/src/vcui-view-keypad.c @@ -0,0 +1,342 @@ +/* + * 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 "vcui-application.h" +#include "vcui-view-keypad.h" +#include "vcui-view-common.h" + +typedef struct _keypad_data_t { + Evas_Object *parent_ly; + Evas_Object *keypad_ly; + Evas_Object *separator_ly; + Evas_Object *entry; + int data_len; + char entry_disp_data[KEYPAD_ENTRY_DISP_DATA_SIZE+1]; + Eina_Bool bkeypad_show; +}keypad_data_t; + +static keypad_data_t *gkeypad_data; + +static void __vcui_keypad_create_separator_layout(void *data); +static void __vcui_keypad_create_entry(void *data); + +static Evas_Object *__vcui_keypad_create_contents(void *data, char *grp_name) +{ + if (data == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + Evas_Object *eo; + + /* load edje */ + eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grp_name); + if (eo == NULL) + return NULL; + + return eo; +} + +static keypad_data_t *__vcui_keypad_memory_alloc() +{ + CALL_UI_DEBUG(".."); + + VCUI_RETURN_VALUE_IF_FAIL(gkeypad_data == NULL, gkeypad_data) + + CALL_UI_DEBUG(".."); + gkeypad_data = (keypad_data_t *) calloc(1, sizeof(keypad_data_t)); + if (gkeypad_data == NULL) { + CALL_UI_DEBUG("keydata structure not allocated"); + return NULL; + } + memset(gkeypad_data, 0x00, sizeof(keypad_data_t)); + gkeypad_data->bkeypad_show = EINA_FALSE; + + return gkeypad_data; +} + +void _vcui_keypad_create_layout(void *data, Evas_Object *parent_ly) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + keypad_data_t *pkeypad_data = NULL; + + pkeypad_data = __vcui_keypad_memory_alloc(); + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + if (!pkeypad_data->keypad_ly) { + CALL_UI_DEBUG(".."); + pkeypad_data->keypad_ly = __vcui_keypad_create_contents(vd, GRP_KEYPAD); + elm_object_part_content_set(parent_ly, "keypad_region", pkeypad_data->keypad_ly); + } + CALL_UI_DEBUG("keypad_ly :%p", pkeypad_data->keypad_ly); + + __vcui_keypad_create_separator_layout(vd); + + __vcui_keypad_create_entry(vd); +} + +static void __vcui_keypad_create_separator_layout(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + if (!pkeypad_data->separator_ly) { + CALL_UI_DEBUG(".."); + pkeypad_data->separator_ly = __vcui_keypad_create_contents(vd, GRP_KEYPAD_SEP_LAYOUT); + elm_object_part_content_set(pkeypad_data->keypad_ly, "separator/bg", pkeypad_data->separator_ly); + } +} + +Eina_Bool _vcui_keypad_get_show_status(void) +{ + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_FALSE_IF_FAIL(pkeypad_data != NULL) + + CALL_UI_DEBUG("Get show status(%d)", pkeypad_data->bkeypad_show); + return pkeypad_data->bkeypad_show; +} + +void _vcui_keypad_set_show_status(Eina_Bool bkeypad_status) +{ + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + CALL_UI_DEBUG("Set show status(%d)", bkeypad_status); + pkeypad_data->bkeypad_show = bkeypad_status; +} + +static void __vcui_keypad_on_key_down(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + CALL_UI_DEBUG("source(%s)", source); + + char before_dest[KEYPAD_STR_DEFINE_OPEN_SIZE + KEYPAD_ENTRY_DISP_DATA_SIZE + 1] = { 0, }; + char *sub_buffer_pointer = NULL; + char entry_dest[KEYPAD_ENTRY_SET_DATA_SIZE + 1] = { 0, }; + char *keypad_source; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + if (NULL == vd) { + CALL_UI_DEBUG("data is null"); + return; + } + + if (strlen(source) >= KEYPAD_ENTRY_DISP_DATA_SIZE) { + CALL_UI_DEBUG("strlen(source) >= DATA_BUF_SIZE(%d)", KEYPAD_ENTRY_DISP_DATA_SIZE); + return; + } + + if (strcmp(source, "star") == 0) { + keypad_source = "*"; + } else if (strcmp(source, "sharp") == 0) { + keypad_source = "#"; + } else { + keypad_source = (char *)source; + } + + char dtmf_number[2]; + dtmf_number[0] = keypad_source[0]; + dtmf_number[1] = '\0'; + vcall_engine_send_dtmf_number(dtmf_number); + + if (strlen(pkeypad_data->entry_disp_data) == KEYPAD_ENTRY_DISP_DATA_SIZE) { + sub_buffer_pointer = &pkeypad_data->entry_disp_data[1]; + + snprintf(pkeypad_data->entry_disp_data, sizeof(pkeypad_data->entry_disp_data), "%s", sub_buffer_pointer); + CALL_UI_DEBUG("pkeypad_data->entry_disp_data after change [%s]", pkeypad_data->entry_disp_data); + } + + pkeypad_data->entry_disp_data[pkeypad_data->data_len] = keypad_source[0]; + if (pkeypad_data->data_len < (KEYPAD_ENTRY_DISP_DATA_SIZE - 1)) { + pkeypad_data->data_len++; + } + + snprintf(before_dest, sizeof(before_dest), "%s", MAX_DIAL_NUMBER_FONT_SIZE, pkeypad_data->entry_disp_data); + + snprintf(entry_dest, sizeof(entry_dest), "%s", before_dest); + + CALL_UI_DEBUG("entry_dest [%s]", pkeypad_data->entry_disp_data); + elm_entry_entry_set(pkeypad_data->entry, entry_dest); + elm_entry_cursor_end_set(pkeypad_data->entry); +} + +static Evas_Object *__vcui_keypad_create_single_line_scrolled_entry(void *content) +{ + Evas_Object *en; + + if (content == NULL) { + CALL_UI_DEBUG("content is NULL!"); + return NULL; + } + + en = elm_entry_add(content); + elm_entry_scrollable_set(en, EINA_TRUE); + + elm_entry_select_all(en); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + + elm_entry_bounce_set(en, EINA_FALSE, EINA_FALSE); + elm_entry_line_wrap_set(en, ELM_WRAP_WORD); + elm_entry_input_panel_enabled_set(en, EINA_FALSE); + elm_entry_single_line_set(en, EINA_TRUE); + elm_entry_cursor_end_set(en); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + + evas_object_show(en); + + return en; +} + +static void __vcui_keypad_create_entry(void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + if (!pkeypad_data->entry) { + CALL_UI_DEBUG(".."); + pkeypad_data->entry = __vcui_keypad_create_single_line_scrolled_entry(pkeypad_data->keypad_ly); + memset(pkeypad_data->entry_disp_data, 0x0, sizeof(pkeypad_data->entry_disp_data)); + pkeypad_data->data_len = 0; + + edje_object_signal_callback_add(_EDJ(pkeypad_data->keypad_ly), "pad_down", "*", __vcui_keypad_on_key_down, vd); + + edje_object_part_swallow(_EDJ(pkeypad_data->keypad_ly), "textblock/textarea", pkeypad_data->entry); + } +} + +void _vcui_keypad_delete_layout(Evas_Object *parent_ly) +{ + CALL_UI_DEBUG(".."); + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + if (pkeypad_data->separator_ly) { + CALL_UI_DEBUG(".."); + edje_object_part_unswallow(_EDJ(pkeypad_data->keypad_ly), pkeypad_data->separator_ly); + evas_object_del(pkeypad_data->separator_ly); + pkeypad_data->separator_ly = NULL; + } + + if (pkeypad_data->entry) { + CALL_UI_DEBUG(".."); + edje_object_part_unswallow(_EDJ(pkeypad_data->keypad_ly), pkeypad_data->entry); + evas_object_del(pkeypad_data->entry); + pkeypad_data->entry = NULL; + } + + if (pkeypad_data->keypad_ly) { + CALL_UI_DEBUG(".."); + edje_object_part_unswallow(_EDJ(parent_ly), pkeypad_data->keypad_ly); + evas_object_del(pkeypad_data->keypad_ly); + pkeypad_data->keypad_ly = NULL; + } + + pkeypad_data->parent_ly = NULL; + + free(pkeypad_data); + pkeypad_data = NULL; + gkeypad_data = NULL; +} + +void _vcui_keypad_delete_separator_layout(void) +{ + CALL_UI_DEBUG(".."); + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + if (pkeypad_data->separator_ly) { + edje_object_part_unswallow(_EDJ(pkeypad_data->keypad_ly), pkeypad_data->separator_ly); + evas_object_del(pkeypad_data->separator_ly); + pkeypad_data->separator_ly = NULL; + } +} + +static void __vcui_keypad_hide_btn_effect_done(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *) data; + vcui_app_call_data_t *ad = vd->app_data; + keypad_data_t *pkeypad_data = gkeypad_data; + Evas_Object *parent_ly = NULL; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + /*Reset the entry area and text*/ + memset(pkeypad_data->entry_disp_data, '\0', KEYPAD_ENTRY_DISP_DATA_SIZE+1); + pkeypad_data->data_len = 0; + elm_entry_entry_set(pkeypad_data->entry, ""); + elm_entry_cursor_end_set(pkeypad_data->entry); + + parent_ly = pkeypad_data->parent_ly; + VCUI_RETURN_IF_FAIL(parent_ly != NULL) + + /*Hide keypad layout - ON view*/ + edje_object_signal_emit(_EDJ(parent_ly), "HIDE", "KEYPAD_BTN"); + /*Show caller info area*/ + edje_object_signal_emit(_EDJ(parent_ly), "SHOW", "CALL_AREA"); + + + if (ad->badd_call_clicked) { + _vcui_doc_launch_phoneui_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data)); + ad->badd_call_clicked = EINA_FALSE; + } else if (ad->bcontact_clicked) { + _vcui_doc_launch_contact_list_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data)); + ad->bcontact_clicked = EINA_FALSE; + } + ad->beffect_show = EINA_FALSE; +} + +void _vcui_keypad_show_hide_effect(void *data, Evas_Object *parent_ly) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *) data; + vcui_app_call_data_t *ad = vd->app_data; + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + ad->beffect_show = EINA_TRUE; + + edje_object_signal_emit(_EDJ(pkeypad_data->keypad_ly), "HIDE", "KEYPADBTN"); + pkeypad_data->parent_ly = parent_ly; + edje_object_signal_callback_add(_EDJ(pkeypad_data->keypad_ly), "DONE", "HIDEKEYPAD", __vcui_keypad_hide_btn_effect_done, vd); +} + +void _vcui_keypad_show_layout(void *data) +{ + CALL_UI_DEBUG(".."); + keypad_data_t *pkeypad_data = gkeypad_data; + + VCUI_RETURN_IF_FAIL(pkeypad_data != NULL) + + edje_object_signal_emit(_EDJ(pkeypad_data->keypad_ly), "SHOW", "KEYPADBTN"); +} diff --git a/ui/src/vcui-view-multi-call-conf.c b/ui/src/vcui-view-multi-call-conf.c new file mode 100755 index 0000000..94a1b39 --- /dev/null +++ b/ui/src/vcui-view-multi-call-conf.c @@ -0,0 +1,420 @@ +/* + * 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 "vcui-application.h" +#include "vcui-document.h" +#include "vcui-view-common.h" +#include "vcui-view-elements.h" +#include "vcui-view-multi-call-conf.h" +#include "vcui-view-keypad.h" + +#define VCUI_VIEW_MULTICALL_CONF_LAYOUT_ID "MULTIVIEWCONF" +typedef struct { + Evas_Object *contents; + Evas_Object *caller_info; + Evas_Object *btn_ly; + Evas_Object *cid_ly; + Evas_Object *ic; + Evas_Object *record_btn; + vcui_app_call_status_t call_status; + int total_members; +} vcui_view_multi_call_conf_priv_t; + +static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); +static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); +static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data); +static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data); +static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data); + +static voice_call_view_data_t s_view = { + .type = VIEW_INCALL_MULTICALL_CONF_VIEW, + .app_data = NULL, + .layout = NULL, + .onCreate = __vcui_view_multi_call_conf_oncreate, + .onUpdate = __vcui_view_multi_call_conf_onupdate, + .onHide = __vcui_view_multi_call_conf_onhide, + .onShow = __vcui_view_multi_call_conf_onshow, + .onDestroy = __vcui_view_multi_call_conf_ondestroy, + .priv = NULL, +}; + +voice_call_view_data_t *_vcui_view_multi_call_conf_new(vcui_app_call_data_t *ad) +{ + s_view.app_data = ad; + s_view.priv = calloc(1, sizeof(vcui_view_multi_call_conf_priv_t)); + + if (!s_view.priv) { + CALL_UI_DEBUG("ERROR!!!!!!!!!!! "); + } + + return &s_view; +} + +static void __vcui_view_multi_call_conf_draw_screen(Evas_Object *eo, void *data) +{ + CALL_UI_DEBUG(".."); + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv; + vcui_app_call_data_t *ad = vd->app_data; + char buf[DEF_BUF_LEN] = { 0, }; + call_data_t *call_data = NULL; + + priv->call_status = _vcui_doc_get_group_call_status(); + call_data = _vcui_doc_get_call_data_by_call_status(priv->call_status); + if (call_data == NULL) { + CALL_UI_DEBUG("call data is null"); + return; + } + priv->total_members = _vcui_doc_get_hold_call_data_count() + _vcui_doc_get_unhold_call_data_count(); + + elm_win_rotation_with_resize_set(ad->win_main, ad->rotate_angle); + elm_win_rotation_with_resize_set(ad->popup_mw, ad->rotate_angle); + + if (ad->rotate_angle == 0 || ad->rotate_angle == 180) { + CALL_UI_DEBUG("create portrait mode layout items"); + /* call image */ + _vcui_show_wallpaper_image(priv->contents); + priv->ic = _vcui_show_default_image(priv->contents, vd->app_data->win_main, CONF_ICON); + if (priv->call_status == CALL_HOLD) { + if (ad->root_w == MAIN_WIN_HD_W && ad->root_h == MAIN_WIN_HD_H) { + edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_HD", "CID_HD"); + } else if (ad->root_w == MAIN_WIN_WVGA_W && ad->root_h == MAIN_WIN_WVGA_H) { + edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_WVGA", "CID_WVGA"); + } + edje_object_signal_emit(_EDJ(priv->caller_info), "set-hold-state", "call-screen"); + } else { + Evas_Object *txt_status = edje_object_part_swallow_get(_EDJ(priv->caller_info), "txt_status"); + if (txt_status) { + edje_object_part_unswallow(_EDJ(priv->caller_info), txt_status); + evas_object_del(txt_status); + } + edje_object_signal_emit(_EDJ(priv->contents), "HIDE_DIM", "CID"); + edje_object_signal_emit(_EDJ(priv->caller_info), "set-unhold-state", "call-screen"); + } + + _vcui_show_call_bg_img(priv->contents); + _vcui_show_caller_info_status(data, _("IDS_CALL_BODY_ON_HOLD_ABB"), EINA_FALSE); + _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_FALSE); + snprintf(buf, DEF_BUF_LEN, "%d %s", priv->total_members, _("IDS_CALL_BODY_PEOPLE")); + _vcui_show_caller_info_number(vd, buf, EINA_FALSE); + + _vcui_show_caller_info_icon(vd, EINA_FALSE); + + _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data)); + + { + CALL_UI_DEBUG(".."); + + /*create a small button for Hold/Swap*/ + _vcui_create_hold_swap_button(vd); + + if ((_vcui_is_phonelock_status() == EINA_TRUE) && (_vcui_is_idle_lock() == EINA_TRUE)) { + _vcui_create_top_middle_button_disabled(vd); + } else { + _vcui_create_top_middle_button(vd); + } + _vcui_create_top_right_button(vd); + _vcui_create_bottom_left_button(vd); + _vcui_create_bottom_middle_button(vd); + + { + _vcui_create_top_left_button(vd); + _vcui_create_bottom_right_button(vd); + } + } + + ad->beffect_needed = EINA_FALSE; + } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) { + CALL_UI_DEBUG("landscape mode not supported"); + } + + _vcui_elements_check_keypad_n_hide(vd); + + evas_object_show(eo); +} + +static Evas_Object *__vcui_view_multi_call_conf_create_contents(void *data, char *group) +{ + if (data == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + Evas_Object *eo; + + /* load edje */ + eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group); + if (eo == NULL) + return NULL; + + return eo; +} + +static Evas_Object *__vcui_view_multi_call_conf_create_layout_main(Evas_Object *parent) +{ + if (parent == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + + Evas_Object *ly; + ly = elm_layout_add(parent); + retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); + + elm_layout_theme_set(ly, "standard", "window", "integration"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, ly); + + edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); + edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); + evas_object_show(ly); + + return ly; +} + +static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) +{ + voice_call_view_data_t *vd = view_data; + + if (!vd->layout) { + + /* Create Main Layout */ + vd->layout = __vcui_view_multi_call_conf_create_layout_main(vd->app_data->win_main); + if (vd->layout == NULL) { + CALL_UI_DEBUG("ERROR"); + return VC_ERROR; + } + } else { + CALL_UI_DEBUG("[UI]ad->layout_multicallconf==NULL case "); + evas_object_show(vd->layout); + } + + __vcui_view_multi_call_conf_onshow(view_data); + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) +{ + CALL_UI_DEBUG("multicall-conf view update"); + + __vcui_view_multi_call_conf_onshow(view_data); + + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("multicall-conf view hide"); + + evas_object_hide(view_data->layout); + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("multicall-conf view show"); + + vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)view_data->priv; + Evas_Object *sep_ly = NULL; + + vcui_app_call_data_t *ad = view_data->app_data; + /*if (priv->cid_ly) { + CALL_UI_DEBUG(".."); + evas_object_del(priv->cid_ly); + priv->cid_ly = NULL; + } + if (priv->contents) { + evas_object_del(priv->contents); + priv->contents = NULL; + }*/ + + if (ad->rotate_angle == 0 || ad->rotate_angle == 180) { + CALL_UI_DEBUG("portrait mode layout"); + priv->contents = __vcui_view_multi_call_conf_create_contents(view_data, GRP_MULTICALL_CONF); + priv->caller_info = __vcui_view_multi_call_conf_create_contents(view_data, GRP_CALLER_INFO); + elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info); + sep_ly = __vcui_view_multi_call_conf_create_contents(view_data, GRP_SEPARATOR_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_bg", sep_ly); + priv->btn_ly = __vcui_view_multi_call_conf_create_contents(view_data, GRP_BUTTON_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly); + } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) { + CALL_UI_DEBUG("landscape mode not supported"); + } + elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); + evas_object_name_set(priv->contents, VCUI_VIEW_MULTICALL_CONF_LAYOUT_ID); + CALL_UI_DEBUG("[========== MULTIVIEWCONF: priv->contents Addr : [%p] ==========]", priv->contents); + + __vcui_view_multi_call_conf_draw_screen(priv->contents, view_data); + + evas_object_hide(view_data->layout); + evas_object_show(view_data->layout); + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("multicall-conf view destroy"); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + + voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW]; + vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv; + + if (priv != NULL) { + if (priv->cid_ly) { + CALL_UI_DEBUG(".."); + evas_object_del(priv->cid_ly); + priv->cid_ly = NULL; + } + if (priv->btn_ly) { + evas_object_del(priv->btn_ly); + priv->btn_ly = NULL; + } + + /*Delete keypad layout*/ + _vcui_keypad_delete_layout(priv->contents); + + if (priv->contents) { + evas_object_del(priv->contents); + priv->contents = NULL; + } + + free(priv); + priv = NULL; + } + + if (vd->layout != NULL) { + evas_object_hide(vd->layout); + evas_object_del(vd->layout); + vd->layout = NULL; + } + + ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW] = NULL; + + _vcui_cache_flush(); + CALL_UI_DEBUG("complete destroy multi view conf"); + + return VC_NO_ERROR; +} + +int _vcui_view_multi_call_conf_check_valid_eo(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + vcui_view_multi_call_conf_priv_t *priv = NULL; + int valid = -1; + + VCUI_RETURN_VALUE_IF_FAIL(vd , -1); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_MULTICALL_CONF_LAYOUT_ID); + + return valid; +} + +Evas_Object *_vcui_view_multi_call_conf_get_main_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_conf_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->contents; +} + +int _vcui_view_multi_call_conf_get_call_status(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_conf_priv_t *priv = NULL; + int call_status = 0; + + VCUI_RETURN_INVALID_IF_FAIL(vd); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + VCUI_RETURN_INVALID_IF_FAIL(priv); + if (priv->call_status == CALL_HOLD) { + call_status = CALL_HOLD; + } else { + call_status = CALL_UNHOLD; + } + + return call_status; +} + +void _vcui_view_multi_call_conf_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur) +{ + vcui_view_multi_call_conf_priv_t *priv = NULL; + + VCUI_RETURN_IF_FAIL(vd); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + VCUI_RETURN_IF_FAIL(priv); + edje_object_part_text_set(_EDJ(priv->caller_info), "txt_timer", _(pcall_dur)); +} + +Evas_Object *_vcui_view_multi_call_conf_get_button_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_conf_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->btn_ly; +} + +Evas_Object *_vcui_view_multi_call_conf_get_cid_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_conf_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->cid_ly; +} + +int _vcui_view_multi_call_conf_get_total_members(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_conf_priv_t *priv = NULL; + + VCUI_RETURN_INVALID_IF_FAIL(vd); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + VCUI_RETURN_INVALID_IF_FAIL(priv); + + return priv->total_members; +} + +Evas_Object *_vc_ui_view_multi_call_conf_get_caller_info(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_conf_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->caller_info; +} + diff --git a/ui/vcui-view-multi-call-list.c b/ui/src/vcui-view-multi-call-list.c similarity index 56% rename from ui/vcui-view-multi-call-list.c rename to ui/src/vcui-view-multi-call-list.c index f0a5485..1e90bcb 100755 --- a/ui/vcui-view-multi-call-list.c +++ b/ui/src/vcui-view-multi-call-list.c @@ -21,6 +21,18 @@ static Elm_Genlist_Item_Class *itc_call; +#define VCUI_VIEW_MULTICALL_LIST_LAYOUT_ID "MULTIVIEWLIST" +typedef struct { + Evas_Object *nf; + Evas_Object *contents; + Evas_Object *cid_ly; + Evas_Object *ic; + Evas_Object *record_btn; + vcui_app_call_status_t call_status; + Evas_Object *multibox_gl; + int total_members; +} vcui_view_multi_call_list_priv_t; + static int __vcui_view_multi_call_list_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); static int __vcui_view_multi_call_list_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); static int __vcui_view_multi_call_list_onhide(voice_call_view_data_t *view_data); @@ -54,9 +66,11 @@ voice_call_view_data_t *_vcui_view_multi_call_list_new(vcui_app_call_data_t *ad) static void __vcui_view_multi_call_list_small_end_call_cb(void *data, Evas_Object *obj, void *event_info) { CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); call_data_t *call_data = data; - _vcui_engine_end_call_by_handle(call_data->call_handle); - call_data->bno_end_show = EINA_TRUE; + int handle = _vcui_doc_get_call_handle(call_data); + vcall_engine_release_call_by_handle(handle); + ad->call_end_type = CALL_END_TYPE_NONE; _vcui_view_popup_load_endcall_time(call_data); } @@ -65,14 +79,15 @@ static void __vcui_view_multi_call_list_split_call_cb(void *data, Evas_Object *o { CALL_UI_DEBUG(".."); call_data_t *call_data = data; - _vcui_engine_split_call(call_data->call_handle); + int handle = _vcui_doc_get_call_handle(call_data); + vcall_engine_split_call(handle); } static void __vcui_view_multi_call_list_gl_sel_call(void *data, Evas_Object *obj, void *event_info) { CALL_UI_DEBUG(".."); - Elm_Object_Item *item = (Elm_Object_Item *)event_info; + Elm_Object_Item *item = (Elm_Object_Item *) event_info; elm_object_item_data_get(item); elm_genlist_item_selected_set(item, 0); @@ -90,7 +105,7 @@ static Eina_Bool __vcui_view_multi_call_list_gl_state_get_call(void *data, Evas_ return EINA_FALSE; } -static Evas_Object *__vcui_view_multi_call_list_gl_content_get_call(void *data, Evas_Object *obj, const char *part) +static Evas_Object *__vcui_view_multi_call_list_gl_icon_get_call(void *data, Evas_Object *obj, const char *part) { call_data_t *call_data = (call_data_t *)data; @@ -99,28 +114,28 @@ static Evas_Object *__vcui_view_multi_call_list_gl_content_get_call(void *data, if (strcmp(part, "elm.swallow.end") == 0) { btn = elm_button_add(obj); - elm_object_style_set(btn, "style_call_smallbtn_red"); - icon = elm_icon_add(obj); - elm_icon_file_set(icon, CONF_CALL_END_ICON, NULL); + elm_object_style_set(btn, "style_call_icon_only_end"); + icon = elm_image_add(obj); + elm_image_file_set(icon, CONF_CALL_END_ICON, NULL); evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_resizable_set(icon, 1, 1); - elm_object_part_content_set(btn, "icon", icon); + elm_image_resizable_set(icon, 1, 1); + elm_object_content_set(btn, icon); evas_object_smart_callback_add(btn, "clicked", __vcui_view_multi_call_list_small_end_call_cb, call_data); evas_object_propagate_events_set(btn, EINA_FALSE); return btn; } else if (strcmp(part, "elm.swallow.private") == 0) { - if (_vcui_doc_get_count_hold() > 0) { + if (_vcui_doc_get_hold_call_data_count() > 0) { return NULL; } btn = elm_button_add(obj); - icon = elm_icon_add(obj); - elm_icon_file_set(icon, PRIVATE_ICON, NULL); - elm_object_style_set(btn, "icon_only/style_call_icon_only_private"); + icon = elm_image_add(obj); + elm_image_file_set(icon, PRIVATE_ICON, NULL); + elm_object_style_set(btn, "style_call_icon_only_private"); - elm_icon_resizable_set(icon, 1, 1); - elm_object_part_content_set(btn, "icon", icon); + elm_image_resizable_set(icon, 1, 1); + elm_object_content_set(btn, icon); evas_object_smart_callback_add(btn, "clicked", __vcui_view_multi_call_list_split_call_cb, call_data); evas_object_propagate_events_set(btn, EINA_FALSE); @@ -131,16 +146,19 @@ static Evas_Object *__vcui_view_multi_call_list_gl_content_get_call(void *data, return NULL; } -static char *__vcui_view_multi_call_list_gl_text_get_call(void *data, Evas_Object *obj, const char *part) +static char *__vcui_view_multi_call_list_gl_label_get_call(void *data, Evas_Object *obj, const char *part) { char buf[DEF_BUF_LEN] = { 0, }; call_data_t *call_data = (call_data_t *)data; + char *call_number = _vcui_doc_get_call_number(call_data); + char *call_name = _vcui_doc_get_call_display_name(call_data); if (strcmp(part, "elm.text") == 0) { - if (strlen((char *)call_data->call_display) == 0) - snprintf(buf, sizeof(buf), "%s", call_data->call_num); - else - snprintf(buf, sizeof(buf), "%s", call_data->call_display); + if (strlen(call_name) == 0) { + snprintf(buf, sizeof(buf), "%s", call_number); + } else { + snprintf(buf, sizeof(buf), "%s", call_name); + } } return strdup(buf); @@ -148,9 +166,11 @@ static char *__vcui_view_multi_call_list_gl_text_get_call(void *data, Evas_Objec static void __vcui_view_multi_call_list_genlist_init(void *data) { + itc_call = elm_genlist_item_class_new(); + itc_call->item_style = "multicall_list"; - itc_call->func.text_get = __vcui_view_multi_call_list_gl_text_get_call; - itc_call->func.content_get = __vcui_view_multi_call_list_gl_content_get_call; + itc_call->func.text_get = __vcui_view_multi_call_list_gl_label_get_call; + itc_call->func.content_get = __vcui_view_multi_call_list_gl_icon_get_call; itc_call->func.state_get = __vcui_view_multi_call_list_gl_state_get_call; itc_call->func.del = __vcui_view_multi_call_list_gl_del_call; } @@ -181,17 +201,17 @@ void __vcui_view_multi_call_list_genlist_item_append(void *data) } if (priv->call_status == CALL_UNHOLD) { - list = _vcui_doc_get_unhold_caller(); + list = _vcui_doc_get_caller_list_with_unhold_status(); } else { - list = _vcui_doc_get_hold_caller(); + list = _vcui_doc_get_caller_list_with_hold_status(); } if (list == NULL) { CALL_UI_DEBUG("error"); return; } - Eina_List *l; - call_data_t *call_data; + Eina_List *l = NULL; + call_data_t *call_data = NULL; EINA_LIST_FOREACH(list, l, call_data) { elm_genlist_item_append(priv->multibox_gl, itc_call, (void *)call_data, NULL, ELM_GENLIST_ITEM_NONE, __vcui_view_multi_call_list_gl_sel_call, data); } @@ -211,76 +231,64 @@ static void __vcui_view_multi_call_list_draw_screen(void *data) voice_call_view_data_t *vd = (voice_call_view_data_t *)data; vcui_app_call_data_t *ad = vd->app_data; vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv; - call_data_t *call_data; + call_data_t *call_data = NULL; - priv->total_members = _vcui_doc_get_count_hold()+_vcui_doc_get_count_unhold(); - priv->call_status = _vcui_doc_get_show_callstatus(); - call_data = _vcui_doc_get_last_status(priv->call_status); + priv->total_members = _vcui_doc_get_hold_call_data_count() + _vcui_doc_get_unhold_call_data_count(); + priv->call_status = _vcui_doc_get_group_call_status(); + call_data = _vcui_doc_get_call_data_by_call_status(priv->call_status); if (call_data == NULL) { CALL_UI_DEBUG("call data is null"); return; } - _vcui_view_common_set_each_time(call_data->start_time); + _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data)); + + elm_win_rotation_with_resize_set(ad->win_main, ad->rotate_angle); + elm_win_rotation_with_resize_set(ad->popup_mw, ad->rotate_angle); - _vcui_show_wallpaper_image(priv->contents); + if (ad->rotate_angle == 0 || ad->rotate_angle == 180) { + CALL_UI_DEBUG("create portrait mode layout items"); __vcui_view_multi_call_list_genlist_item_append(vd); _vcui_create_conf_list_button_hold(vd); _vcui_create_button_bigend(vd); + } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) { + CALL_UI_DEBUG("landscape mode not supported"); + } evas_object_show(priv->contents); } -static Evas_Object *__vcui_view_multi_call_list_create_contents(void *data, char *group) +static Evas_Object *__vcui_view_multi_call_list_create_naviframe(Evas_Object *parent) { - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - Evas_Object *eo; - - if (data == NULL) { + if (parent == NULL) { CALL_UI_DEBUG("ERROR"); return NULL; } - /* load edje */ - eo = _vcui_load_edj(vd->layout, EDJ_NAME, group); - if (eo == NULL) - return NULL; - - return eo; -} - -static void __vcui_view_multi_call_list_create_navigationframe_layout(voice_call_view_data_t *vd) -{ - Evas_Object *navi_ly; - Evas_Object *btn1; - vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv; - - navi_ly = _vcui_load_edj(priv->navi_frame, EDJ_NAME, "navigation_view"); - if (navi_ly == NULL) - return; - CALL_UI_DEBUG("navi_layout created..."); + Evas_Object *nf = elm_naviframe_add(parent); + retvm_if(nf == NULL, NULL, "Failed elm_naviframe_add."); - /* Load default button */ - btn1 = elm_button_add(priv->navi_frame); - elm_object_style_set(btn1, "vcui_naviframe_new_backbutton/default"); - evas_object_smart_callback_add(btn1, "clicked", __vcui_view_multi_call_list_back_cb, vd); + elm_object_part_content_set(parent, "elm.swallow.content", nf); + evas_object_show(nf); - elm_naviframe_item_push(priv->navi_frame, _("IDS_CALL_OPT_CONFERENCE_CALL"), btn1, NULL, navi_ly, "vcui_naviframe_new_item_1line"); + return nf; } -static Evas_Object *__vcui_view_multi_call_list_create_navigation_layout(Evas_Object *parent) +static Evas_Object *__vcui_view_multi_call_list_create_contents(Evas_Object *parent, char *group) { - Evas_Object *navi_frame; + Evas_Object *eo; if (parent == NULL) { CALL_UI_DEBUG("ERROR"); return NULL; } - navi_frame = elm_naviframe_add(parent); - elm_object_style_set(navi_frame, "vcui_naviframe_new/default"); + /* load edje */ + eo = _vcui_load_edj(parent, EDJ_NAME, group); + if (eo == NULL) + return NULL; - return navi_frame; + return eo; } static Evas_Object *__vcui_view_multi_call_list_create_layout_main(Evas_Object *parent) @@ -294,12 +302,11 @@ static Evas_Object *__vcui_view_multi_call_list_create_layout_main(Evas_Object * ly = elm_layout_add(parent); retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); - elm_layout_theme_set(ly, "standard", "window", "integration"); + elm_layout_theme_set(ly, "layout", "application", "default"); evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(parent, ly); - edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); - edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); + elm_win_indicator_mode_set(ly, ELM_WIN_INDICATOR_SHOW); evas_object_show(ly); return ly; @@ -310,9 +317,6 @@ static int __vcui_view_multi_call_list_oncreate(voice_call_view_data_t *view_dat CALL_UI_DEBUG("multicall-list view create"); voice_call_view_data_t *vd = view_data; - vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)vd->priv; - - itc_call = elm_genlist_item_class_new(); if (!vd->layout) { vd->layout = __vcui_view_multi_call_list_create_layout_main(vd->app_data->win_main); @@ -320,19 +324,6 @@ static int __vcui_view_multi_call_list_oncreate(voice_call_view_data_t *view_dat CALL_UI_DEBUG("ERROR"); return VC_ERROR; } - priv->contents = __vcui_view_multi_call_list_create_contents(vd, GRP_MULTICALL); - elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents); - - priv->navi_frame = __vcui_view_multi_call_list_create_navigation_layout(vd->layout); - elm_object_part_content_set(priv->contents, "navigation_bar", priv->navi_frame); - - __vcui_view_multi_call_list_create_navigationframe_layout(vd); - - evas_object_name_set(priv->contents, "MULTIVIEWLIST"); - CALL_UI_DEBUG("[========== MULTIVIEWLIST: priv->contents Addr : [%p] ==========]", priv->contents); - - __vcui_view_multi_call_list_genlist_add(vd); - __vcui_view_multi_call_list_genlist_init(vd); } else { CALL_UI_DEBUG("[UI]ad->layout_multicall != NULL case "); evas_object_show(vd->layout); @@ -363,6 +354,50 @@ static int __vcui_view_multi_call_list_onshow(voice_call_view_data_t *view_data) { CALL_UI_DEBUG("multicall-list view show"); + vcui_app_call_data_t *ad = view_data->app_data; + vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *)view_data->priv; + Evas_Object *back_btn = NULL; + Elm_Object_Item *item = NULL; + + if (priv->cid_ly) { + CALL_UI_DEBUG(".."); + evas_object_del(priv->cid_ly); + priv->cid_ly = NULL; + } + + if (priv->contents) { + evas_object_del(priv->contents); + priv->contents = NULL; + } + + if (priv->nf) { + evas_object_del(priv->nf); + priv->nf = NULL; + } + + /* Create naviframe layout */ + priv->nf = __vcui_view_multi_call_list_create_naviframe(view_data->layout); + + if (ad->rotate_angle == 0 || ad->rotate_angle == 180) { + CALL_UI_DEBUG("portrait mode layout"); + priv->contents = __vcui_view_multi_call_list_create_contents(priv->nf, GRP_MULTICALL); + + __vcui_view_multi_call_list_genlist_add(view_data); + __vcui_view_multi_call_list_genlist_init(view_data); + + } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) { + CALL_UI_DEBUG("landscape mode not supported"); + } + + back_btn = elm_button_add(priv->nf); + elm_object_style_set(back_btn, "naviframe/end_btn/default"); + evas_object_smart_callback_add(back_btn, "clicked", __vcui_view_multi_call_list_back_cb, view_data); + + item = elm_naviframe_item_push(priv->nf, _("IDS_CALL_OPT_CONFERENCE_CALL"), back_btn, NULL, priv->contents, NULL); + + evas_object_name_set(priv->contents, VCUI_VIEW_MULTICALL_LIST_LAYOUT_ID); + CALL_UI_DEBUG("[========== MULTIVIEWLIST: priv->contents Addr : [%p] ==========]", priv->contents); + __vcui_view_multi_call_list_draw_screen(view_data); evas_object_hide(view_data->layout); @@ -388,12 +423,22 @@ static int __vcui_view_multi_call_list_ondestroy(voice_call_view_data_t *view_da evas_object_del(priv->multibox_gl); priv->multibox_gl = NULL; } + if (priv->cid_ly) { + CALL_UI_DEBUG(".."); + evas_object_del(priv->cid_ly); + priv->cid_ly = NULL; + } if (priv->contents) { evas_object_del(priv->contents); priv->contents = NULL; } + if (priv->nf) { + evas_object_del(priv->nf); + priv->nf = NULL; + } + free(priv); priv = NULL; } @@ -410,3 +455,87 @@ static int __vcui_view_multi_call_list_ondestroy(voice_call_view_data_t *view_da CALL_UI_DEBUG("complete destroy multi view list"); return VC_NO_ERROR; } + +int _vcui_view_multi_call_list_check_valid_eo(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + vcui_view_multi_call_list_priv_t *priv = NULL; + int valid = -1; + + VCUI_RETURN_VALUE_IF_FAIL(vd , -1); + priv = (vcui_view_multi_call_list_priv_t *) vd->priv; + + valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_MULTICALL_LIST_LAYOUT_ID); + + return valid; +} + +Evas_Object *_vcui_view_multi_call_list_get_main_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_list_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_multi_call_list_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->contents; +} + +int _vcui_view_multi_call_list_get_call_status(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_list_priv_t *priv = NULL; + int call_status = 0; + + VCUI_RETURN_INVALID_IF_FAIL(vd); + priv = (vcui_view_multi_call_list_priv_t *) vd->priv; + + VCUI_RETURN_INVALID_IF_FAIL(priv); + if (priv->call_status == CALL_HOLD) { + call_status = CALL_HOLD; + } else { + call_status = CALL_UNHOLD; + } + + return call_status; +} + +void _vcui_view_multi_call_list_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur) +{ + vcui_view_multi_call_list_priv_t *priv = NULL; + + VCUI_RETURN_IF_FAIL(vd); + priv = (vcui_view_multi_call_list_priv_t *) vd->priv; + + VCUI_RETURN_IF_FAIL(priv); + edje_object_part_text_set(_EDJ(priv->contents), "txt_timer", _(pcall_dur)); +} + +Evas_Object *_vcui_view_multi_call_list_get_cid_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_list_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (vcui_view_multi_call_list_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->cid_ly; +} + +int _vcui_view_multi_call_list_get_total_members(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + vcui_view_multi_call_list_priv_t *priv = NULL; + + VCUI_RETURN_INVALID_IF_FAIL(vd); + priv = (vcui_view_multi_call_list_priv_t *) vd->priv; + + VCUI_RETURN_INVALID_IF_FAIL(priv); + + return priv->total_members; +} + + diff --git a/ui/src/vcui-view-multi-call-split.c b/ui/src/vcui-view-multi-call-split.c new file mode 100755 index 0000000..2506163 --- /dev/null +++ b/ui/src/vcui-view-multi-call-split.c @@ -0,0 +1,453 @@ +/* + * 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 "vcui-application.h" +#include "vcui-document.h" +#include "vcui-view-elements.h" +#include "vcui-view-multi-call-split.h" +#include "vcui-view-keypad.h" + +#define VCUI_VIEW_MULTICALL_SPLIT_LAYOUT_ID "MULTIVIEWSPLIT" +typedef struct { + Evas_Object *contents; + Evas_Object *caller_info_unhold; + Evas_Object *caller_info_hold; + Evas_Object *btn_ly; + + Evas_Object *record_btn; + +} incall_multi_view_split_priv_t; + +static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); +static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); +static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data); +static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data); +static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data); +static void __vcui_multi_view_split_rotation_with_resize(); + +static voice_call_view_data_t s_view = { + .type = VIEW_INCALL_MULTICALL_SPLIT_VIEW, + .app_data = NULL, + .layout = NULL, + .onCreate = __vcui_view_multi_call_split_oncreate, + .onUpdate = __vcui_view_multi_call_split_onupdate, + .onHide = __vcui_view_multi_call_split_onhide, + .onShow = __vcui_view_multi_call_split_onshow, + .onDestroy = __vcui_view_multi_call_split_ondestroy, + .priv = NULL, +}; + +voice_call_view_data_t *_vcui_view_multi_call_split_new(vcui_app_call_data_t *ad) +{ + s_view.app_data = ad; + s_view.priv = calloc(1, sizeof(incall_multi_view_split_priv_t)); + + if (!s_view.priv) { + CALL_UI_DEBUG("ERROR!!!!!!!!!!!"); + } + + return &s_view; +} + +static void __vcui_view_multi_call_split_draw_screen(Evas_Object *eo, void *data) +{ + CALL_UI_DEBUG(".."); + + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv; + + vcui_app_call_data_t *ad = vd->app_data; + + call_data_t *hold_call_data = NULL; + call_data_t *unhold_call_data = NULL; + + char buf[DEF_BUF_LEN] = { 0, }; + + hold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_HOLD); + unhold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_UNHOLD); + + if ((hold_call_data == NULL) || (unhold_call_data == NULL)) { + CALL_UI_DEBUG("call data is null"); + return; + } + + char *hold_file_path = _vcui_doc_get_caller_id_file_path(hold_call_data); + char *hold_full_file_path = _vcui_doc_get_caller_id_full_file_path(hold_call_data); + char *unhold_file_path = _vcui_doc_get_caller_id_file_path(unhold_call_data); + char *unhold_full_file_path = _vcui_doc_get_caller_id_full_file_path(unhold_call_data); + char *hold_call_number = _vcui_doc_get_call_number(hold_call_data); + char *hold_call_name = _vcui_doc_get_call_display_name(hold_call_data); + char *unhold_call_number = _vcui_doc_get_call_number(unhold_call_data); + char *unhold_call_name = _vcui_doc_get_call_display_name(unhold_call_data); + + if (_vcui_doc_get_unhold_call_data_count() == 1 && _vcui_doc_get_hold_call_data_count() == 1) { + /* in call */ + _vcui_show_contact_image_split(eo, unhold_file_path, unhold_full_file_path, EINA_FALSE); + + if (strlen(unhold_call_name) == 0) { + _vcui_show_caller_info_name(vd, unhold_call_number, EINA_FALSE); + _vcui_show_caller_info_number(vd, NULL, EINA_FALSE); + } else { + _vcui_show_caller_info_name(vd, unhold_call_name, EINA_FALSE); + _vcui_show_caller_info_number(vd, unhold_call_number, EINA_FALSE); + } + + /* on hold */ + _vcui_show_contact_image_split(eo, hold_file_path, hold_full_file_path, EINA_TRUE); + if (strlen(hold_call_name) == 0) { + _vcui_show_caller_info_name(vd, hold_call_number, EINA_TRUE); + _vcui_show_caller_info_number(vd, NULL, EINA_TRUE); + } else { + _vcui_show_caller_info_name(vd, hold_call_name, EINA_TRUE); + _vcui_show_caller_info_number(vd, hold_call_number, EINA_TRUE); + } + + } else if (_vcui_doc_get_unhold_call_data_count() == 1 && _vcui_doc_get_hold_call_data_count() > 1) { + /* in call */ + _vcui_show_contact_image_split(eo, hold_file_path, hold_full_file_path, EINA_FALSE); + + if (strlen(unhold_call_name) == 0) { + _vcui_show_caller_info_name(vd, unhold_call_number, EINA_FALSE); + _vcui_show_caller_info_number(vd, NULL, EINA_FALSE); + } else { + _vcui_show_caller_info_name(vd, unhold_call_name, EINA_FALSE); + _vcui_show_caller_info_number(vd, unhold_call_number, EINA_FALSE); + } + + /* on hold */ + _vcui_show_contact_image_split(eo, CONF_SPLIT_ICON, CONF_SPLIT_ICON, EINA_TRUE); + _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_TRUE); + snprintf(buf, DEF_BUF_LEN, "%d %s", _vcui_doc_get_hold_call_data_count(), _("IDS_CALL_BODY_PEOPLE")); + _vcui_show_caller_info_number(vd, buf, EINA_TRUE); + + } else if (_vcui_doc_get_unhold_call_data_count() > 1 && _vcui_doc_get_hold_call_data_count() == 1) { + /* in call */ + _vcui_show_contact_image_split(eo, CONF_SPLIT_ICON, CONF_SPLIT_ICON, EINA_FALSE); + _vcui_show_caller_info_name(vd, _("IDS_CALL_OPT_CONFERENCE_CALL"), EINA_FALSE); + snprintf(buf, DEF_BUF_LEN, "%d %s", _vcui_doc_get_unhold_call_data_count(), _("IDS_CALL_BODY_PEOPLE")); + _vcui_show_caller_info_number(vd, buf, EINA_FALSE); + + /* on hold */ + _vcui_show_contact_image_split(eo, hold_file_path, hold_full_file_path, EINA_TRUE); + if (strlen(hold_call_name) == 0) { + _vcui_show_caller_info_name(vd, hold_call_number, EINA_TRUE); + _vcui_show_caller_info_number(vd, NULL, EINA_TRUE); + } else { + _vcui_show_caller_info_name(vd, hold_call_name, EINA_TRUE); + _vcui_show_caller_info_number(vd, hold_call_number, EINA_TRUE); + } + + /* enter conf list view */ + } else { + CALL_UI_DEBUG("[=========== ERROR : Invalid Status!!! ============]"); + return; + } + + _vcui_show_call_bg_img(priv->contents); + _vcui_show_caller_info_status(vd, _("IDS_CALL_BODY_ON_HOLD_ABB"), EINA_TRUE); + + _vcui_show_caller_info_icon(vd, EINA_FALSE); + + _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(unhold_call_data)); + + /*create a small button for Hold/Swap*/ + _vcui_create_hold_swap_button(vd); + + if ((_vcui_is_phonelock_status() == EINA_TRUE) && (_vcui_is_idle_lock() == EINA_TRUE)) { + _vcui_create_top_middle_button_disabled(vd); + } else { + _vcui_create_top_middle_button(vd); + } + + _vcui_create_top_right_button(vd); + _vcui_create_bottom_left_button(vd); + _vcui_create_bottom_middle_button(vd); + + { + if ((_vcui_doc_get_unhold_call_data_count() == 5 && _vcui_doc_get_hold_call_data_count() == 1) + || (_vcui_doc_get_unhold_call_data_count() == 1 && _vcui_doc_get_hold_call_data_count() == 5)) { + _vcui_create_top_left_button_disabled(vd); + } else { + _vcui_create_top_left_button(vd); + } + + _vcui_create_bottom_right_button(vd); + } + + ad->beffect_needed = EINA_FALSE; + + __vcui_multi_view_split_rotation_with_resize(); + + _vcui_elements_check_keypad_n_hide(vd); + + evas_object_show(eo); +} + +static Evas_Object *__vcui_view_multi_call_split_create_contents(void *data, char *group) +{ + if (data == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + Evas_Object *eo = NULL; + + /* load edje */ + eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group); + if (eo == NULL) + return NULL; + + return eo; +} + +static Evas_Object *__vcui_view_multi_call_split_create_layout_main(Evas_Object *parent) +{ + if (parent == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + + Evas_Object *ly; + ly = elm_layout_add(parent); + retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); + + elm_layout_theme_set(ly, "standard", "window", "integration"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, ly); + + edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); + edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); + evas_object_show(ly); + + return ly; +} + +static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) +{ + CALL_UI_DEBUG("multi-split view create"); + + voice_call_view_data_t *vd = view_data; + incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)view_data->priv; + + if (!vd->layout) { + Evas_Object * sep_ly = NULL; + vd->layout = __vcui_view_multi_call_split_create_layout_main(vd->app_data->win_main); + if (vd->layout == NULL) { + CALL_UI_DEBUG("ERROR"); + return VC_ERROR; + } + + priv->contents = __vcui_view_multi_call_split_create_contents(view_data, GRP_MULTICALL_SPLIT); + elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); + + sep_ly = __vcui_view_multi_call_split_create_contents(view_data, GRP_SEPARATOR_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_bg", sep_ly); + + priv->btn_ly = __vcui_view_multi_call_split_create_contents(view_data, GRP_BUTTON_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly); + + priv->caller_info_unhold = __vcui_view_multi_call_split_create_contents(view_data, GRP_CALLER_INFO); + elm_object_part_content_set(priv->contents, "caller_info_unhold", priv->caller_info_unhold); + + priv->caller_info_hold = __vcui_view_multi_call_split_create_contents(view_data, GRP_CALLER_INFO); + elm_object_part_content_set(priv->contents, "caller_info_hold", priv->caller_info_hold); + edje_object_signal_emit(_EDJ(priv->caller_info_hold), "set-hold-caller_ifno", "call-screen"); + + evas_object_name_set(priv->contents, VCUI_VIEW_MULTICALL_SPLIT_LAYOUT_ID); + CALL_UI_DEBUG("[========== MULTIVIEWSPLIT: priv->contents Addr : [%p] ==========]", priv->contents); + + } else { + CALL_UI_DEBUG("[UI]ad->layout_incall==NULL case "); + evas_object_show(vd->layout); + } + + __vcui_view_multi_call_split_onshow(view_data); + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) +{ + CALL_UI_DEBUG("multi-split view update"); + + __vcui_view_multi_call_split_onshow(view_data); + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("multi-split view hide"); + + evas_object_hide(view_data->layout); + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("multi-split view show"); + + incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)view_data->priv; + + __vcui_view_multi_call_split_draw_screen(priv->contents, view_data); + + evas_object_hide(view_data->layout); + evas_object_show(view_data->layout); + return VC_NO_ERROR; +} + +static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("multi-split view destroy"); + + vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW]; + + incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv; + if (priv != NULL) { + if (priv->btn_ly) { + evas_object_del(priv->btn_ly); + priv->btn_ly = NULL; + } + + if (priv->caller_info_hold) { + evas_object_del(priv->caller_info_hold); + priv->caller_info_hold = NULL; + } + + if (priv->caller_info_unhold) { + evas_object_del(priv->caller_info_unhold); + priv->caller_info_unhold = NULL; + } + + /*Delete keypad layout*/ + _vcui_keypad_delete_layout(priv->contents); + + if (priv->contents) { + evas_object_del(priv->contents); + priv->contents = NULL; + } + free(priv); + priv = NULL; + } + + if (vd->layout != NULL) { + evas_object_hide(vd->layout); + evas_object_del(vd->layout); + vd->layout = NULL; + } + ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW] = NULL; + + _vcui_cache_flush(); + + return VC_NO_ERROR; +} + +static void __vcui_multi_view_split_rotation_with_resize() +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW]; + incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv; + + elm_win_rotation_with_resize_set(ad->win_main, ad->rotate_angle); + elm_win_rotation_with_resize_set(ad->popup_mw, ad->rotate_angle); + + if (ad->rotate_angle == 0 || ad->rotate_angle == 180) { + CALL_UI_DEBUG("portrait mode signal emit"); + edje_object_signal_emit(_EDJ(priv->contents), "set-portrait", "incall-split-view"); + } else if (ad->rotate_angle == 90 || ad->rotate_angle == 270) { + CALL_UI_DEBUG("landscape mode not supported"); + } + + evas_object_show(vd->layout); +} + +int _vcui_view_multi_call_split_check_valid_eo(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + incall_multi_view_split_priv_t *priv = NULL; + int valid = -1; + + VCUI_RETURN_VALUE_IF_FAIL(vd , -1); + priv = (incall_multi_view_split_priv_t *) vd->priv; + + valid = _vcui_check_valid_eo(priv->contents, VCUI_VIEW_MULTICALL_SPLIT_LAYOUT_ID); + + return valid; +} + +Evas_Object *_vcui_view_multi_call_split_get_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_multi_view_split_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incall_multi_view_split_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->contents; +} + +Evas_Object *_vcui_view_multi_call_split_get_button_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_multi_view_split_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incall_multi_view_split_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->btn_ly; +} + +void _vcui_view_multi_call_split_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur) +{ + incall_multi_view_split_priv_t *priv = NULL; + + VCUI_RETURN_IF_FAIL(vd); + priv = (incall_multi_view_split_priv_t *) vd->priv; + + VCUI_RETURN_IF_FAIL(priv); + edje_object_part_text_set(_EDJ(priv->caller_info_unhold), "txt_timer", _(pcall_dur)); +} + +Evas_Object *_vc_ui_view_multi_call_split_get_caller_info_hold(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_multi_view_split_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incall_multi_view_split_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->caller_info_hold; +} + +Evas_Object *_vc_ui_view_multi_call_split_get_caller_info_unhold(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_multi_view_split_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incall_multi_view_split_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->caller_info_unhold; +} + + diff --git a/ui/vcui-view-popup.c b/ui/src/vcui-view-popup.c similarity index 55% rename from ui/vcui-view-popup.c rename to ui/src/vcui-view-popup.c index fe663b9..decca5d 100755 --- a/ui/vcui-view-popup.c +++ b/ui/src/vcui-view-popup.c @@ -16,17 +16,33 @@ #include "vcui-application.h" -#include "vcui-engine-interface.h" +#include "vcui-document.h" #include "vcui-view-popup.h" #include "vcui-view-multi-call-split.h" #include "vcui-view-multi-call-conf.h" #include "vcui-view-multi-call-list.h" #include "vcui-view-single-call.h" #include "vcui-view-common.h" - #define VCONFKEY_BT_HEADSET_NAME "memory/bluetooth/sco_headset_name" +#define VCONFKEY_BT_HEADSET_NAME "memory/bluetooth/sco_headset_name" #define TICKER_TIMEOUT 2 + +#define POPUP_LIST_HD_W 610 +#define POPUP_LIST_ITEM_HD_H 113 + +typedef struct { + Evas_Object *glist; + Evas_Object *btn; + + Elm_Genlist_Item_Class *itc_option_list; + char *text_buffer[3]; +}_second_mtcall_popup_data_t; + +static _second_mtcall_popup_data_t *g_popup_data; + static void __vcui_view_popup_response_cb_vol_voice(void *data, Evas_Object *obj, void *event_info); +static void __vcui_view_popup_response_cb_vol_ringtone(void *data, Evas_Object *obj, void *event_info); +static void __vcui_view_popup_response_cb_vol_bt(void *data, Evas_Object *obj, void *event_info); static void __vcui_view_popup_win_del(void *data) { @@ -118,6 +134,7 @@ static Evas_Object *__vcui_view_popup_create_win(vcui_app_call_data_t *ad, const ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION); utilx_set_system_notification_level(ecore_x_display_get(), xwin, UTILX_NOTIFICATION_LEVEL_HIGH); + elm_win_rotation_with_resize_set(eo, ad->rotate_angle); evas_object_show(eo); } @@ -128,6 +145,7 @@ void _vcui_view_popup_load(char *popup_msg, double time_out, int bterminate) { CALL_UI_DEBUG("msg:[%s], bterminate:[%d]", popup_msg, bterminate); vcui_app_call_data_t *ad = _vcui_get_app_data(); + char *markup_text = NULL; if (popup_msg == NULL) { return; @@ -146,21 +164,33 @@ void _vcui_view_popup_load(char *popup_msg, double time_out, int bterminate) ad->popup_mw = __vcui_view_popup_create_win(ad, "base"); ad->popup_eo = elm_popup_add(ad->popup_mw); } - evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_object_text_set(ad->popup_eo, popup_msg); - elm_popup_timeout_set(ad->popup_eo, time_out); - if (bterminate == 0) { - evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad); + + markup_text = evas_textblock_text_utf8_to_markup(NULL, popup_msg); + if (markup_text) { + evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(ad->popup_eo, markup_text); + elm_popup_timeout_set(ad->popup_eo, time_out); + if (bterminate == 0) { + evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad); + } else { + evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad); + } + evas_object_show(ad->popup_eo); + free(markup_text); + markup_text = NULL; } else { - evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad); + evas_object_del(ad->popup_eo); + ad->popup_eo = NULL; + __vcui_view_popup_win_del(ad); + return; } - evas_object_show(ad->popup_eo); } void _vcui_view_popup_replace(char *popup_msg, double time_out, int bterminate) { CALL_UI_DEBUG("msg:[%s], bterminate:[%d]", popup_msg, bterminate); vcui_app_call_data_t *ad = _vcui_get_app_data(); + char *markup_text = NULL; if (ad->popup_eo == NULL) { _vcui_view_popup_load(popup_msg, time_out, bterminate); @@ -178,14 +208,24 @@ void _vcui_view_popup_replace(char *popup_msg, double time_out, int bterminate) #endif } - elm_object_text_set(ad->popup_eo, popup_msg); - elm_popup_timeout_set(ad->popup_eo, time_out); - if (bterminate == 0) { - evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad); + markup_text = evas_textblock_text_utf8_to_markup(NULL, popup_msg); + if (markup_text) { + elm_object_text_set(ad->popup_eo, markup_text); + elm_popup_timeout_set(ad->popup_eo, time_out); + if (bterminate == 0) { + evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb, ad); + } else { + evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad); + } + evas_object_show(ad->popup_eo); + free(markup_text); + markup_text = NULL; } else { - evas_object_smart_callback_add(ad->popup_eo, "timeout", __vcui_view_popup_response_cb_terminate, ad); + evas_object_del(ad->popup_eo); + ad->popup_eo = NULL; + __vcui_view_popup_win_del(ad); + return; } - evas_object_show(ad->popup_eo); } } @@ -195,11 +235,11 @@ void _vcui_view_popup_load_reject_call(char *name, char *number, int end_app) char msg[DEF_BUF_LEN_LONG] = { 0, }; if (strlen(name) == 0) { - snprintf(msg, sizeof(msg), "%s
%s", number, _("IDS_CALL_POP_REJECTED")); + snprintf(msg, sizeof(msg), "%s\n%s", number, _("IDS_CALL_POP_REJECTED")); } else if (strlen(number) == 0) { - snprintf(msg, sizeof(msg), "%s
%s", name, _("IDS_CALL_POP_REJECTED")); + snprintf(msg, sizeof(msg), "%s\n%s", name, _("IDS_CALL_POP_REJECTED")); } else { - snprintf(msg, sizeof(msg), "%s
%s
%s", name, number, _("IDS_CALL_POP_REJECTED")); + snprintf(msg, sizeof(msg), "%s\n%s\n%s", name, number, _("IDS_CALL_POP_REJECTED")); } _vcui_view_popup_load(msg, POPUP_TIMEOUT_LONG, end_app); @@ -211,7 +251,7 @@ void _vcui_view_popup_load_endcall_time(call_data_t *cd) unsigned long sec = 0; unsigned long min = 0; unsigned long hr = 0; - unsigned long call_duration_in_sec = _vcui_get_diff_now(cd->start_time); + unsigned long call_duration_in_sec = _vcui_get_diff_now(_vcui_doc_get_call_start_time(cd)); char buf[DEF_BUF_LEN] = { 0, }; char msg[DEF_BUF_LEN_LONG] = { 0, }; @@ -220,7 +260,7 @@ void _vcui_view_popup_load_endcall_time(call_data_t *cd) hr = call_duration_in_sec / 3600; snprintf(buf, sizeof(buf), "%c%c:%c%c:%c%c", (int)((hr / 10) + '0'), (int)((hr % 10) + '0'), (int)((min / 10) + '0'), (int)((min % 10) + '0'), (int)((sec / 10) + '0'), (int)((sec % 10) + '0')); - snprintf(msg, sizeof(msg), "%s
%s
%s", cd->call_display, cd->call_num, buf); + snprintf(msg, sizeof(msg), "%s\n%s\n%s", _vcui_doc_get_call_display_name(cd), _vcui_doc_get_call_number(cd), buf); _vcui_view_popup_load(msg, POPUP_TIMEOUT_SHORT, EINA_FALSE); } @@ -234,7 +274,8 @@ static Eina_Bool __vcui_view_popup_timer_cb_vol_ringtone(void *data) { vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; - ad->vol_ringtone_popup_del_timer = NULL; + __vcui_view_popup_response_cb_vol_ringtone(ad, ad->vol_ringtone_popup_eo, NULL); + return ECORE_CALLBACK_CANCEL; } @@ -250,14 +291,14 @@ static void __vcui_view_popup_vol_update_icon(int volume_level) evas_object_del(icon); } - icon = elm_icon_add(ad->popup_vol_ly); + icon = elm_image_add(ad->popup_vol_ly); evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_resizable_set(icon, 0, 0); + elm_image_resizable_set(icon, 0, 0); elm_object_part_content_set(ad->popup_vol_ly, "volume_icon", icon); if (volume_level == 0) - elm_icon_file_set(icon, VOLUME_MUTE_ICON, NULL); + elm_image_file_set(icon, VOLUME_MUTE_ICON, NULL); else - elm_icon_file_set(icon, VOLUME_ICON, NULL); + elm_image_file_set(icon, VOLUME_ICON, NULL); } static void __vcui_view_popup_vol_ringtone_changed_cb(void *data, Evas_Object *obj, void *event_info) @@ -273,7 +314,7 @@ static void __vcui_view_popup_vol_ringtone_changed_cb(void *data, Evas_Object *o ad->ringtone_val = (int)value; - _vcui_engine_set_volume_level(VCUI_VOL_RING, ad->ringtone_val); + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_RINGTONE, ad->ringtone_val); elm_slider_value_set(obj, ad->ringtone_val); if (ad->vol_ringtone_popup_del_timer) { @@ -309,6 +350,11 @@ static void __vcui_view_popup_response_cb_vol_ringtone(void *data, Evas_Object * ad->voldown_key_longpress_timer = NULL; } + if (ad->vol_ringtone_popup_del_timer) { + ecore_timer_del(ad->vol_ringtone_popup_del_timer); + ad->vol_ringtone_popup_del_timer = NULL; + } + _vcui_cache_flush(); __vcui_view_popup_win_del(ad); return; @@ -320,7 +366,6 @@ void _vcui_view_popup_vol_ringtone(int vol_level) vcui_app_call_data_t *ad = _vcui_get_app_data(); Evas_Object *popup = NULL; Evas_Object *slider = NULL; - Evas_Object *icon = NULL; if (ad->vol_ringtone_popup_eo) { __vcui_view_popup_vol_update_icon(vol_level); @@ -362,7 +407,7 @@ void _vcui_view_popup_vol_ringtone(int vol_level) elm_slider_value_set(slider, vol_level); evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_ringtone_changed_cb, ad); ad->vol_ringtone_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_ringtone, ad); - evas_object_smart_callback_add(popup, "timeout", __vcui_view_popup_response_cb_vol_ringtone, ad); + evas_object_smart_callback_add(popup, "block,clicked", __vcui_view_popup_response_cb_vol_ringtone, ad); ad->vol_ringtone_slider_eo = slider; evas_object_show(popup); @@ -375,7 +420,7 @@ static Eina_Bool __vcui_view_popup_timer_cb_vol_voice(void *data) vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; __vcui_view_popup_response_cb_vol_voice(ad, ad->vol_voice_popup_eo, NULL); - ad->vol_voice_popup_del_timer = NULL; + return ECORE_CALLBACK_CANCEL; } @@ -391,7 +436,7 @@ static void __vcui_view_popup_vol_voice_changed_cb(void *data, Evas_Object *obj, value = VOICE_VOL_MIN; ad->voice_vol_val = (int)value; - _vcui_engine_set_volume_level(VCUI_VOL_VOICE, ad->voice_vol_val); + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_VOICE, ad->voice_vol_val); elm_slider_value_set(obj, ad->voice_vol_val); if (ad->vol_voice_popup_del_timer) { @@ -424,6 +469,11 @@ static void __vcui_view_popup_response_cb_vol_voice(void *data, Evas_Object *obj ad->voldown_key_longpress_timer = NULL; } + if (ad->vol_voice_popup_del_timer) { + ecore_timer_del(ad->vol_voice_popup_del_timer); + ad->vol_voice_popup_del_timer = NULL; + } + _vcui_cache_flush(); __vcui_view_popup_win_del(ad); return; @@ -434,7 +484,6 @@ void _vcui_view_popup_vol_voice(int vol_level) vcui_app_call_data_t *ad = _vcui_get_app_data(); Evas_Object *popup = NULL; Evas_Object *slider = NULL; - Evas_Object *icon = NULL; if (ad->vol_voice_popup_eo) { elm_slider_value_set(ad->vol_voice_slider_eo, vol_level); @@ -487,7 +536,8 @@ static Eina_Bool __vcui_view_popup_timer_cb_vol_bt(void *data) { vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; - ad->vol_bt_popup_del_timer = NULL; + __vcui_view_popup_response_cb_vol_bt(ad, ad->vol_bt_popup_eo, NULL); + return ECORE_CALLBACK_CANCEL; } @@ -504,7 +554,7 @@ static void __vcui_view_popup_vol_bt_changed_cb(void *data, Evas_Object *obj, vo ad->bt_vol_val = (int)value; - _vcui_engine_set_volume_level(VCUI_VOL_HEADSET, ad->bt_vol_val); + vcall_engine_set_volume_level(VCALL_ENGINE_VOL_TYPE_HEADSET, ad->bt_vol_val); elm_slider_value_set(obj, ad->bt_vol_val); if (ad->vol_bt_popup_del_timer) { @@ -538,7 +588,13 @@ static void __vcui_view_popup_response_cb_vol_bt(void *data, Evas_Object *obj, v ad->voldown_key_longpress_timer = NULL; } + if (ad->vol_bt_popup_del_timer) { + ecore_timer_del(ad->vol_bt_popup_del_timer); + ad->vol_bt_popup_del_timer = NULL; + } + _vcui_cache_flush(); + __vcui_view_popup_win_del(ad); return; } @@ -547,7 +603,6 @@ void _vcui_view_popup_vol_bt(int vol_level) vcui_app_call_data_t *ad = _vcui_get_app_data(); Evas_Object *popup = NULL; Evas_Object *slider = NULL; - Evas_Object *icon = NULL; if (ad->vol_bt_popup_eo) { elm_slider_value_set(ad->vol_bt_slider_eo, vol_level); @@ -588,7 +643,7 @@ void _vcui_view_popup_vol_bt(int vol_level) elm_slider_value_set(slider, vol_level); evas_object_smart_callback_add(slider, "changed", __vcui_view_popup_vol_bt_changed_cb, ad); ad->vol_bt_popup_del_timer = ecore_timer_add(POPUP_TIMEOUT_SHORT, __vcui_view_popup_timer_cb_vol_bt, ad); - evas_object_smart_callback_add(popup, "timeout", __vcui_view_popup_response_cb_vol_bt, ad); + evas_object_smart_callback_add(popup, "block,clicked", __vcui_view_popup_response_cb_vol_bt, ad); ad->vol_bt_slider_eo = slider; ad->vol_bt_popup_eo = popup; @@ -641,7 +696,7 @@ static void __vcui_view_popup_progressbar_set_label(char *status_string) CALL_UI_DEBUG(".."); Evas_Object *label; vcui_app_call_data_t *ad = _vcui_get_app_data(); - CALL_UI_DEBUG("popup_progress_set_label ...\n"); + CALL_UI_DEBUG("popup_progress_set_label ..."); label = (Evas_Object *)evas_object_data_get(ad->popup_progress_eo, "progress_label"); elm_object_text_set(label, status_string); @@ -650,7 +705,7 @@ static void __vcui_view_popup_progressbar_set_label(char *status_string) static void __vcui_view_popup_progressbar_response_cb(void *data, Evas_Object *obj, void *event_info) { vcui_app_call_data_t *ad = _vcui_get_app_data(); - CALL_UI_DEBUG("__vcui_view_popup_progressbar_response_cb callback=%d\n", (int)event_info); + CALL_UI_DEBUG("__vcui_view_popup_progressbar_response_cb callback=%d", (int)event_info); if (ad->popup_progress_eo) { evas_object_del(ad->popup_progress_eo); @@ -705,7 +760,7 @@ void _vcui_view_popup_load_sending_dtmf(char *status_string, char *dtmf_num) CALL_UI_DEBUG(".."); char msg[DEF_BUF_LEN_LONG] = { 0, }; - snprintf(msg, DEF_BUF_LEN_LONG, "%s
%s", status_string, dtmf_num); + snprintf(msg, DEF_BUF_LEN_LONG, "%s\n%s", status_string, dtmf_num); _vcui_view_popup_load_progress(msg); } @@ -717,7 +772,7 @@ static void __vcui_view_popup_snd_path_bt_cb(void *data, Evas_Object *obj, void elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_HEADSET); - _vcui_engine_change_sound_path(VCUI_AUDIO_HEADSET); + vcall_engine_change_sound_path(VCALL_ENGINE_AUDIO_HEADSET); ad->speaker_status = EINA_FALSE; ad->headset_status = EINA_TRUE; @@ -728,9 +783,9 @@ static void __vcui_view_popup_snd_path_earjack_cb(void *data, Evas_Object *obj, CALL_UI_DEBUG(".."); vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; - elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_EARJACK); + elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_RECEIVER_EARJACK); - _vcui_engine_change_sound_path(VCUI_AUDIO_EARJACK); + vcall_engine_change_sound_path(VCALL_ENGINE_AUDIO_RECEIVER_EARJACK); ad->speaker_status = EINA_FALSE; ad->headset_status = EINA_FALSE; @@ -743,7 +798,7 @@ static void __vcui_view_popup_snd_path_speaker_cb(void *data, Evas_Object *obj, elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_SPEAKER); - _vcui_engine_change_sound_path(VCUI_AUDIO_SPEAKER); + vcall_engine_change_sound_path(VCALL_ENGINE_AUDIO_SPEAKER); ad->speaker_status = EINA_TRUE; ad->headset_status = EINA_FALSE; @@ -760,15 +815,16 @@ static void __vcui_view_popup_hide_snd_path_cb(void *data, Evas_Object *obj, voi } } -static void __vcui_view_popup_move_snd_path(Evas_Object *ctxpopup, Evas_Object *win, Evas_Coord touch_x, Evas_Coord touch_y) +static void __vcui_view_popup_move_snd_path(Evas_Object *ctxpopup, Evas_Object *layout, Evas_Coord touch_x, Evas_Coord touch_y) { evas_object_move(ctxpopup, touch_x, touch_y); } -void _vcui_view_popup_load_snd_path() +void _vcui_view_popup_load_snd_path(void *data) { CALL_UI_DEBUG(".."); vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; int bearjack_status = EINA_FALSE; Evas_Object *ctxpopup = NULL; @@ -797,11 +853,11 @@ void _vcui_view_popup_load_snd_path() ad->ctxpopup_eo = NULL; } - ctxpopup = elm_ctxpopup_add(ad->win_main); + ctxpopup = elm_ctxpopup_add(vd->layout); evas_object_smart_callback_add(ctxpopup, "dismissed", __vcui_view_popup_hide_snd_path_cb, ad); - __vcui_view_popup_move_snd_path(ctxpopup, ad->win_main, ad->touch_x, ad->touch_y); + __vcui_view_popup_move_snd_path(ctxpopup, vd->layout, ad->touch_x, ad->touch_y); /* bt headset */ group = radio = elm_radio_add(ctxpopup); @@ -812,9 +868,9 @@ void _vcui_view_popup_load_snd_path() /* earjack or receiver */ radio = elm_radio_add(ctxpopup); - elm_radio_state_value_set(radio, VCUI_SND_PATH_EARJACK); + elm_radio_state_value_set(radio, VCUI_SND_PATH_RECEIVER_EARJACK); elm_radio_group_add(radio, group); - evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_EARJACK)); + evas_object_data_set(radio, "idx", (void *)(VCUI_SND_PATH_RECEIVER_EARJACK)); evas_object_show(radio); if (bearjack_status) { elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_HEADPHONES"), radio, __vcui_view_popup_snd_path_earjack_cb, ad); @@ -830,22 +886,21 @@ void _vcui_view_popup_load_snd_path() evas_object_show(radio); elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_BUTTON_SPEAKER"), radio, __vcui_view_popup_snd_path_speaker_cb, ad); /* current sound path set */ - snd_path = _vcui_engine_get_sound_path(); + vcall_engine_get_sound_path(&snd_path); switch (snd_path) { - case VCUI_AUDIO_SPEAKER: + case VCALL_ENGINE_AUDIO_SPEAKER: { elm_radio_value_set(group, VCUI_SND_PATH_SPEAKER); } break; - case VCUI_AUDIO_HEADSET: + case VCALL_ENGINE_AUDIO_HEADSET: { elm_radio_value_set(group, VCUI_SND_PATH_HEADSET); } break; - case VCUI_AUDIO_EARJACK: - case VCUI_AUDIO_RECEIVER: + case VCALL_ENGINE_AUDIO_RECEIVER_EARJACK: { - elm_radio_value_set(group, VCUI_SND_PATH_EARJACK); + elm_radio_value_set(group, VCUI_SND_PATH_RECEIVER_EARJACK); } break; default: @@ -863,7 +918,7 @@ void _vcui_view_popup_load_snd_path() #if 0 static Eina_Bool __vcui_view_ticker_response_cb(void *data) { - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; CALL_UI_DEBUG(".."); if (ad->ticker_tm) { @@ -881,12 +936,13 @@ void _vcui_view_create_ticker_noti(char *ticker_msg) Evas_Object *ticker_noti = NULL; vcui_app_call_data_t *ad = _vcui_get_app_data(); - CALL_UI_DEBUG("load_ticker_noti_at_bottom enter \n"); + CALL_UI_DEBUG("load_ticker_noti_at_bottom enter"); - ticker_noti = elm_tickernoti_add (NULL); + ticker_noti = elm_tickernoti_add(NULL); elm_object_style_set(ticker_noti, "info"); elm_object_text_set(ticker_noti, ticker_msg); elm_tickernoti_orient_set(ticker_noti, ELM_TICKERNOTI_ORIENT_BOTTOM); + elm_tickernoti_rotation_set(ticker_noti, ad->rotate_angle); if (ad->ticker_tm) { ecore_timer_del(ad->ticker_tm); ad->ticker_tm = NULL; @@ -894,6 +950,411 @@ void _vcui_view_create_ticker_noti(char *ticker_msg) ad->ticker_tm = ecore_timer_add(TICKER_TIMEOUT, __vcui_view_ticker_response_cb, ad); evas_object_show(ticker_noti); - CALL_UI_DEBUG("load_ticker_noti_at_bottom over \n"); + CALL_UI_DEBUG("load_ticker_noti_at_bottom over"); } #endif + +static Eina_Bool __vcui_view_send_dtmf_idler_cb(void *data) +{ + CALL_UI_DEBUG(".."); + gboolean bsuccess = TRUE; + + if (strncmp(elm_object_text_get((Evas_Object *)data), "Send", 4) == 0) { + bsuccess = TRUE; + } else if (strncmp(elm_object_text_get((Evas_Object *)data), "Cancel", 6) == 0) { + bsuccess = FALSE; + } + CALL_UI_DEBUG("bsuccess %d", bsuccess); + vcall_engine_send_dtmf(bsuccess); + + return EINA_FALSE; +} + +static void __vcui_view_dtmf_popup_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + + ecore_idler_add((Ecore_Task_Cb) __vcui_view_send_dtmf_idler_cb, obj); + if (ad->popup_eo) { + CALL_UI_DEBUG("popup eo delete."); + evas_object_hide(ad->popup_eo); + evas_object_del(ad->popup_eo); + ad->popup_eo = NULL; + } + _vcui_cache_flush(); + __vcui_view_popup_win_del(ad); + return; +} + +void _vcui_view_load_send_dtmf_popup_with_buttons(char *status_string, char *dtmf_num) +{ + vcui_app_call_data_t *ad = _vcui_get_app_data(); + char popup_msg[DEF_BUF_LEN_LONG] = { 0, }; + Evas_Object *btn1 = NULL; + Evas_Object *btn2 = NULL; + + snprintf(popup_msg, DEF_BUF_LEN_LONG, "%s\n%s", status_string, dtmf_num); + CALL_UI_DEBUG("msg:[%s]", popup_msg); + + _vcui_view_popup_unload_progress(ad); + _vcui_view_popup_unload(ad->popup_eo); + + ad->popup_mw = __vcui_view_popup_create_win(ad, "base"); + ad->popup_eo = elm_popup_add(ad->popup_mw); + evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(ad->popup_eo, popup_msg); + btn1 = elm_button_add(ad->popup_eo); + elm_object_text_set(btn1, "Send"); + elm_object_part_content_set(ad->popup_eo, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __vcui_view_dtmf_popup_response_cb, ad); + btn2 = elm_button_add(ad->popup_eo); + elm_object_text_set(btn2, "Cancel"); + elm_object_part_content_set(ad->popup_eo, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", __vcui_view_dtmf_popup_response_cb, ad); + evas_object_show(ad->popup_eo); +} + +void _vcui_view_popup_second_mtcall_unload(void *data) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + _second_mtcall_popup_data_t *p_popup_data = (_second_mtcall_popup_data_t *) data; + int iter = 0; + + if (p_popup_data != NULL) { + + while (iter < 3) { + if (p_popup_data->text_buffer[iter] != NULL) { + CALL_UI_DEBUG("Free the string %d buffer", iter); + free(p_popup_data->text_buffer[iter]); + p_popup_data->text_buffer[iter] = NULL; + } + iter++; + } + + if (p_popup_data->itc_option_list != NULL) { + elm_genlist_item_class_free(p_popup_data->itc_option_list); + p_popup_data->itc_option_list = NULL; + } + + free(p_popup_data); + p_popup_data = NULL; + + _vcui_view_set_second_mtcall_popup_data(NULL); + } + + _vcui_view_popup_unload(ad->popup_eo); +} + +static char *__second_mtcall_option_list_gl_label_get_option(void *data, Evas_Object *obj, const char *part) +{ + VCUI_RETURN_NULL_IF_FAIL(part != NULL); + CALL_UI_DEBUG(".."); + _second_mtcall_popup_data_t *p_popup_data = (_second_mtcall_popup_data_t *) _vcui_view_get_second_mtcall_popup_data(); + char *list_text = NULL; + + list_text = p_popup_data->text_buffer[(int) data]; + CALL_UI_DEBUG("list_text: %s", list_text); + + if (strcmp(part, "elm.text") == 0) { + CALL_UI_DEBUG(".."); + if (list_text != NULL) { + return strdup(list_text); + } else { + return NULL; + } + } + + return NULL; +} + +static void __second_mtcall_option_list_gl_sel_option(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + Elm_Object_Item *item = (Elm_Object_Item *) event_info; + int index = -1; + int unhold_call_count = 0; + int hold_call_count = 0; + + if (item != NULL) { + + index = (int) elm_object_item_data_get(item); + CALL_UI_DEBUG("index: %d", index); + + unhold_call_count = _vcui_doc_get_unhold_call_data_count(); + hold_call_count = _vcui_doc_get_hold_call_data_count(); + + if ((unhold_call_count >= 1) && (hold_call_count == 0)) { + CALL_UI_DEBUG("1 active call OR 1 active conference call"); + if (index == 0) { + vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_HOLD_ACTIVE_AND_ACCEPT); + } else if (index == 1) { + vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_ACTIVE_AND_ACCEPT); + } else { + CALL_UI_DEBUG("Wrong index.. Should never get here"); + } + } else if ((unhold_call_count == 1 && hold_call_count == 1) || (unhold_call_count > 1 && hold_call_count == 1) || \ + (unhold_call_count == 1 && hold_call_count > 1)) { + CALL_UI_DEBUG("1 active call + 1 held call OR 1 active conf call + 1 held call OR 1 active call + 1 held conf call"); + if (index == 0) { + vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_ACTIVE_AND_ACCEPT); + } else if (index == 1) { + vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_HOLD_AND_ACCEPT); + } else if (index == 2) { + vcall_engine_answer_call_by_type(VCALL_ENGINE_ANSWER_RELEASE_ALL_AND_ACCEPT); + } else { + CALL_UI_DEBUG("Wrong index.. Should never get here"); + } + } + } +} + +static void __second_mtcall_cancel_btn_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + + _vcui_view_popup_second_mtcall_unload(data); + + _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, -1, NULL, NULL); + + return; +} + +void _vcui_view_popup_second_mtcall_load(char *title_text, int unhold_call_count, int hold_call_count) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + _second_mtcall_popup_data_t *popup_data = NULL; + Evas_Object *box = NULL; + + call_data_t *hold_call_data = NULL; + call_data_t *unhold_call_data = NULL; + char *hold_call_number = NULL; + char *hold_call_name = NULL; + char *unhold_call_number = NULL; + char *unhold_call_name = NULL; + char *temp_str = NULL; + + int iter = 0; + + hold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_HOLD); + unhold_call_data = _vcui_doc_get_call_data_by_call_status(CALL_UNHOLD); + + if (unhold_call_data == NULL) { + CALL_UI_DEBUG("call data is null"); + return; + } + + _vcui_view_popup_second_mtcall_unload(NULL); + + ad->popup_eo = elm_popup_add(ad->win_main); + evas_object_size_hint_weight_set(ad->popup_eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_style_set(ad->popup_eo, "min_menustyle"); + elm_object_part_text_set(ad->popup_eo, "title,text", title_text); + + popup_data = (_second_mtcall_popup_data_t *) calloc(1, sizeof(_second_mtcall_popup_data_t)); + if (popup_data == NULL) { + CALL_UI_DEBUG("memory allocation failed for popup data.. return"); + return; + } + _vcui_view_set_second_mtcall_popup_data(popup_data); + + popup_data->itc_option_list = elm_genlist_item_class_new(); + + popup_data->itc_option_list->item_style = "1text"; + popup_data->itc_option_list->func.text_get = __second_mtcall_option_list_gl_label_get_option; + popup_data->itc_option_list->func.content_get = NULL; + popup_data->itc_option_list->func.state_get = NULL; + popup_data->itc_option_list->func.del = NULL; + + box = elm_box_add(ad->popup_eo); + + popup_data->glist = elm_genlist_add(box); + evas_object_size_hint_weight_set(popup_data->glist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(popup_data->glist, EVAS_HINT_FILL, EVAS_HINT_FILL); + + for (iter = 0; iter < 3; iter++) { + popup_data->text_buffer[iter] = (char *) calloc(1, DEF_BUF_LEN); + memset(popup_data->text_buffer[iter], 0x00, DEF_BUF_LEN); + } + + CALL_UI_DEBUG(".."); + if (hold_call_data != NULL) { + hold_call_number = _vcui_doc_get_call_number(hold_call_data); + hold_call_name = _vcui_doc_get_call_display_name(hold_call_data); + if (strlen(hold_call_name) == 0) + hold_call_name = hold_call_number; + } + + if (unhold_call_data != NULL) { + unhold_call_number = _vcui_doc_get_call_number(unhold_call_data); + unhold_call_name = _vcui_doc_get_call_display_name(unhold_call_data); + if (strlen(unhold_call_name) == 0) + unhold_call_name = unhold_call_number; + } + + if ((unhold_call_count == 1) && (hold_call_count == 0)) { + CALL_UI_DEBUG("1 active call"); + + iter = 0; + temp_str = _("IDS_CALL_BODY_PUTTING_PS_ON_HOLD"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + } else if ((unhold_call_count > 1) && (hold_call_count == 0)) { + CALL_UI_DEBUG("1 active conference call"); + + iter = 0; + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, "%s (%d)", _("IDS_CALL_BODY_HOLD_ACTIVE_CALL_ABB"), unhold_call_count); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + temp_str = _("IDS_CALL_BODY_END_ACTIVE_CALLS_HPD"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_count); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + } else if ((unhold_call_count == 1) && (hold_call_count == 1)) { + CALL_UI_DEBUG("1 active call + 1 held call"); + + iter = 0; + temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, hold_call_name); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + strncpy(popup_data->text_buffer[iter], _("IDS_CALL_OPT_END_ALL_CALLS"), DEF_BUF_LEN - 1); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + } else if ((unhold_call_count > 1) && (hold_call_count == 1)) { + CALL_UI_DEBUG("1 active conf call + 1 held call"); + + iter = 0; + temp_str = _("IDS_CALL_BODY_END_ACTIVE_CALLS_HPD"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_count); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, hold_call_name); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + strncpy(popup_data->text_buffer[iter], _("IDS_CALL_OPT_END_ALL_CALLS"), DEF_BUF_LEN - 1); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + } else if ((unhold_call_count == 1) && (hold_call_count > 1)) { + CALL_UI_DEBUG("1 active call + 1 held conf call"); + + iter = 0; + temp_str = _("IDS_CALL_BODY_ENDING_CALL_WITH_PS"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, unhold_call_name); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + temp_str = _("IDS_CALL_BODY_END_HELD_CALLS_HPD"); + snprintf(popup_data->text_buffer[iter], DEF_BUF_LEN, temp_str, hold_call_count); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + + iter++; + strncpy(popup_data->text_buffer[iter], _("IDS_CALL_OPT_END_ALL_CALLS"), DEF_BUF_LEN - 1); + elm_genlist_item_append(popup_data->glist, popup_data->itc_option_list, (void *)iter, NULL, ELM_GENLIST_ITEM_NONE, __second_mtcall_option_list_gl_sel_option, popup_data); + } + + popup_data->btn = elm_button_add(ad->popup_eo); + elm_object_text_set(popup_data->btn, dgettext("sys_string", "IDS_COM_POP_CANCEL")); + elm_object_part_content_set(ad->popup_eo, "button1", popup_data->btn); + evas_object_smart_callback_add(popup_data->btn, "clicked", __second_mtcall_cancel_btn_response_cb, popup_data); + + evas_object_size_hint_min_set(box, POPUP_LIST_HD_W * ad->scale_factor, ((POPUP_LIST_ITEM_HD_H * (iter + 1))) * ad->scale_factor); + evas_object_show(popup_data->glist); + elm_box_pack_end(box, popup_data->glist); + elm_object_content_set(ad->popup_eo, box); + evas_object_show(ad->popup_eo); + +} + +void _vcui_view_set_second_mtcall_popup_data(void *p_popup_data) +{ + g_popup_data = (_second_mtcall_popup_data_t *) p_popup_data; +} + +void *_vcui_view_get_second_mtcall_popup_data(void) +{ + return ((void *) g_popup_data); +} + +static void __vcui_view_popup_hide_more_option(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + + if (ad->ctxpopup_eo) { + evas_object_del(ad->ctxpopup_eo); + ad->ctxpopup_eo = NULL; + } +} + +static void __vcui_view_popup_move_more_option(Evas_Object *ctxpopup, Evas_Object *layout, Evas_Coord touch_x, Evas_Coord touch_y) +{ + evas_object_move(ctxpopup, touch_x, touch_y); +} + +static void __vcui_view_popup_manage_conf_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data; + if (ad->ctxpopup_eo) { + evas_object_del(ad->ctxpopup_eo); + ad->ctxpopup_eo = NULL; + } + + _vcui_view_change(VIEW_INCALL_MULTICALL_LIST_VIEW, 0, 0, 0); +} + +void _vcui_view_popup_load_more_option(void *data) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + + Evas_Object *ctxpopup = NULL; + int hold_calls = _vcui_doc_get_hold_call_data_count(); + int active_calls = _vcui_doc_get_unhold_call_data_count(); + Evas_Object* icon = NULL; + + if (ad->ctxpopup_eo) { + evas_object_del(ad->ctxpopup_eo); + ad->ctxpopup_eo = NULL; + } + + ctxpopup = elm_ctxpopup_add(vd->layout); + elm_object_style_set(ctxpopup, "more_ctxpopup"); + + evas_object_smart_callback_add(ctxpopup, "dismissed", __vcui_view_popup_hide_more_option, ad); + + if ((active_calls > 1) + || ((active_calls == 0) && (hold_calls > 1))) { + CALL_UI_DEBUG("Manage conference (active:%d, hold:%d)", active_calls, hold_calls); + icon = elm_image_add(ctxpopup); + elm_image_file_set(icon, MORE_MANAGE_CONF_ICON, NULL); + elm_ctxpopup_item_append(ctxpopup, _("IDS_CALL_HEADER_MANAGE_CONFERENCE_CALL"), icon, __vcui_view_popup_manage_conf_cb, ad); + } + + elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_LEFT, + ELM_CTXPOPUP_DIRECTION_RIGHT, ELM_CTXPOPUP_DIRECTION_UP); + __vcui_view_popup_move_more_option(ctxpopup, vd->layout, MORE_MENU_CTXPOPUP_X, MORE_MENU_CTXPOPUP_Y); + evas_object_show(ctxpopup); + ad->ctxpopup_eo = ctxpopup; +} + diff --git a/ui/src/vcui-view-quickpanel.c b/ui/src/vcui-view-quickpanel.c new file mode 100755 index 0000000..e68bdcf --- /dev/null +++ b/ui/src/vcui-view-quickpanel.c @@ -0,0 +1,472 @@ +/* + * 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 "vcui-application.h" +#include "vcui-view-elements.h" +#include "vcui-view-quickpanel.h" +#include + +#define VIEW_QUICKPANEL_LAYOUT_ID "QUICKPANELVIEW" +typedef struct { + Evas_Object *caller_id; + int rotate_angle; + Ecore_Event_Handler *client_msg_handler; +} vcui_view_qp_priv_t; + +static int __vcui_view_qp_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); +static int __vcui_view_qp_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); +static int __vcui_view_qp_onhide(voice_call_view_data_t *view_data); +static int __vcui_view_qp_onshow(voice_call_view_data_t *view_data); +static int __vcui_view_qp_ondestroy(voice_call_view_data_t *view_data); +static void __vcui_view_qp_caller_id_cb(void *data, Evas_Object *obj, void *event_info); +static Eina_Bool __vcui_qp_client_message_cb(void *data, int type, void *event); + +static voice_call_view_data_t s_view = { + .type = VIEW_QUICKPANEL_VIEW, + .app_data = NULL, + .layout = NULL, + .onCreate = __vcui_view_qp_oncreate, + .onUpdate = __vcui_view_qp_onupdate, + .onHide = __vcui_view_qp_onhide, + .onShow = __vcui_view_qp_onshow, + .onDestroy = __vcui_view_qp_ondestroy, + .priv = NULL, +}; + +static Eina_Bool __vcui_qp_client_message_cb(void *data, int type, void *event) +{ + CALL_UI_DEBUG(".."); + int new_angle = 0; + Ecore_X_Event_Client_Message *ev = (Ecore_X_Event_Client_Message *) event; + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv; + + CALL_UI_DEBUG("message_type: %d", ev->message_type); + if ((ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE) + || (ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE)) { + new_angle = ev->data.l[0]; + CALL_UI_DEBUG("ROTATION: %d", new_angle); + priv->rotate_angle = new_angle; + elm_win_rotation_with_resize_set(ad->win_quickpanel, new_angle); + __vcui_view_qp_onshow(vd); + } + + return ECORE_CALLBACK_RENEW; +} + +static void __vcui_view_qp_caller_id_cb(void *data, Evas_Object *obj, void *event_info) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + + elm_win_raise(ad->win_main); +} + +voice_call_view_data_t *_vcui_view_qp_new(vcui_app_call_data_t *ad) +{ + s_view.app_data = ad; + s_view.priv = calloc(1, sizeof(vcui_view_qp_priv_t)); + + if (!s_view.priv) { + CALL_UI_DEBUG("ERROR!!!!!!!!!!! "); + } + + return &s_view; +} + +static void __vcui_view_qp_draw_contact_image(Evas_Object *eo, call_data_t *pcall_data) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = ad->view_st[VIEW_QUICKPANEL_VIEW]; + + vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv; + + if (pcall_data == NULL) + return; + + _vcui_delete_contact_image(eo); + char *file_path = _vcui_doc_get_caller_id_file_path(pcall_data); + if (strcmp(file_path, NOIMG_ICON) == 0) { + priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, QP_NOIMG_ICON); + } else { + priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, file_path); + } +} + +static void __vcui_view_qp_update_caller(Evas_Object *eo, call_data_t *pcall_data) +{ + CALL_UI_DEBUG(".."); + + if (pcall_data == NULL) + return; + + char *call_number = _vcui_doc_get_call_number(pcall_data); + char *call_name = _vcui_doc_get_call_display_name(pcall_data); + if (strlen(call_name) == 0) { + edje_object_part_text_set(_EDJ(eo), "txt_call_name", call_number); + } else { + edje_object_part_text_set(_EDJ(eo), "txt_call_name", call_name); + } +} + +static void __vcui_view_qp_draw_screen(Evas_Object *eo, void *data) +{ + CALL_UI_DEBUG(".."); + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv; + call_data_t *call_data = NULL; + char buf[DEF_BUF_LEN] = {0, }; + + int grp_count = 0; + + vcall_engine_get_group_count(&grp_count); + CALL_UI_DEBUG("No. of groups - %d", grp_count); + if (grp_count > 1) { + CALL_UI_DEBUG("multi-party call - show active call"); + int active_calls = 0; + + active_calls = _vcui_doc_get_unhold_call_data_count(); + CALL_UI_DEBUG("active_calls[%d]", active_calls); + if (active_calls > 1) { + char *temp = _("IDS_QP_BODY_GROUP_CALL_HPD_ABB"); + call_data = _vcui_doc_get_first_call_data_by_unhold_status(); + snprintf(buf, DEF_BUF_LEN, temp, active_calls); + edje_object_part_text_set(_EDJ(eo), "txt_call_name", buf); + priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, QP_CONF_ICON); + } else if (active_calls == 1) { + call_data = _vcui_doc_get_first_call_data_by_unhold_status(); + __vcui_view_qp_update_caller(eo, call_data); + __vcui_view_qp_draw_contact_image(eo, call_data); + } else { + CALL_UI_DEBUG("invalid case"); + } + _vcui_create_quickpanel_mute_button(vd); + _vcui_create_quickpanel_end_button(vd); + } else if (grp_count == 1) { + CALL_UI_DEBUG("single-party call"); + int all_calls = 0; + + all_calls = _vcui_doc_get_all_call_data_count(); + CALL_UI_DEBUG("all_calls[%d]", all_calls); + + if (all_calls > 1) { + char *temp = _("IDS_QP_BODY_GROUP_CALL_HPD_ABB"); + call_data = _vcui_doc_get_first_call_data_from_list(); + snprintf(buf, DEF_BUF_LEN, temp, all_calls); + edje_object_part_text_set(_EDJ(eo), "txt_call_name", buf); + priv->caller_id = _vcui_show_default_image(eo, ad->win_quickpanel, QP_CONF_ICON); + } else if (all_calls == 1) { + call_data = _vcui_doc_get_first_call_data_from_list(); + __vcui_view_qp_update_caller(eo, call_data); + __vcui_view_qp_draw_contact_image(eo, call_data); + } else { + CALL_UI_DEBUG("invalid case"); + } + + int caller_status = _vcui_doc_get_call_status(call_data); + if (caller_status == CALL_HOLD) { + CALL_UI_DEBUG("Hold call status"); + _vcui_create_quickpanel_unhold_button(vd); + } else { + _vcui_create_quickpanel_mute_button(vd); + } + + } else { + CALL_UI_DEBUG("dialing/connecting view"); + call_data = _vcui_doc_get_call_data_mo_type(); + __vcui_view_qp_update_caller(eo, call_data); + __vcui_view_qp_draw_contact_image(eo, call_data); + } + _vcui_create_quickpanel_end_button(vd); + + evas_object_smart_callback_add(priv->caller_id, "clicked", __vcui_view_qp_caller_id_cb, vd); + + if (!_vcui_doc_get_no_status_call_data_count()) { + CALL_UI_DEBUG("no calls with NO_STATUS - update the timer"); + if (call_data != NULL) + _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data)); + } else { + _vcui_view_qp_update_text_status(vd, _("IDS_CALL_POP_CALLING")); + } +} + +static Evas_Object *__vcui_view_qp_create_window(void) +{ + Evas_Object *win; + double scale = elm_config_scale_get(); + + win = minicontrol_win_add("voicecall-quickpanel"); + evas_object_resize(win, QUICKPANEL_WIDTH * scale, QUICKPANEL_HEIGHT * scale); + + return win; +} + +static Evas_Object *__vcui_view_qp_create_layout_main(Evas_Object *parent) +{ + if (parent == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + + Evas_Object *ly; + ly = elm_layout_add(parent); + retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); + + elm_layout_theme_set(ly, "standard", "window", "integration"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, ly); + + edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); + edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); + + return ly; +} + +static Evas_Object *__vcui_view_qp_create_contents(void *data, char *group) +{ + if (data == NULL) { + CALL_UI_DEBUG("ERROR"); + return NULL; + } + voice_call_view_data_t *vd = (voice_call_view_data_t *)data; + vcui_app_call_data_t *ad = vd->app_data; + Evas_Object *eo = NULL; + + /* load edje */ + eo = _vcui_load_edj(ad->win_quickpanel, EDJ_NAME, group); + + if (eo == NULL) + return NULL; + + return eo; +} + +static int __vcui_view_qp_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) +{ + CALL_UI_DEBUG("quickpanel view create!!"); + + voice_call_view_data_t *vd = view_data; + vcui_app_call_data_t *ad = vd->app_data; + vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv; + + if (!vd->layout) { + ad->win_quickpanel = __vcui_view_qp_create_window(); + if (ad->win_quickpanel == NULL) { + CALL_UI_DEBUG("ERROR"); + return VC_ERROR; + } + priv->rotate_angle = elm_win_rotation_get(ad->win_quickpanel); + CALL_UI_DEBUG("current rotate angle(%d)", priv->rotate_angle); + + vd->layout = __vcui_view_qp_create_layout_main(ad->win_quickpanel); + if (vd->layout == NULL) { + CALL_UI_DEBUG("ERROR"); + return VC_ERROR; + } + } + + if (priv->client_msg_handler == NULL) + priv->client_msg_handler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, __vcui_qp_client_message_cb, vd); + + __vcui_view_qp_onshow(view_data); + return VC_NO_ERROR; +} + +static int __vcui_view_qp_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) +{ + CALL_UI_DEBUG("quickpanel view update!!"); + + __vcui_view_qp_onshow(view_data); + return VC_NO_ERROR; +} + +static int __vcui_view_qp_onhide(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("quickpanel view hide!!"); + + evas_object_hide(view_data->layout); + return VC_NO_ERROR; +} + +static int __vcui_view_qp_onshow(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("quickpanel view show!!"); + vcui_app_call_data_t *ad = view_data->app_data; + vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)view_data->priv; + + if (ad->quickpanel_layout) { + evas_object_del(ad->quickpanel_layout); + ad->quickpanel_layout = NULL; + } + + if (priv->rotate_angle == 0 || priv->rotate_angle == 180) { + CALL_UI_DEBUG("portrait mode layout"); + evas_object_resize(ad->win_quickpanel, QUICKPANEL_WIDTH * ad->scale_factor, QUICKPANEL_HEIGHT * ad->scale_factor); + ad->quickpanel_layout = __vcui_view_qp_create_contents(view_data, GRP_QUICKPANEL); + } else if (priv->rotate_angle == 90 || priv->rotate_angle == 270) { + CALL_UI_DEBUG("landscape mode layout"); + evas_object_resize(ad->win_quickpanel, LSCAPE_QUICKPANEL_WIDTH * ad->scale_factor, QUICKPANEL_HEIGHT * ad->scale_factor); + ad->quickpanel_layout = __vcui_view_qp_create_contents(view_data, GRP_QUICKPANEL_LSCAPE); + } + + elm_object_part_content_set(view_data->layout, "elm.swallow.content", ad->quickpanel_layout); + evas_object_name_set(ad->quickpanel_layout, VIEW_QUICKPANEL_LAYOUT_ID); + CALL_UI_DEBUG("[========== QUICKPANEL:ad->quickpanel_layout Addr : [%p] ==========]", ad->quickpanel_layout); + + __vcui_view_qp_draw_screen(ad->quickpanel_layout, view_data); + + return VC_NO_ERROR; +} + +static int __vcui_view_qp_ondestroy(voice_call_view_data_t *view_data) +{ + CALL_UI_DEBUG("quickpanel view destroy!!"); + + vcui_app_call_data_t *ad = _vcui_get_app_data(); + voice_call_view_data_t *vd = ad->view_st[VIEW_QUICKPANEL_VIEW]; + + vcui_view_qp_priv_t *priv = (vcui_view_qp_priv_t *)vd->priv; + + if (priv != NULL) { + if (priv->caller_id) { + evas_object_del(priv->caller_id); + priv->caller_id = NULL; + } + + if (priv->client_msg_handler != NULL) + ecore_event_handler_del(priv->client_msg_handler); + + free(priv); + priv = NULL; + } + + if (ad->quickpanel_layout) { + evas_object_del(ad->quickpanel_layout); + ad->quickpanel_layout = NULL; + } + + if (vd->layout != NULL) { + evas_object_hide(vd->layout); + evas_object_del(vd->layout); + vd->layout = NULL; + } + + ad->view_st[VIEW_QUICKPANEL_VIEW] = NULL; + + if (ad->win_quickpanel) { + evas_object_del(ad->win_quickpanel); + ad->win_quickpanel = NULL; + } + + _vcui_cache_flush(); + return VC_NO_ERROR; +} + +void _vcui_view_qp_update_text_status(voice_call_view_data_t *vd, char *txt_status) +{ + CALL_UI_DEBUG(".."); + vcui_app_call_data_t *ad = NULL; + int valid = 0; + + if (vd == NULL) { + CALL_UI_DEBUG("View Data is NULL"); + return; + } + ad = vd->app_data; + + if (ad->win_quickpanel && ad->quickpanel_layout) { + valid = _vcui_check_valid_eo(ad->quickpanel_layout, VIEW_QUICKPANEL_LAYOUT_ID); + if (valid == -1) { + CALL_UI_DEBUG("[========== QUICKPANELVIEW : Invalid Evas Object, ad->quickpanel_layout : %p ==========]", ad->quickpanel_layout); + return; + } + edje_object_part_text_set(_EDJ(ad->quickpanel_layout), "txt_timer", txt_status); + } + +} + +void _vc_ui_view_qp_set_call_timer(Evas_Object *qp_layout, char *pcall_timer) +{ + int valid = -1; + + VCUI_RETURN_IF_FAIL(qp_layout); + valid = _vcui_check_valid_eo(qp_layout, VIEW_QUICKPANEL_LAYOUT_ID); + if (valid == -1) { + CALL_UI_DEBUG("[========== QUICKPANELVIEW : Invalid Evas Object, ad->quickpanel_layout : %p ==========]", qp_layout); + return; + } + if (!_vcui_doc_get_no_status_call_data_count()) + edje_object_part_text_set(_EDJ(qp_layout), "txt_timer", _(pcall_timer)); +} + +void _vcui_view_qp_install_window(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + Evas_Object *win; + vcui_app_call_data_t *ad = NULL; + + if (vd == NULL) { + CALL_UI_DEBUG("View Data is NULL"); + return; + } + + ad = vd->app_data; + if (ad == NULL) { + CALL_UI_DEBUG("app Data is NULL"); + return; + } + + win = ad->win_quickpanel; + if (ad->win_quickpanel == NULL) { + CALL_UI_DEBUG("QP win is NULL"); + return; + } + evas_object_show(win); + evas_object_show(vd->layout); +} + +void _vcui_view_qp_uninstall_window(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + Evas_Object *win; + vcui_app_call_data_t *ad = NULL; + + if (vd == NULL) { + CALL_UI_DEBUG("View Data is NULL"); + return; + } + + ad = vd->app_data; + if (ad == NULL) { + CALL_UI_DEBUG("app Data is NULL"); + return; + } + + win = ad->win_quickpanel; + if (ad->win_quickpanel == NULL) { + CALL_UI_DEBUG("QP win is NULL"); + return; + } + elm_win_quickpanel_set(win, 0); + + evas_object_hide(ad->win_quickpanel); + evas_object_hide(vd->layout); +} diff --git a/ui/vcui-view-single-call.c b/ui/src/vcui-view-single-call.c similarity index 54% rename from ui/vcui-view-single-call.c rename to ui/src/vcui-view-single-call.c index f9c7e23..f7c7127 100755 --- a/ui/vcui-view-single-call.c +++ b/ui/src/vcui-view-single-call.c @@ -18,13 +18,24 @@ #include "vcui-application.h" #include "vcui-view-common.h" #include "vcui-view-single-call.h" +#include "vcui-view-keypad.h" #include "vcui-view-elements.h" - + +#define VIEW_SINGLE_CALL_LAYOUT_ID "ONEVIEW" +typedef struct { + Evas_Object *contents; + Evas_Object *caller_info; + Evas_Object *btn_ly; + Evas_Object *ic; + Evas_Object *record_btn; +} incall_one_view_priv_t; + static int __vc_ui_view_single_call_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); static int __vc_ui_view_single_call_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); static int __vc_ui_view_single_call_onhide(voice_call_view_data_t *view_data); static int __vc_ui_view_single_call_onshow(voice_call_view_data_t *view_data); static int __vc_ui_view_single_call_ondestroy(voice_call_view_data_t *view_data); +static Evas_Object *__vc_ui_view_single_call_create_contents(void *data, char *grpname); static voice_call_view_data_t s_view = { .type = VIEW_INCALL_ONECALL_VIEW, @@ -57,16 +68,17 @@ static void __vc_ui_view_single_call_draw_screen(Evas_Object *eo, void *data) voice_call_view_data_t *vd = (voice_call_view_data_t *)data; incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv; vcui_app_call_data_t *ad = vd->app_data; + call_data_t *call_data = _vcui_doc_get_first_call_data_from_list(); - if (priv->now_data == NULL) { - CALL_UI_DEBUG("Now Data is NULL"); + if (call_data == NULL) { + CALL_UI_DEBUG("call Data is NULL"); return; } /* ============ Check valid Evas Object ============= */ int valid = 0; CALL_UI_KPI("_vcui_check_valid_eo ONEVIEW start"); - valid = _vcui_check_valid_eo(priv->contents, "ONEVIEW"); + valid = _vcui_check_valid_eo(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID); CALL_UI_KPI("_vcui_check_valid_eo ONEVIEW done"); if (valid == -1) { CALL_UI_DEBUG("[========== ONEVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); @@ -74,78 +86,84 @@ static void __vc_ui_view_single_call_draw_screen(Evas_Object *eo, void *data) } /* ============ Check valid Evas Object ============= */ + char *file_path = _vcui_doc_get_caller_id_file_path(call_data); + int caller_status = _vcui_doc_get_call_status(call_data); + /* call image */ - if (strcmp((char *)priv->now_data->call_file_path, NOIMG_ICON) == 0) { + _vcui_delete_contact_image(priv->contents); + if (strcmp(file_path, NOIMG_ICON) == 0) { _vcui_show_wallpaper_image(priv->contents); } else { - CALL_UI_DEBUG("some image case!!"); - _vcui_show_wallpaper_image(priv->contents); - priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, priv->now_data->call_file_path); - if (priv->now_data->caller_status == CALL_HOLD) { - double scale_factor = 0.0; - scale_factor = elm_config_scale_get(); - CALL_UI_DEBUG("scale_factor %f", scale_factor); - - if (scale_factor == 1.0) { - edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_HD", "CID_HD"); - } else { - edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_WVGA", "CID_WVGA"); - } - } else { - edje_object_signal_emit(_EDJ(priv->contents), "HIDE_DIM", "CID"); + CALL_UI_DEBUG("Caller ID file_path: %s", file_path); + { + _vcui_show_wallpaper_image(priv->contents); + priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, file_path); } } + _vcui_show_call_bg_img(priv->contents); + _vcui_show_caller_info_status(data, _("IDS_CALL_BODY_ON_HOLD_ABB"), EINA_FALSE); + if (caller_status == CALL_HOLD) { + CALL_UI_DEBUG("=================HOLD====================== "); + edje_object_signal_emit(_EDJ(priv->caller_info), "set-hold-state", "call-screen"); + } else { + CALL_UI_DEBUG("=================UNHOLD====================== "); + + edje_object_signal_emit(_EDJ(priv->caller_info), "set-unhold-state", "call-screen"); + } + + char *call_number = _vcui_doc_get_call_number(call_data); + char *call_name = _vcui_doc_get_call_display_name(call_data); /* call name (if nothing, call number) */ CALL_UI_KPI("edje_object_part_text_set start"); - if (strlen((char *)priv->now_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_num); + if (strlen(call_name) == 0) { + _vcui_show_caller_info_name(vd, call_number, EINA_FALSE); } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_display); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)priv->now_data->call_num); + _vcui_show_caller_info_name(vd, call_name, EINA_FALSE); + _vcui_show_caller_info_number(vd, call_number, EINA_FALSE); } CALL_UI_KPI("edje_object_part_text_set done"); + _vcui_show_caller_info_icon(vd, EINA_FALSE); + CALL_UI_KPI("_vcui_view_common_set_each_time start"); - _vcui_view_common_set_each_time(priv->now_data->start_time); + _vcui_view_common_set_each_time(_vcui_doc_get_call_start_time(call_data)); CALL_UI_KPI("_vcui_view_common_set_each_time done"); - CALL_UI_KPI("_vcui_create_top_left_button start"); - _vcui_create_top_left_button(vd); - CALL_UI_KPI("_vcui_create_top_left_button done"); - - CALL_UI_KPI("_vcui_create_top_right_button start"); - _vcui_create_top_right_button(vd); - CALL_UI_KPI("_vcui_create_top_right_button done"); + { + CALL_UI_DEBUG(".."); - CALL_UI_KPI("_vcui_create_bottom_left_button start"); - _vcui_create_bottom_left_button(vd); - CALL_UI_KPI("_vcui_create_bottom_left_button done"); + /*create a small button for Hold/Swap*/ + _vcui_create_hold_swap_button(vd); - CALL_UI_KPI("_vcui_create_bottom_middle_button start"); - _vcui_create_bottom_middle_button(vd); - CALL_UI_KPI("_vcui_create_bottom_middle_button done"); + if ((_vcui_is_phonelock_status() == EINA_TRUE) && (_vcui_is_idle_lock() == EINA_TRUE)) { + CALL_UI_KPI("_vcui_create_top_middle_button start"); + _vcui_create_top_middle_button_disabled(vd); + CALL_UI_KPI("_vcui_create_top_middle_button done"); - if ((_vcui_is_phonelock_status() == EINA_TRUE)&&(_vcui_is_idle_lock() == EINA_TRUE)) { - CALL_UI_KPI("_vcui_create_top_middle_button start"); - _vcui_create_top_middle_button_disabled(vd); - CALL_UI_KPI("_vcui_create_top_middle_button done"); + } else { + CALL_UI_KPI("_vcui_create_top_middle_button start"); + _vcui_create_top_middle_button(vd); + CALL_UI_KPI("_vcui_create_top_middle_button done"); - CALL_UI_KPI("_vcui_create_bottom_right_button start"); - _vcui_create_bottom_right_button_disabled(vd); - CALL_UI_KPI("_vcui_create_bottom_right_button done"); - } else { - CALL_UI_KPI("_vcui_create_top_middle_button start"); - _vcui_create_top_middle_button(vd); - CALL_UI_KPI("_vcui_create_top_middle_button done"); + } - _vcui_create_bottom_right_button(vd); - } + CALL_UI_KPI("_vcui_create_top_right_button start"); + _vcui_create_top_right_button(vd); + CALL_UI_KPI("_vcui_create_top_right_button done"); - CALL_UI_KPI("_vcui_create_button_bigend start"); - _vcui_create_button_bigend(vd); - CALL_UI_KPI("_vcui_create_button_bigend done"); + CALL_UI_KPI("_vcui_create_bottom_left_button start"); + _vcui_create_bottom_left_button(vd); + CALL_UI_KPI("_vcui_create_bottom_left_button done"); + CALL_UI_KPI("_vcui_create_bottom_middle_button start"); + _vcui_create_bottom_middle_button(vd); + CALL_UI_KPI("_vcui_create_bottom_middle_button done"); + { + _vcui_create_top_left_button(vd); + _vcui_create_bottom_right_button(vd); + } + } CALL_UI_KPI("edje_object_signal_emit effect start"); if (ad->beffect_needed == EINA_TRUE) { edje_object_signal_emit(_EDJ(priv->contents), "SHOW_EFFECT", "ALLBTN"); @@ -155,12 +173,14 @@ static void __vc_ui_view_single_call_draw_screen(Evas_Object *eo, void *data) } CALL_UI_KPI("edje_object_signal_emit effect done"); + _vcui_elements_check_keypad_n_hide(vd); + CALL_UI_KPI("evas_object_show start"); evas_object_show(eo); CALL_UI_KPI("evas_object_show done"); } -static Evas_Object *__vc_ui_view_single_call_create_contents(void *data) +static Evas_Object *__vc_ui_view_single_call_create_contents(void *data, char *grpname) { if (data == NULL) { CALL_UI_DEBUG("ERROR"); @@ -170,7 +190,7 @@ static Evas_Object *__vc_ui_view_single_call_create_contents(void *data) Evas_Object *eo = NULL; /* load edje */ - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_INCALL); + eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, grpname); if (eo == NULL) return NULL; @@ -204,9 +224,10 @@ static int __vc_ui_view_single_call_oncreate(voice_call_view_data_t *view_data, CALL_UI_DEBUG("incall view create"); voice_call_view_data_t *vd = view_data; incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv; + call_data_t *call_data = _vcui_doc_get_first_call_data_from_list(); + Evas_Object *sep_ly = NULL; - priv->now_data = _vcui_doc_get_first(); - if (priv->now_data == NULL) { + if (call_data == NULL) { CALL_UI_DEBUG("call data is null"); return VC_ERROR; } @@ -222,12 +243,21 @@ static int __vc_ui_view_single_call_oncreate(voice_call_view_data_t *view_data, } CALL_UI_KPI("__vc_ui_view_single_call_create_contents start"); - priv->contents = __vc_ui_view_single_call_create_contents(vd); + priv->contents = __vc_ui_view_single_call_create_contents(vd, GRP_INCALL); elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents); CALL_UI_KPI("__vc_ui_view_single_call_create_contents done"); + sep_ly = __vc_ui_view_single_call_create_contents(vd, "separator-layout"); + elm_object_part_content_set(priv->contents, "btn_bg", sep_ly); + + priv->btn_ly = __vc_ui_view_single_call_create_contents(vd, GRP_BUTTON_LAYOUT); + elm_object_part_content_set(priv->contents, "btn_region", priv->btn_ly); + + priv->caller_info = __vc_ui_view_single_call_create_contents(vd, GRP_CALLER_INFO); + elm_object_part_content_set(priv->contents, "caller_info", priv->caller_info); + CALL_UI_KPI("evas_object_name_set start"); - evas_object_name_set(priv->contents, "ONEVIEW"); + evas_object_name_set(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID); CALL_UI_KPI("evas_object_name_set done"); CALL_UI_DEBUG("[========== ONEVIEW: priv->contents Addr : [%p] ==========]", priv->contents); @@ -262,9 +292,13 @@ static int __vc_ui_view_single_call_onshow(voice_call_view_data_t *view_data) CALL_UI_DEBUG("incall view show"); CALL_UI_KPI("__vc_ui_view_single_call_onshow start"); incall_one_view_priv_t *priv = (incall_one_view_priv_t *)view_data->priv; + call_data_t *call_data = _vcui_doc_get_first_call_data_from_list(); + + /*change the orientation to normal - 0 */ + elm_win_rotation_with_resize_set(view_data->app_data->win_main, 0); + elm_win_rotation_with_resize_set(view_data->app_data->popup_mw, 0); - priv->now_data = _vcui_doc_get_first(); - if (priv->now_data == NULL) { + if (call_data == NULL) { CALL_UI_DEBUG("call data is null"); return VC_ERROR; } @@ -272,7 +306,6 @@ static int __vc_ui_view_single_call_onshow(voice_call_view_data_t *view_data) __vc_ui_view_single_call_draw_screen(priv->contents, view_data); CALL_UI_KPI("__vc_ui_view_single_call_draw_screen done"); - CALL_UI_KPI("incall-one-view hide start"); evas_object_hide(view_data->layout); CALL_UI_KPI("incall-one-view hide done"); @@ -293,6 +326,19 @@ static int __vc_ui_view_single_call_ondestroy(voice_call_view_data_t *view_data) incall_one_view_priv_t *priv = (incall_one_view_priv_t *)vd->priv; if (priv != NULL) { + if (priv->btn_ly) { + evas_object_del(priv->btn_ly); + priv->btn_ly = NULL; + } + + if (priv->caller_info) { + evas_object_del(priv->caller_info); + priv->caller_info = NULL; + } + + /*Delete keypad layout*/ + _vcui_keypad_delete_layout(priv->contents); + if (priv->contents) { evas_object_del(priv->contents); priv->contents = NULL; @@ -314,3 +360,81 @@ static int __vc_ui_view_single_call_ondestroy(voice_call_view_data_t *view_data) CALL_UI_DEBUG("complete destroy one view"); return VC_NO_ERROR; } + +int _vc_ui_view_single_call_check_valid_eo(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + + incall_one_view_priv_t *priv = NULL; + int valid = -1; + + VCUI_RETURN_VALUE_IF_FAIL(vd , -1); + priv = (incall_one_view_priv_t *) vd->priv; + + valid = _vcui_check_valid_eo(priv->contents, VIEW_SINGLE_CALL_LAYOUT_ID); + + return valid; +} + +Evas_Object *_vc_ui_view_single_call_get_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_one_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incall_one_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->contents; +} + +Evas_Object *_vc_ui_view_single_call_get_button_layout(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_one_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incall_one_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->btn_ly; +} + +int _vc_ui_view_single_call_get_call_status(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_one_view_priv_t *priv = NULL; + call_data_t *call_data = _vcui_doc_get_first_call_data_from_list(); + int call_status = 0; + + VCUI_RETURN_INVALID_IF_FAIL(vd); + priv = (incall_one_view_priv_t *) vd->priv; + + VCUI_RETURN_INVALID_IF_FAIL(call_data); + call_status = _vcui_doc_get_call_status(call_data); + return call_status; +} + +void _vc_ui_view_single_call_set_call_timer(voice_call_view_data_t *vd, char *pcall_dur) +{ + incall_one_view_priv_t *priv = NULL; + + VCUI_RETURN_IF_FAIL(vd); + priv = (incall_one_view_priv_t *) vd->priv; + + VCUI_RETURN_IF_FAIL(priv); + edje_object_part_text_set(_EDJ(priv->caller_info), "txt_timer", _(pcall_dur)); +} + +Evas_Object *_vc_ui_view_single_call_get_caller_info(voice_call_view_data_t *vd) +{ + CALL_UI_DEBUG(".."); + incall_one_view_priv_t *priv = NULL; + + VCUI_RETURN_NULL_IF_FAIL(vd); + priv = (incall_one_view_priv_t *) vd->priv; + + VCUI_RETURN_NULL_IF_FAIL(priv); + return priv->caller_info; +} + diff --git a/ui/themes/bg/vc_button_callend_press.png b/ui/themes/bg/vc_button_callend_press.png new file mode 100644 index 0000000000000000000000000000000000000000..b68bd66ddb40f0994bb0f33d7ae1895e2f5e2f46 GIT binary patch literal 2959 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 Ppkmz9)z4*}Q$iB}yev}k literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_button_conflist_hold_press.png b/ui/themes/bg/vc_button_conflist_hold_press.png new file mode 100644 index 0000000000000000000000000000000000000000..a118dcaa13fbbafd0daf084eb14c14e4873173d2 GIT binary patch literal 1962 zcmaJ?Yfuwc6pqNCq9Wj{sHN*F;)6Uk5J&v9KnNfPiBqb1;9%7m5Kt<3U?@w% zkYGY2Ug?*LBO$4QGI?r(oTC8wD*-PZmlRMT1Ptg@iE0g3#{=K#a>>22iRlSw5JRE=Iuz&fg0vuI2~glOcr z5+jtT8ZaxuF=#Tu1IbF?x1hp4%BnRVu8F)bx(>$Z5RGAOX$&Zl{6AEs`iRyLQsh&; z|0%4I=`n;ZMKowKE++>UyU3gh;|g&ECQw|4qKRX-7#xohs3so80AUD=1_7Z;wF1>@ z-r*$@u2`)hV6_|(i+CWZKvOCeT#=72L&#pmWHW_q2=aw|*eo|TQy^mbx-vQLzRWSM z2$d(R5H&HzRea*Qj>|P$L4}c-MF_4;K@_WSR0X_inX4SX7RI=GAGnI~Yk|h)(#c}z z=D~h8=&>WxJ?8C4+mgXY<0ER)?Ko-cvXEQZ6pE#zSR|0?Za;3jnh>>a)}$wz&TPFa z+Oa27d_kEw{pPjuH9yIw)@A$|+&1}VOOfp(TSLZt!E-v+TjDu)Vs3EK!n|!=7xqs* zYn`z?ULv1oIC8y#?P?s(WuNJ&*79D~9G$b#-!8~^p?GC?MPWno(0XpiCYRZ-DuPD(g1#vCjFPu~H|%vL(sZ^! z*B|H1?`u_NgJSyop8qrw5xd;~q01CciFK}h+b;zThf}lxky52qb=Aa<2A=v{pdmJ;q>A1- z@^A;OH?l4!seN+Qo(EZfUp{ia;xTc6Idkzrm%aTt!8@%yj;Y%`h4P0>i$c!?DGvML zEk@B$Yi(M0M*S<0KXR#SH*&hvsX>L{uCViR5pC}YhsHgplCUXtT;~9qi%tYDNnA91bKf6}N_+2X z9;w&nTwRx&?-DMSIyL{cm(s-!cDK)5%vyrCZ6VeO8vZz%=Omj{@Qth8&K@Y4TE3|@ ze1KcO!q4^EG{|B>Vdf>a@!E1mKx2zh@qD+F>8rK#O}mBLyy8P``d9H^H){)ac2J%k zf^DkZ;!PeC76TKe_*v#`vs?_=d0W`$Og6{fpgEq9NwLq_CZdqBh5cth3v>J)_!;p% zkR;xH>nOG8>GVl?;ce9z&)1`WeZ^dv=%fIsozG?|E?iAN{*j5xWOM)zkhVZ+6e)`45b6-fH4jEIOeSY=2V*{<1l{s%(~E z$7oH^icC|B&+*h}0X?y=zm3$V$sb)Jl5zK*aB;ga;C2z`F0?>Ys2Z%8Srf?bJo=a_ ztDF~DSy4ZOR(da}gKG1&L(zd={~eGa?|0g)A^$`CkoL_PC5AYCR>8tFmwV1V(@UdE q2Tz`k;B7uNr^9(`f7TomwU$yFr9HN!%dge^_Z0gEib{PpZvPk8+ZI;< literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_button_hold_swap_normal.png b/ui/themes/bg/vc_button_hold_swap_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..c95ea48dddebd0050b9f25149f3d14fc6afee129 GIT binary patch literal 1176 zcmaJ>TSyd97#=N3Eqll$Dud%#MA*({-HSW9R=cy-V!PS8kv^2o&Kz~vX3jWswjB+- zNEAi)D5-=fAA$m*zzBS>m!w{Li3lpF9;%0et`r4PXUtWJwt@N2IX~a`{g?A|4mZWu zmzFFpp(v^}xs!1I%0VSoo>prZb zs2Q}HY{4zDje?9cMshHWtr>((QFUut0VPrz! zWjL42`FP;-FuaEgcmk_{o8vi_ce9+|#dCt!FK|4V_-GQ%RN94v*f0@`oPu;G#)iPM z*=&}{)-cHIVEI5Gz;bTZ?RF7_%j(v#WV>{$DyJYqOEy<4IfqqLe}z9HdF6e@f7d zNm<>RXcK7|YfA>pGn`XW4j7C5AF64SXbUIcRKEWdwvycjWE0Rr8B-<~*Iwm>GK8=R zC5+4@LOXL^Z0bZ9S)IrL;bt$xgRQErpsY2HkHv(jZedB6VN?v#M1fINMex=51MZO5 zSL+T(cs|01d=X#BSL=_|itdI6znJ5SNX}?b$2qPt#r5aqI-{T&B(exibr)0`Or(MF zk_9z?E}p!46I>;KF5bLcmL$VE7d!2ub1pJH&USKa$zgKvp-!gVBx9Yj4!)(Rg1J#~ zUDAH??in9Huy(;dX-ur1UvhEyboiuEpugC@zuGQ3ai@6I*P<`W1`3x9-vF1*Gj|uw zX>M{WDhlZOdvM&oo0Z~ueM=@BKlsYCrW<;A;S4?1r}G!hqwLOc3?16oy#3IG5A literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_button_hold_swap_press.png b/ui/themes/bg/vc_button_hold_swap_press.png new file mode 100644 index 0000000000000000000000000000000000000000..c0250f69707732f853b96c8e68c5245a819ba72e GIT binary patch literal 1331 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 delta 351 zcmV-l0igbr7>5{;7YaxS1^@s6!n_onu_2!de=b*AOw5{C*Q!u%_-oJMM!VE*g{Du0SUn+1&2!Ne$RIA zcYY6W23l*nI6w;A1BcHK;0efpZ-BGza1EqMlFXD+j7B2>_WS+iYPEV;EEcm4y$rP0 zf9E1%wAO@S$gylT8}dA-ZQDSAbTXOzSq2EhkR(X}QUUIiQuHN`V}M&34u`Spy1gI> z0)Pu~9EVdPA^@)N&sboA1r}Iffdv*=V1Wey(lpIU#kOq$YH6D0v##r2P*oMcy8u~P zmc3xPTmocH6h&{l-A;L)Hyw}1N6W?-Ny@U!fVmSz5rA2**HTs0)bl)i-v?m3-BJ_< x#+VFv1il8pW*NXuH_fiP_iMMVo)3ke0RRw_S40OW7cl?;002ovPDHLkV1fuwna%(J diff --git a/ui/themes/bg/vc_button_qp_press.png b/ui/themes/bg/vc_button_qp_press.png new file mode 100644 index 0000000000000000000000000000000000000000..494524891435152da568667b439139ed3257b9df GIT binary patch literal 3150 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 delta 104 zcmZ1~_E%J~Gr-TCmrII^fq{Y7)59eQNV9=32Z(%d=Do*8#ra&e8lEnWAr-fhQW_XE y*+M?_2zDzlgMctIpTjN|WxdmkK-K^MGc!!$V^T?!e=-TkW$<+Mb6Mw<&;$SxyBZq+ diff --git a/ui/themes/bg/vc_conf_button_bigend_call_press.png b/ui/themes/bg/vc_conf_button_bigend_call_press.png new file mode 100644 index 0000000000000000000000000000000000000000..530d0ebaae1741bcf5ed5b179e63731ac5d02ab0 GIT binary patch literal 1105 zcmaJ=TSyd97#_R1l}6c13c)m$L9}z*i|*uR?#^0EjV!xM`V`L29CrtuIpfT+T`dUe zr6`0b6nuz?3hE(>2#hX@Sx|u*23-Xcp`aTS^b%BOY}X3f&ciwXIeg#uU(eB4(~k0G zRm%v1D39(Gv94X&;gRkoZeyBLM}+n=?d6(o*9aqgP`^x^(&|rDMp5&1xO#w zx)s*Xk$x}DdD(zBu!ZDVj%7HWVQbtREBI;zmLv0v!rm;kO^Az)d0+Szq%sJZ0>fmp zSvu>Xp_OL1Kp?=dJj3&DjBwlC29k4b!(Lxd5P_{&nu#=MkdC69f?X&`;Yfd_pqulu zhMg}HE*O)OO@^acC#3>VlKv0X^?9_7;^23@{}i^9-6mk-z=mCxf*aSi-f?9LVGGCz zT1f~y3RR3{AcA%Vnq)ZPqdBr!GgO$h=kSswL=79sh618ukirVIrl~^M=dbZbe0(h* zuI0E0*C2Wu#86|6FX9jJp@_G@6`|6l0|OPf>Tj;6DAySU-Nc?nU}^h++Gs(YoJ(2I zipRnh)ys3$;<0c=xeN}5aT@zaqYF=XdK`0pZ1H7&@PUD+-NIu%zNb^eU*cX=Y)Ix_ zynlAJe1u)OcmmEY3T^KgUU7uW#M!d&`E%)|`${Ty_5P>~ZQlOmN7dFl{ny@o8n_TB zshzQ}pMHC5>ciC81rGz$%ZG2g>Rsguu6VlKC1-AzT&fzoGR`g<{V2aYFjD<^v;2MZ z;*$M?-}D8EyVV~CkmqD;v^0GD w>foE_uE|o*>ig?DD^hC)#0~Dre#niH!^Fc=-ou0^TIPK6XrxKJ9BMuE6UBOR*8l(j literal 0 HcmV?d00001 diff --git a/ui/themes/vc_conf_call_list_bg.png b/ui/themes/bg/vc_conf_call_list_bg.png similarity index 100% rename from ui/themes/vc_conf_call_list_bg.png rename to ui/themes/bg/vc_conf_call_list_bg.png diff --git a/ui/themes/bg/vc_conf_end_normal.png b/ui/themes/bg/vc_conf_end_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..fccdf654f309a9f1ce300d594da5009cc2c07079 GIT binary patch literal 1246 zcmeAS@N?(olHy`uVBq!ia0vp^JV5Nl!3HGzOSVn}Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_nZLn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u&JJ*LU?9g zN`84USiP^Wm1kaYNn&1ds;7&s63_&_%*+%kBV$W917jx>3nOP!Lqk_XM>As!7b7P} zGZ%9US3`3%m|mCsATTymE-@G^|GP0?@)MA^6xV}cV!Qr`Cu8h{#s7bw%kS26W;dRPd7T1Rhy;u z`0murt8451e>6`%d)3S}Fm}J4vLv6wN9zfqLaj90R+RP4L9>h-!)jwN^7 zSGTNxbWz%O$JI3FO@_YlKX;$b6yN@=Tc~{2tV>(hzc|SK$>{B|s?9MI^R7*j))fB` z%d=SJa{MW|8RFmbC;Uie5@=vxQD9)?a9{v2{}>-gTc)&E;xF5b39g3%E}e8c-yInD z%TRICoylo7S&kfkmdNmPKD4={@GNXqYIXP1ZxeF%+JqihQ!G32taVZHm*nPdjgQl= zzT^vauIaje?oiCzxZqer{p{|h>(ggAcI8~R-BD~2u<}POhXKRdxrhGrfB(b+Dsenr L{an^LB{Ts5xtg~; literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_conf_end_press.png b/ui/themes/bg/vc_conf_end_press.png new file mode 100644 index 0000000000000000000000000000000000000000..09a990f9b352bae6da3d7be0f10907c7f9ba34d1 GIT binary patch literal 1276 zcmeAS@N?(olHy`uVBq!ia0vp^JV5Nl!3HGzOSVn}Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_nZLn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u&JJ*LU?9g zN`84USiP^Wm1kaYNn&1ds;7&s63_&_%*+%kGc!{&XG=>H3nOP!Lqk_XM?+^zS5r3= zGh-J+BXdI&m|mCsATTyF!Z>HP&F&hfB-mlo}S0?P*k^F>Vi;2h`hAC}H%%v_GS>%Aov+a~{cgz@ zHC`cwx;f`GU#56iIZSFwVs_zUI3;9u-*8vdn|bfrm$*-s_S*ga#oWeSwhQKddd|nl zu_5wcUH#pxduDF8z9!jSVQ`TXIL#BW_Tb!&&l2U|9?4bPc;!*`k|VlVP4{)4v2N4& zC1quHZu7&%$@*%owT2q+QqpRb75Eq}|_284P~X+3Ynbn8{ex=))o#b}BA zJhN28()HZgR|1oEe@U74K22}h%$GHO>CbP@UzoW$D(C&Wwks_5pZ{1rSTeP+Vpod7 ps^rL%W_A)0Ih(V^|J1QaFf1-?z4h+EJ6}+F@D-zkmP$ literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_conf_split_normal.png b/ui/themes/bg/vc_conf_split_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..d320be9ed355032b4cd69568b48e2e65b103d7ba GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0vp^JV5Nk!3HFg)y;ncDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}mUbW};_k zVqj@vsiRh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*q`*i_F@Av`lL zCBM8Ftlrnx$}_LHBrz{J)zigR321^|W@d_&tGT&_xtoEBg^{zVp`ojxlZlg?i;;z; ztE-ENvy*`-Os`9Ra%paAUI|QZ3PP_bPQ9R{kXrz>*(J3ovn(~mttdZN0qkX~Ox$iU z!f757L*#bH6grAxROzlO$WZfy{IvJQHUVFMY zhE&{oGu@D@*+IZHotGo?h~EWiji_a34TUaA6|wOri6%)G^=?_|@_~b^EGb#^tdEgU z(nB-N=ZD=R?n`gG6ZqJINwsScbDiG}-ZI|#Uv98}ixD|Gl~06|BVOisr|o&>)0++$ z^qAZ7Fqg!#hlV;{Hj(sl7j1jU_b^(3Wy6$BI-a*KuV_(weaOeD$^ZI=R>}D+#k)QS z%`p7>Bu2!MMbJe6LbUAXu-&_{G;x`_;&S$#dS{-fEcsG(y>;f7blHMf@toUiORq>T zs?WXc6np)CX~MRGBR6!*jyBJ~VQn^BtZzC4GsC~Qm|pk BcVYkl literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_conf_split_press.png b/ui/themes/bg/vc_conf_split_press.png new file mode 100644 index 0000000000000000000000000000000000000000..e61325dce612199f37e059856861c3fd58e7afda GIT binary patch literal 1277 zcmeAS@N?(olHy`uVBq!ia0vp^JV5Nk!3HFg)y;ncDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}mUbW};_k zVqj@vsiRh+i#(Mch>H3D2mX`VkM*2oZxQ#zd*q`*i_F@Av`lL zCBM8Ftlrnx$}_LHBrz{J)zigR321^|W@d_&vx||Dg^PuWg^{zVp`ojxqno*_ldGGV ztBZ?~tBaW{Os`9Ra%paAUI|QZ3PP_bPQ9R{kXrz>*(J3ovn(~mttdZN0qkX~Ox$iU z!f757L*#bH6grAxROzlO$WL^Eu--3aGvCz}S zF{I+wo9VWGhaCi3@2|N&`$p%Yj^rl{TTDdmFidGX)M&NH%Tavk0{>Q_POd`Us8w@V z7ykK?Kl9_QE+tkGt1j8hrFUn3@0}lWcEVOMp@$V#DwlV;XPjGD$|CAf)x7D4!#w-t zn?J5r@o4yvxNX6T$qKI+0(rQ21wt4CL^ed8dQmmg?q07)|MKf1<@YbVZr)|PK=$)< zK1PlWv4`tw?`6C*bG%cUWOs$Zg-_r#PsG}TGdrI>VtBjal~2;jqu(7mqpz^+k37Sh zGmqb-Btz?bTR-3286w{fF4!@7mZ6*D%2m!^!;c(m+>tnC^+q>K!JU4+?~?w)f86xV{yU7H2M>o}m7x vrTrT>TT_*+#*Jgv%%@|ELUm>CGx0F+Tx>mM_42G1s6g^`^>bP0l+XkKKOoI+ literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_contact_btn.png b/ui/themes/bg/vc_contact_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..c605990357ca4a94f63c7638141699d4c58a5d95 GIT binary patch literal 3799 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 B0^|Sy literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_contact_btn_press.png b/ui/themes/bg/vc_contact_btn_press.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e840963c3a7b8e53a0ae531f7f2d8acd63a920 GIT binary patch literal 3750 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 literal 0 HcmV?d00001 diff --git a/ui/themes/bg/vc_more_button_normal.png b/ui/themes/bg/vc_more_button_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3170d305d5737400296cb9d9919b82abf1ff3e GIT binary patch literal 3106 zcmV+-4BhjIP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003^Nkl z^q8oobqU;CO7<9G_P+TxgK~LugJ&rTQ;8n)9F)rtn57JJ8U%AWqbjg0a;a7r3~l*%Wq@LVl0cAR4U8$E6@c#i>q6Vg+*$=1UJATa2q`l w|CQYN3L}g#!U!XbFv18Uj3JCL|BbH!0Qnnd$b*Q#OaK4?07*qoM6N<$f>PwO!TKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003=Nkl423Bo{DONzNf8m0*)1BvsN29w4=yR)SzFq_VQIOscd( z4j?4h3bHm+1QdxnGRw~U!#1;nFc1FUjJsGXiUMo9E+h~}7-57FMi^m)5k?qcEMbHZ zMi^m)5k?qcs$N&IKk#+%o9eYgtNTzN`HiuagsFDM0R2R3nU@{r*;X=R%$OMUlxQu} zm^pI}m|m&_UQ8HUNf=>Dn=!YE*799;m`_{Dj4@+k)JLMVbbv{jVQvz^T-!=!Otms5 z)pq^k0nb(vMi^oC*BwwCcr|i>83XMD=C^_OTw3W382)44FwD&=V;+Iop8K;fC%f=n z0r%{Fh&>PYR=Ms%K*ZrdsA$tAFJElTfQ-0sSH2-Wa)C??Kr0&*EVUHx3v IIVCg!0FX^QLI3~& diff --git a/ui/images/hd/icon/vc_contact_icon.png b/ui/themes/icon/vc_contacts_icon.png similarity index 100% rename from ui/images/hd/icon/vc_contact_icon.png rename to ui/themes/icon/vc_contacts_icon.png diff --git a/ui/images/hd/icon/vc_contact_icon_dim.png b/ui/themes/icon/vc_contacts_icon_dim.png similarity index 100% rename from ui/images/hd/icon/vc_contact_icon_dim.png rename to ui/themes/icon/vc_contacts_icon_dim.png diff --git a/ui/themes/icon/vc_contacts_icon_press.png b/ui/themes/icon/vc_contacts_icon_press.png new file mode 100644 index 0000000000000000000000000000000000000000..81913d4433acb8f466bcadac9d6d9ffc73999b19 GIT binary patch literal 3390 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 R_*-HC(APH6YS46!{vXxX+PVM$ literal 0 HcmV?d00001 diff --git a/ui/themes/icon/vc_end_call_icon_press.png b/ui/themes/icon/vc_end_call_icon_press.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d97a17b26b35379079569657a8a64387e6aa05 GIT binary patch literal 3409 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 literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_join_icon.png b/ui/themes/icon/vc_join_icon.png similarity index 100% rename from ui/images/hd/icon/vc_join_icon.png rename to ui/themes/icon/vc_join_icon.png diff --git a/ui/images/hd/icon/vc_join_icon_dim.png b/ui/themes/icon/vc_join_icon_dim.png similarity index 100% rename from ui/images/hd/icon/vc_join_icon_dim.png rename to ui/themes/icon/vc_join_icon_dim.png diff --git a/ui/themes/icon/vc_join_icon_press.png b/ui/themes/icon/vc_join_icon_press.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc3ccde95a4abf9d3e3a3a79753060867e6869e GIT binary patch literal 3598 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 literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_keypad_icon.png b/ui/themes/icon/vc_keypad_icon.png similarity index 100% rename from ui/images/hd/icon/vc_keypad_icon.png rename to ui/themes/icon/vc_keypad_icon.png diff --git a/ui/images/hd/icon/vc_keypad_icon_dim.png b/ui/themes/icon/vc_keypad_icon_dim.png similarity index 100% rename from ui/images/hd/icon/vc_keypad_icon_dim.png rename to ui/themes/icon/vc_keypad_icon_dim.png diff --git a/ui/themes/icon/vc_keypad_icon_press.png b/ui/themes/icon/vc_keypad_icon_press.png new file mode 100644 index 0000000000000000000000000000000000000000..a551ced55e9af446d48c9dc16a3843e54483af29 GIT binary patch literal 4048 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 literal 0 HcmV?d00001 diff --git a/ui/themes/icon/vc_live_video_icon.png b/ui/themes/icon/vc_live_video_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..092e622a4f3894ec8533c545f5603656ea73dfc4 GIT binary patch literal 3865 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≦0w9$E0FBpMn=VxVaFjKa6^#RCf6dCPGkDQLejnUTwv=ia zDYRVOgj(%95%3x1Gm9;sR$(NnUoKH@GpJcE>JXUNjtZ;P)!~jA;~}AMqD+THL%Erm zVrl*aeruC>OI@DcGHkt=vK7kk<6?1vYxr_2@PKIe7&98AoPolkOZ+!s|2I1DhmT({ z5hvl+;A7m64@ptV%^q2I8OK4@;TN35CtP_e=lO5#Xk7uv96D*xIjPTacJ}Gy)6W?+}SL9@`j597(%8B$VGGB6)-gA~9nl1a3B_;7M+$|o?; zRp#v08mT8LEnU9B&K-{F>{R}yNdYvKqSw2-ai7fLf+cv$0a3+-+pJvZ(!xT7$DAtR zjDM6VH>Iulq`=FBF8fGNR3JFOV(j&j!(Z0v_)gfL2SHwo zw~YZW^?MvY;uz@f_I`{6Qa&Ic-~t9(*iqNe-%41YdELK@4%*$9X!wwy^BMw`=BU9I#YPXh41?wwkJHO?~}cNrsm=`e}sQ z#v$hpK0fziQQcms%QPnr!iYQJWPD;JCLF@DvTrsvHiF$}GBfGO9N&+kB%YX077^s8 z6be)}vKY#ul8jkXqD>*>wr}-AS4w=AG-?=qRe4-{1-uHa|;>Fc&f4^q6TbM

    Z8!%UQpEG z{fMf!*y9@2nOc)w$&ew#VdYug-rnXvJWZ{xs;cr+WxuPmC2V3ajEf8YRyyRv~fc)zoprN9xT%~0D F>VI{0G1dS8 literal 0 HcmV?d00001 diff --git a/ui/themes/icon/vc_live_video_icon_dim.png b/ui/themes/icon/vc_live_video_icon_dim.png new file mode 100755 index 0000000000000000000000000000000000000000..4de8fd1a8a78138ed77a28623607f602dba0a2ce GIT binary patch literal 3814 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 literal 0 HcmV?d00001 diff --git a/ui/themes/icon/vc_live_video_icon_press.png b/ui/themes/icon/vc_live_video_icon_press.png new file mode 100755 index 0000000000000000000000000000000000000000..3324efed876a0bdfff9a263234ea40e1e0d89807 GIT binary patch literal 3481 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 literal 0 HcmV?d00001 diff --git a/ui/themes/icon/vc_msg_icon_press.png b/ui/themes/icon/vc_msg_icon_press.png new file mode 100644 index 0000000000000000000000000000000000000000..8d658a0bfefbb66ca8096133da868bbf54fc867f GIT binary patch literal 3489 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 P00000NkvXXu0mjfGID0c literal 0 HcmV?d00001 diff --git a/ui/themes/icon/vc_mute_icon.png b/ui/themes/icon/vc_mute_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e8205c12bc10c41f2e19aa1e300e47b12d2354a3 GIT binary patch literal 3897 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 literal 0 HcmV?d00001 diff --git a/ui/themes/icon/vc_video_call_icon.png b/ui/themes/icon/vc_video_call_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ba953fd0b1b98818a67dcd461bc78df195f5ea GIT binary patch literal 4572 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 literal 0 HcmV?d00001 diff --git a/ui/themes/vc_btn_green.png b/ui/themes/vc_btn_green.png deleted file mode 100644 index 87c4b51c7453a19c952fb593dcb30fab3f305ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3628 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 b`U3^xaE1d<;WksZ=Li_;n(3gmonrnEv8=@Q diff --git a/ui/themes/vc_button_grey.png b/ui/themes/vc_button_grey.png deleted file mode 100644 index da986e87a857dd522fda2f0af82d490109383c4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmVy}g zpy7SsH+b&3KM%gg;0n~iOJGkw7zX2D z2;?B!Z{5%;j)EPq0IJ|l+RF%-1V>;UU+^9j?}B-7BAsOp97DXu4-s9=g2gVR%qbn7 z=VhBG?gba%9Nb8ENq`xU;)yfh&4E7LEMDSQJy#r?!{f`N>iK!uMWj@ zB_sMT`*0|xD;|+Qiiu5ZViTL##3nYeiA`)`6Pwt?CN}YZ6hDbyk-16_c&7Lk^f?r> z_q?XKB7OntDs)vSE`u?LV!Fx{7j+@wKuQM-y&}b|Ww*qyYGYkUW9rys)!V#o1@Rl~ zS^e=l85rL!L0Smj;~dC?B{2O9>6E^cSI2k4s`Lr4r_;UEdtMKj{2)l_vlX1Q+RiCB s0M@?;;7op&|6DuNJ<+i8|4V=Y09@gDh#>(Pvj6}907*qoM6N<$f;g+z{Qv*} diff --git a/ui/themes/vc_button_hide_keypad_normal.png b/ui/themes/vc_button_hide_keypad_normal.png deleted file mode 100644 index 9df94e73ffcce30185643e69153f09528cd152b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3595 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 diff --git a/ui/themes/vc_button_rej_w_msg_press.png b/ui/themes/vc_button_rej_w_msg_press.png deleted file mode 100644 index 1267a27d60bdad7aab3b1b247b444c8bcc642a18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3717 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 diff --git a/ui/themes/vc_conference_call_btn_press.png b/ui/themes/vc_conference_call_btn_press.png deleted file mode 100644 index 7b9fc6e07d683076002c4786d36d7b7b891d17f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3093 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 diff --git a/ui/themes/vc_conference_call_btn_red.png b/ui/themes/vc_conference_call_btn_red.png deleted file mode 100644 index 7494936095ecae5cb00416c30dd6337adbedf7d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3077 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 ThB_O800000NkvXXu0mjfIQzEX diff --git a/ui/themes/vc_control_btn_prev.png b/ui/themes/vc_control_btn_prev.png deleted file mode 100644 index d45184dc789442a871526c4b77a1b5374729d086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3235 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 )3(nlH2X_s-`7d}6{&5H8P=(q`jL9bRy9 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 Ks@K5n!v6=FV+5c8 diff --git a/ui/vcui-application.c b/ui/vcui-application.c deleted file mode 100755 index 41c9d7d..0000000 --- a/ui/vcui-application.c +++ /dev/null @@ -1,1224 +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. - */ - - -#include "vcui-application.h" -#include "vcui-app-window.h" -#include "vcui-app-data.h" -#include "vcui-document.h" - -#include "vcui-view-dialing.h" -#include "vcui-view-incoming.h" -#include "vcui-view-incoming-lock.h" -#include "vcui-view-keypad.h" -#include "vcui-view-single-call.h" -#include "vcui-view-multi-call-split.h" -#include "vcui-view-multi-call-conf.h" -#include "vcui-view-multi-call-list.h" -#include "vcui-view-callend.h" - #include "vcui-view-popup.h" -#include -#include -#include -#include -#ifdef SIGNAL_HANDLER -#include -#endif - -static vcui_app_call_data_t global_ad; - -#ifdef SIGNAL_HANDLER -#define VCUI_SIG_NUM 12 -static struct sigaction vcui_app_sigact; -static struct sigaction vcui_app_sigoldact[VCUI_SIG_NUM]; -static int vcui_app_sig_to_handle[] = {SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGQUIT,SIGSEGV,SIGSYS,SIGTRAP,SIGXCPU,SIGXFSZ,SIGTERM,SIGPIPE}; -#endif - -static gboolean g_avoid_multi_setup = EINA_FALSE; -static Eina_Bool __vcui_avoid_multi_setup_timer_cb(void *data); - -#define CISS_AUL_CMD "org.tizen.ciss" -#define CISS_MODE_OPT "REQ" -#define __VCUI_NOTIFICATION_CALL_GROUP_ID 1001 - -static int __vcui_launch_ciss(const char *number); -static void __vcui_cache_flush_set(Evas *e); -static void __vcui_init_view_register_function(vcui_app_call_data_t *app_data, vcui_app_call_view_id_t view_id, voice_call_view_data_t *(*view_new) ()); -static int __vcui_app_create(void *data); -static int __vcui_app_pause(void *data); -static int __vcui_app_reset(bundle *kb, void *data); -static int __vcui_app_resume(void *data); -static int __vcui_app_terminate(void *data); -static void __vcui_fade_out_cb_routine(void); -static int __vcui_lang_changed_cb(void *data); -static int __vcui_low_mem_cb(void *data); -static int __vcui_low_bat_cb(void *data); -static void __vcui_init(vcui_app_call_data_t *ad); - -#ifdef SIGNAL_HANDLER -/** -* This function serves as the signal handler function for the SIGSEGV Signal -* -* @return nothing -* @param[in] signal_no Signal Number -* @param[in] signal_info Information associated with the generated signal -* @param[in] signal_context Signal Context Info -*/ -static void __vcui_exit_handler(void) -{ - printf("\n __vcui_app_exit_handler\n"); - /*syslog (LOG_INFO, "[VOICE-CALL] __vcui_app_exit_handler\n");*/ -} - -/** -* This function serves as the signal handler function for the SIGSEGV Signal -* -* @return nothing -* @param[in] signal_no Signal Number -* @param[in] signal_info Information associated with the generated signal -* @param[in] signal_context Signal Context Info -*/ -static void __vcui_sigsegv_handler(int signal_no) -{ - int i=0; - - CALL_UI_DEBUG("SISEGV Received, Signal Number: :%d \n", signal_no); - - vcall_engine_force_reset(); - __vcui_fade_out_cb_routine(); - - for (i=0; i < VCUI_SIG_NUM; i++) - { - sigaction(vcui_app_sig_to_handle[i], &(vcui_app_sigoldact[i]), NULL); - } - - raise(signal_no); /*raise signal intentionally (pass the same signal)*/ -} - -/** -* This function registers a user space signal handler for the signal SIGSEGV (Signal #11) -* -* @return nothing -*/ -static void __vcui_register_sigsegv_handler() -{ - CALL_UI_DEBUG(".."); - - int i =0; - vcui_app_sigact.sa_flags = SA_NOCLDSTOP; - vcui_app_sigact.sa_handler = (void *)__vcui_sigsegv_handler; - sigemptyset(&vcui_app_sigact.sa_mask); - - - for (;i < VCUI_SIG_NUM; i++) - { - sigaction (vcui_app_sig_to_handle[i], &vcui_app_sigact, &(vcui_app_sigoldact[i])); - } - -} -#endif - -static int __vcui_launch_ciss(const char *number) -{ - bundle *kb; - - CALL_UI_DEBUG("number(%s)"); - kb = bundle_create(); - bundle_add(kb, "CISS_LAUNCHING_MODE", CISS_MODE_OPT); - bundle_add(kb, "CISS_REQ_STRING", number); - aul_launch_app(CISS_AUL_CMD, kb); - bundle_free(kb); - return VC_NO_ERROR; -} - -static int __vcui_app_create(void *data) -{ - CALL_UI_DEBUG("__vcui_app_create().."); - CALL_UI_KPI("__vcui_app_create start"); - vcui_app_call_data_t *ad = data; - - elm_theme_extension_add(NULL, CALL_THEME); - - CALL_UI_KPI("_vcui_app_win_create_main start"); - ad->win_main = (Evas_Object *)_vcui_app_win_create_main(ad, PACKAGE); - CALL_UI_KPI("_vcui_app_win_create_main done"); - if (ad->win_main == NULL) { - CALL_UI_DEBUG("ERROR"); - return VC_ERROR; - } - - UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE); - - __vcui_hide_main_ui_set_flag(); - - ad->evas = evas_object_evas_get(ad->win_main); - ad->scale_factor = elm_config_scale_get(); - - __vcui_cache_flush_set(ad->evas); - - ecore_init(); - ecore_x_init(NULL); - _vcui_app_win_key_grab(ad); - - _vcui_view_common_timer_text_init(); - - _vcui_app_win_set_noti_type(EINA_TRUE); - - /* add system event callback */ - appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, __vcui_lang_changed_cb, ad); - appcore_set_event_callback(APPCORE_EVENT_LOW_MEMORY, __vcui_low_mem_cb, NULL); - appcore_set_event_callback(APPCORE_EVENT_LOW_BATTERY, __vcui_low_bat_cb, NULL); - -#ifdef SIGNAL_HANDLER - __vcui_register_sigsegv_handler(); - atexit(__vcui_exit_handler); -#endif - - CALL_UI_KPI("__vcui_app_create done"); - return VC_NO_ERROR; -} - -static int __vcui_app_pause(void *data) -{ - CALL_UI_DEBUG("__vcui_app_pause().."); - - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; - return VC_NO_ERROR; -} - -static int __vcui_app_reset(bundle *kb, void *data) -{ - CALL_UI_DEBUG("__vcui_app_reset().."); - CALL_UI_KPI("__vcui_app_reset start"); - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; - - const char *launch_type = NULL; - const char *mime_type = NULL; - const char *tmp = NULL; - const char *uri_bundle = NULL; - char *telnum = NULL; - -#ifdef _RESET_OPEN_APP_ - { - launch_type = bundle_get_val(kb, "__AUL_CMD__"); - if (launch_type != NULL) { - CALL_UI_DEBUG("launch type: [%s]", launch_type); - if (!strncmp(launch_type, "OPEN_APP", 8)) { - elm_win_raise(ad->win_main); - return; - } - } - } -#endif - - /* mime content based AUL */ - mime_type = bundle_get_val(kb, AUL_K_MIME_TYPE); - if (mime_type != NULL) { - CALL_UI_DEBUG("mime_type: [%s]", mime_type); - if (strncmp(mime_type, "phonenum.uri",12) == 0 || strncmp(mime_type, "tel.uri",7) == 0) { - tmp = bundle_get_val(kb, AUL_K_MIME_CONTENT); - if (tmp == NULL) { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - - if (strncmp(tmp, "tel:", 4) == 0) { - telnum = (char *)tmp + 4; - } - - CALL_UI_DEBUG("number: [%s]", telnum); - - vcui_call_type_t call_type; - vcui_call_mo_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_MO; - - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", telnum); - - _vcui_engine_interface_process_mo_call(call_type, &call_data); - - return VC_NO_ERROR; - } else { - CALL_UI_DEBUG("wrong mime type!!"); - elm_exit(); - return VC_NO_ERROR; - } - } - - uri_bundle = (const char *)appsvc_get_uri(kb); - if (uri_bundle != NULL) { - CALL_UI_DEBUG("tmp: [%s]", uri_bundle); - if (strncmp(uri_bundle, "tel:", 4) == 0) { - telnum = (char *)uri_bundle + 4; - CALL_UI_DEBUG("number: [%s]", telnum); - - vcui_call_type_t call_type; - tmp = (char *)appsvc_get_data(kb, "calltype"); - - if (tmp) { - CALL_UI_DEBUG("calltype: [%s]", tmp); - if (!strncmp(tmp, "EMERGENCY", 9)) { - vcui_call_ecc_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_ECC; - - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", telnum); - - _vcui_engine_interface_process_ecc_call(call_type, &call_data); - } else { - CALL_UI_DEBUG("wrong calltype!"); - elm_exit(); - return VC_ERROR; - } - } else { - vcui_call_mo_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", telnum); - - call_type = VCUI_CALL_TYPE_MO; - - tmp = (char *)appsvc_get_data(kb, "ctindex"); - if (tmp) { - CALL_UI_DEBUG("ctindex: [%s]", tmp); - call_data.ct_index = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - call_data.ct_index = -1; - } - - if ((_vc_core_util_check_incall_ss_string(call_data.call_number) == EINA_TRUE) && (_vcui_doc_get_count() >= 1)) { - vcall_engine_process_incall_ss(call_data.call_number); - _vcui_view_auto_change(); - } else if (_vc_core_util_check_ss_string(call_data.call_number) == EINA_TRUE) { - __vcui_launch_ciss(call_data.call_number); - if (_vcui_doc_get_count() == 0) - elm_exit(); - return VC_NO_ERROR; - } else { - _vcui_engine_interface_process_mo_call(call_type, &call_data); - } - } - - return VC_NO_ERROR; - } else { - CALL_UI_DEBUG("wrong type!"); - elm_exit(); - return VC_NO_ERROR; - } - } - - /* AUL */ - launch_type = bundle_get_val(kb, "launch-type"); - if (launch_type != NULL) { - CALL_UI_DEBUG("launch type: [%s]", launch_type); - if (!strncmp(launch_type, "MO", 2)) { - - if (g_avoid_multi_setup == EINA_TRUE) { - CALL_UI_DEBUG("Avoid multi touch setup"); - return VC_NO_ERROR; - } - - ecore_timer_add(3.5, __vcui_avoid_multi_setup_timer_cb, ad); - g_avoid_multi_setup = EINA_TRUE; - - vcui_call_type_t call_type; - vcui_call_mo_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_MO; - - tmp = bundle_get_val(kb, "number"); - if (tmp) { - CALL_UI_DEBUG("number: [%s]", tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tmp); - - tmp = bundle_get_val(kb, "ctindex"); - if (tmp) { - CALL_UI_DEBUG("ctindex: [%s]", tmp); - call_data.ct_index = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - call_data.ct_index = -1; - } - - if ((_vc_core_util_check_incall_ss_string(call_data.call_number) == EINA_TRUE) && (_vcui_doc_get_count() >= 1)) { - vcall_engine_process_incall_ss(call_data.call_number); - _vcui_view_auto_change(); - } else if (_vc_core_util_check_ss_string(call_data.call_number) == EINA_TRUE) { - __vcui_launch_ciss(call_data.call_number); - if(_vcui_doc_get_count() == 0) - elm_exit(); - return VC_NO_ERROR; - } else { - _vcui_engine_interface_process_mo_call(call_type, &call_data); - } - } else if (!strncmp(launch_type, "MT", 2)) { - - vcui_call_type_t call_type; - vcui_call_mt_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_MT; - - tmp = bundle_get_val(kb, "handle"); - if (tmp) { - CALL_UI_DEBUG("handle: [%s]", tmp); - call_data.call_handle = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - - tmp = bundle_get_val(kb, "calltype"); - if (tmp) { - CALL_UI_DEBUG("calltype: [%s]", tmp); - call_data.call_type = atoi(tmp); - } else { - CALL_UI_DEBUG("calltype is NULL but NOT mendatory"); - call_data.call_type = 0; - } - - tmp = bundle_get_val(kb, "cliindicator"); - if (tmp) { - CALL_UI_DEBUG("cliindicator: [%s]", tmp); - call_data.cli_presentation_indicator = atoi(tmp); - } else { - CALL_UI_DEBUG("cliindicator is NULL but NOT mendatory"); - call_data.cli_presentation_indicator = 0; - } - - tmp = bundle_get_val(kb, "number"); - if (tmp) { - CALL_UI_DEBUG("number: [%s]", tmp); - vcall_engine_util_strcpy(call_data.call_num, VC_PHONE_NUMBER_LENGTH_MAX, tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - /*return VC_NO_ERROR;*/ /*check clir mt call.*/ - } - - tmp = bundle_get_val(kb, "name_mode"); - if (tmp) { - CALL_UI_DEBUG("name_mode: [%s]", tmp); - call_data.calling_name_mode= atoi(tmp); - } else { - CALL_UI_DEBUG("name_mode is NULL but NOT mendatory"); - call_data.calling_name_mode = -1; - } - - tmp = bundle_get_val(kb, "name"); - if (tmp) { - CALL_UI_DEBUG("name: [%s]", tmp); - vcall_engine_util_strcpy(call_data.calling_name, VC_PHONE_NAME_LENGTH_MAX, tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL but NOT mendatory"); - } - - tmp = bundle_get_val(kb, "rdnumber"); - if (tmp) { - CALL_UI_DEBUG("rdnumber: [%s]", tmp); - vcall_engine_util_strcpy(call_data.redirected_number, VC_PHONE_NUMBER_LENGTH_MAX, tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL but NOT mendatory"); - } - - tmp = bundle_get_val(kb, "rdsubaddress"); - if (tmp) { - CALL_UI_DEBUG("rdnumber: [%s]", tmp); - vcall_engine_util_strcpy(call_data.redirected_sub_address, VC_PHONE_SUBADDRESS_LENGTH_MAX, tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL but NOT mendatory"); - } - - tmp = bundle_get_val(kb, "clicause"); - if (tmp) { - CALL_UI_DEBUG("clicause: [%s]", tmp); - call_data.cli_cause = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - - tmp = bundle_get_val(kb, "fwded"); - if (tmp) { - CALL_UI_DEBUG("fwded: [%s]", tmp); - call_data.bfwded = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - - tmp = bundle_get_val(kb, "activeline"); - if (tmp) { - CALL_UI_DEBUG("activeline: [%s]", tmp); - call_data.active_line = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - _vcui_engine_interface_process_mt_call(call_type, &call_data); - } else if (!strncmp(launch_type, "EMERGENCY", 9)) { - - vcui_call_type_t call_type; - vcui_call_ecc_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_ECC; - - tmp = bundle_get_val(kb, "number"); - if (tmp) { - CALL_UI_DEBUG("number: [%s]", tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - } - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tmp); - - _vcui_engine_interface_process_ecc_call(call_type, &call_data); - - } else if (!strncmp(launch_type, "SATSETUPCALL", 12)) { - vcui_call_type_t call_type; - vcui_call_sat_data_t sat_setup_call_info; - - memset(&sat_setup_call_info, 0, sizeof(sat_setup_call_info)); - call_type = VCUI_CALL_TYPE_SAT; - - tmp = bundle_get_val(kb, "cmd_id"); - if (tmp) { - CALL_UI_DEBUG("cmd_id: [%s]", tmp); - sat_setup_call_info.command_id = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - - tmp = bundle_get_val(kb, "cmd_qual"); - if (tmp) { - CALL_UI_DEBUG("cmd_qual: [%s]", tmp); - sat_setup_call_info.command_qualifier = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - - tmp = bundle_get_val(kb, "disp_text"); - if (tmp) { - CALL_UI_DEBUG("disp_text: [%s]", tmp); - vcall_engine_util_strcpy(sat_setup_call_info.disp_text, sizeof(sat_setup_call_info.disp_text), tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - /*elm_exit(); - return VC_NO_ERROR;*/ - } - - tmp = bundle_get_val(kb, "call_num"); - if (tmp) { - CALL_UI_DEBUG("call_num: [%s]", tmp); - vcall_engine_util_strcpy(sat_setup_call_info.call_num, sizeof(sat_setup_call_info.call_num), tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - - tmp = bundle_get_val(kb, "dur"); - if (tmp) { - CALL_UI_DEBUG("dur: [%s]", tmp); - sat_setup_call_info.duration = atoi(tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - elm_exit(); - return VC_NO_ERROR; - } - _vcui_engine_interface_process_sat_call(call_type, &sat_setup_call_info); - } else if (!strncmp(launch_type, "ECCTEST", 7)) { - - vcui_call_type_t call_type; - vcui_call_ecc_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_ECC_TEST; - - _vcui_engine_interface_process_ecc_call(call_type, &call_data); - - } else if (!strncmp(launch_type, "DOWNLOADCALL", 12)) { - vcui_call_type_t call_type; - vcui_call_mo_data_t call_data; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_DOWNLOAD_CALL; - - tmp = bundle_get_val(kb, "number"); - if (tmp) { - CALL_UI_DEBUG("number: [%s]", tmp); - } else { - CALL_UI_DEBUG("bundle val is NULL"); - } - - if(tmp != NULL) { - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tmp); - } else { - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", "116"); - } - - vcall_engine_util_strcpy(call_data.call_number, sizeof(call_data.call_number), tmp); - - _vcui_engine_interface_process_mo_call(call_type, &call_data); - } else { /*if ear jack is needed, add it*/ - CALL_UI_DEBUG("unknown launch type"); - } - CALL_UI_KPI("__vcui_app_reset done"); - return VC_NO_ERROR; - } - - CALL_UI_DEBUG("bundle data is wrong!!"); - elm_exit(); - return VC_NO_ERROR; -} - -static int __vcui_app_resume(void *data) -{ - CALL_UI_DEBUG("__vcui_app_resume().."); - - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) data; - return VC_NO_ERROR; -} - -static int __vcui_app_terminate(void *data) -{ - CALL_UI_DEBUG("__vcui_app_terminate().."); - - if (_vcui_doc_get_count() >= 1) { - CALL_UI_DEBUG("WARNING!! call exists. abnormal terminate!!"); - _vcui_engine_end_all_call(); - vcall_engine_set_to_default(); - } - __vcui_fade_out_cb_routine(); - return VC_NO_ERROR; -} - -static void __vcui_cache_flush_set(Evas *e) -{ -#ifdef _CACHE_FLUSH_ - evas_image_cache_set(e, 4096 * 1024); - evas_font_cache_set(e, 512 * 1024); - - edje_file_cache_set(0); - edje_collection_cache_set(0); -#endif -} - -static void __vcui_init_view_register_function(vcui_app_call_data_t *app_data, vcui_app_call_view_id_t view_id, voice_call_view_data_t *(*view_new) ()) -{ - app_data->func_new[view_id] = view_new; -} - -void _vcui_response_volume(int vol_alert_type, int vol_level) -{ - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - if (vol_alert_type == VCUI_VOL_VOICE) { - ad->voice_vol_val = vol_level; - _vcui_set_volume(ad->vol_key_status); - } else if (vol_alert_type == VCUI_VOL_HEADSET) { - ad->bt_vol_val = vol_level; - _vcui_set_volume(ad->vol_key_status); - } else { - CALL_UI_DEBUG("ERROR"); - } -} - -void _vcui_set_volume(int key_status) -{ - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - if (_vcui_doc_get_count() == 0) { - CALL_UI_DEBUG("ignore it"); - return; - } - - if ((ad->view_st[ad->view_top]->type == VIEW_INCOMING_VIEW || ad->view_st[ad->view_top]->type == VIEW_INCOMING_LOCK_VIEW)) { - int err_code = 0; - int settings_sound_status = EINA_FALSE; - - err_code = vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &settings_sound_status); - if (settings_sound_status == EINA_FALSE) { - CALL_UI_DEBUG("ringtone vol is ignored in sound off status."); - return; - } - - if (ad->bmute_ringtone == EINA_TRUE) { - CALL_UI_DEBUG("during mute ringtone, vol will not changed"); - return; - } - - if (ad->ringtone_val < RINGTONE_MIN) { - int vol_level = _vcui_engine_get_volume_level(VCUI_VOL_RING); - if ((vol_level < RINGTONE_MIN) || (vol_level > RINGTONE_MAX)) { - CALL_UI_DEBUG("ERROR : ringtone vol:[%d]", vol_level); - return; - } - ad->ringtone_val = vol_level; - } - - CALL_UI_DEBUG("RINGTONE : Set Volume"); - if (key_status == VAL_VOL_DOWN && ad->ringtone_val > RINGTONE_MIN) { - ad->ringtone_val--; - _vcui_engine_set_volume_level(VCUI_VOL_RING, ad->ringtone_val); - } else if (key_status == VAL_VOL_UP && ad->ringtone_val < RINGTONE_MAX) { - ad->ringtone_val++; - _vcui_engine_set_volume_level(VCUI_VOL_RING, ad->ringtone_val); - } - _vcui_view_popup_vol_ringtone(ad->ringtone_val); - } else if (ad->headset_status == EINA_TRUE) { - if (ad->bt_vol_val < BT_VOL_MIN) { - CALL_UI_DEBUG("BT VOL : Get Volume"); - ad->vol_key_status = key_status; - _vcui_engine_get_volume_level(VCUI_VOL_HEADSET); - return; - } - - CALL_UI_DEBUG("BT VOL : Set Volume"); - if (key_status == VAL_VOL_DOWN && ad->bt_vol_val > BT_VOL_MIN) { /*Key Down*/ - ad->bt_vol_val--; - _vcui_engine_set_volume_level(VCUI_VOL_HEADSET, ad->bt_vol_val); - } else if (key_status == VAL_VOL_UP && ad->bt_vol_val < BT_VOL_MAX) { /*Key Up*/ - ad->bt_vol_val++; - _vcui_engine_set_volume_level(VCUI_VOL_HEADSET, ad->bt_vol_val); - } - _vcui_view_popup_vol_bt(ad->bt_vol_val); - } else { - CALL_UI_DEBUG("TAPI VOL : Get Volume"); - ad->vol_key_status = key_status; - ad->voice_vol_val = _vcui_engine_get_volume_level(VCUI_VOL_VOICE); - - CALL_UI_DEBUG("TAPI VOL : Set Volume"); - if (key_status == VAL_VOL_DOWN && ad->voice_vol_val > VOICE_VOL_MIN) { /*Key Down*/ - ad->voice_vol_val--; - _vcui_engine_set_volume_level(VCUI_VOL_VOICE, ad->voice_vol_val); - } else if (key_status == VAL_VOL_UP && ad->voice_vol_val < VOICE_VOL_MAX) { /*Key Up*/ - ad->voice_vol_val++; - _vcui_engine_set_volume_level(VCUI_VOL_VOICE, ad->voice_vol_val); - } - _vcui_view_popup_vol_voice(ad->voice_vol_val); - } - -} - -static void __vcui_fade_out_cb_routine() -{ - CALL_UI_DEBUG(".."); - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - if (ad->child_is == 1) { - /*system("killall dialer");*/ - } - if (ad->disp && ad->win) { - utilx_ungrab_key(ad->disp, ad->win, KEY_VOLUMEUP); - utilx_ungrab_key(ad->disp, ad->win, KEY_VOLUMEDOWN); - } - _vcui_doc_remove_all_data(); - _voicecall_dvc_proximity_sensor_deinit(); - _voicecall_dvc_control_lcd_state(VC_LCD_ON_UNLOCK); - _vcui_view_common_timer_destroy(); -} - -static int __vcui_lang_changed_cb(void *data) -{ - CALL_UI_DEBUG(".."); - - _vcui_view_auto_change(); - - return VC_NO_ERROR; -} - -static int __vcui_low_mem_cb(void *data) -{ - CALL_UI_DEBUG(".."); - - return VC_NO_ERROR; -} - -static int __vcui_low_bat_cb(void *data) -{ - CALL_UI_DEBUG(".."); - - return VC_NO_ERROR; -} - -static void __vcui_init(vcui_app_call_data_t *ad) -{ - CALL_UI_KPI("g_type_init start"); - g_type_init(); - CALL_UI_KPI("g_type_init done"); - _vcui_doc_recent_init(); - _vcui_doc_caller_list_init(); - _vcui_view_common_init(); - _vcui_engine_init(ad); - - CALL_UI_KPI("__vcui_init_view_register_function for all views start"); - __vcui_init_view_register_function(ad, VIEW_DIALLING_VIEW, _vcui_view_dialing_new); - __vcui_init_view_register_function(ad, VIEW_INCOMING_VIEW, _vcui_view_incoming_new); - __vcui_init_view_register_function(ad, VIEW_INCOMING_LOCK_VIEW, _vcui_view_incoming_lock_new); - __vcui_init_view_register_function(ad, VIEW_INCALL_ONECALL_VIEW, _vc_ui_view_single_call_new); - __vcui_init_view_register_function(ad, VIEW_INCALL_MULTICALL_SPLIT_VIEW, _vcui_view_multi_call_split_new); - __vcui_init_view_register_function(ad, VIEW_INCALL_MULTICALL_CONF_VIEW, _vcui_view_multi_call_conf_new); - __vcui_init_view_register_function(ad, VIEW_INCALL_MULTICALL_LIST_VIEW, _vcui_view_multi_call_list_new); - __vcui_init_view_register_function(ad, VIEW_INCALL_KEYPAD_VIEW, _vcui_view_keypad_new); - __vcui_init_view_register_function(ad, VIEW_ENDCALL_VIEW, _vcui_view_callend_new); - CALL_UI_KPI("__vcui_init_view_register_function for all views done"); - - ad->view_top = -1; - ad->view_before_top = -1; - ad->view_before_reject_view = -1; - ad->headset_status = (int)_vcui_is_headset_conected(); - ad->speaker_status = EINA_FALSE; - ad->mute_status = EINA_FALSE; - ad->child_is = -1; - ad->show_flag = WIN_HIDE; - ad->brecord_voice = 0; - ad->ringtone_val = -1; - ad->voice_vol_val = -1; - ad->bt_vol_val = -1; - ad->call_end_type = CALL_END_TYPE_NONE; -} - -char *_vcui_get_endcause_string(int end_cause, char *data) -{ - char *string_id = NULL; - CALL_UI_DEBUG("end type : %d", end_cause); - switch (end_cause) { - case VC_ENGINE_ENDCAUSE_USER_UNAVAILABLE: - string_id = _("IDS_CALL_BODY_CALLED_PARTY_UNAVAILABLE"); - break; - case VC_ENGINE_ENDCAUSE_UNASSIGNED_NUMBER: - string_id = _("IDS_CALL_BODY_NUMBER_DOES_NOT_EXIST"); - break; - case VC_ENGINE_ENDCAUSE_USER_DOESNOT_RESPOND: - string_id = _("IDS_CALL_BODY_NO_ANSWER"); - break; - case VC_ENGINE_ENDCAUSE_CALL_DISCONNECTED: - string_id = _("IDS_CALL_BODY_DISCONNECTED"); - break; - case VC_ENGINE_ENDCAUSE_CALL_ENDED: - string_id = _("IDS_CALL_BODY_CALLENDED"); - break; - case VC_ENGINE_ENDCAUSE_CALL_SERVICE_NOT_ALLOWED: - string_id = _("IDS_CALL_POP_SERVICE_NOT_ALLOWED"); - break; - case VC_ENGINE_ENDCAUSE_CALL_BARRED: - string_id = _("IDS_CALL_POP_CALL_BARRED"); - break; - case VC_ENGINE_ENDCAUSE_NO_SERVICE: - string_id = _("IDS_CALL_POP_NOSERVICE"); - break; - case VC_ENGINE_ENDCAUSE_NW_BUSY: - string_id = _("IDS_CALL_POP_NETWORKBUSY"); - break; - case VC_ENGINE_ENDCAUSE_NW_FAILED: - string_id = _("IDS_CALL_POP_NETWORK_UNAVAILABLE"); - break; - case VC_ENGINE_ENDCAUSE_SERVICE_TEMP_UNAVAILABLE: - string_id = _("IDS_CALL_BODY_SERVICE_UNAVAILABLE"); - break; - case VC_ENGINE_ENDCAUSE_NO_ANSWER: - string_id = _("IDS_CALL_BODY_NO_ANSWER"); - break; - case VC_ENGINE_ENDCAUSE_NO_CREDIT: - string_id = _("IDS_CALL_POP_NOCREDITLEFT"); - break; - case VC_ENGINE_ENDCAUSE_REJECTED: - string_id = _("IDS_CALL_BODY_CALL_REJECTED"); - break; - case VC_ENGINE_ENDCAUSE_USER_BUSY: - string_id = _("IDS_CALL_POP_USER_BUSY"); - break; - case VC_ENGINE_ENDCAUSE_WRONG_GROUP: - string_id = _("IDS_CALL_POP_WRONG_GROUP"); - break; - case VC_ENGINE_ENDCAUSE_INVALID_NUMBER_FORMAT: - string_id = _("IDS_CALL_POP_CAUSE_WRONG_NUMBER"); - break; - case VC_ENGINE_ENDCAUSE_CALL_NOT_ALLOWED: - string_id = _("IDS_CALL_POP_CALLNOTCALLOWED"); - break; - case VC_ENGINE_ENDCAUSE_TAPI_ERROR: - string_id = _("IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"); - break; - case VC_ENGINE_ENDCAUSE_CALL_FAILED: - string_id = _("IDS_CALL_POP_CALLFAILED"); - break; - case VC_ENGINE_ENDCAUSE_NUMBER_CHANGED: - string_id = _("IDS_CALL_BODY_NUMBER_CHANGED"); - break; - case VC_ENGINE_ENDCAUSE_IMEI_REJECTED: - string_id = _("IDS_CALL_POP_VERIFY_SIM_OR_INSERT_VALID_SIM"); - break; - case VC_ENGINE_ENDCAUSE_NO_USER_RESPONDING: /**< User not responding */ - case VC_ENGINE_ENDCAUSE_USER_ALERTING_NO_ANSWER: /**< User Alerting No Answer */ - default: - string_id = _("IDS_CALL_BODY_CALLENDED"); - break; - } - vcall_engine_util_strcpy(data, VC_DATA_LENGTH_MAX, string_id); - return data; -} - -void _vcui_cache_flush() -{ -#ifdef _CACHE_FLUSH_ - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - evas_font_cache_flush(ad->evas); - evas_image_cache_flush(ad->evas); - - edje_file_cache_flush(); - edje_collection_cache_flush(); - - evas_render_idle_flush(ad->evas); -#endif -} - -int _vcui_is_idle_lock() -{ - int lock_state; - int ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &(lock_state)); - if (ret == -1) { - CALL_UI_DEBUG("Cannot get vconf key"); - } - - if (lock_state == VCONFKEY_IDLE_LOCK) - return CALL_LOCK; - else - return CALL_UNLOCK; -} - -unsigned long _vcui_get_diff_now(time_t start_time) -{ - time_t curr_time; - unsigned long call_duration_in_sec = 0; - curr_time = time(&curr_time); - call_duration_in_sec = curr_time - start_time; - return call_duration_in_sec; -} - -gboolean _vcui_is_gcf_mode(void) -{ - gboolean bgcf_status = EINA_FALSE; - int ret = -1; - - ret = vconf_get_int(VCONFKEY_ADMIN_GCF_TEST, &bgcf_status); - if (0 == ret) { - CALL_UI_DEBUG("bgcf_status = [%d]\n", bgcf_status); - } else { - CALL_UI_DEBUG("vconf_get_int failed..[%d]\n", ret); - } - - return bgcf_status; -} - -gboolean _vcui_is_headset_conected(void) -{ - int bt_connected = VCONFKEY_BT_DEVICE_NONE; - Eina_Bool ret = EINA_FALSE; - - ret = vconf_get_int(VCONFKEY_BT_DEVICE, &bt_connected); - if (0 == ret) { - CALL_UI_DEBUG("bt_connected = [0x%x] ", bt_connected); - } else { - CALL_UI_DEBUG("vconf_get_int failed..[%d]", ret); - } - - return (VCONFKEY_BT_DEVICE_HEADSET_CONNECTED == (bt_connected & VCONFKEY_BT_DEVICE_HEADSET_CONNECTED)) ? EINA_TRUE : EINA_FALSE; -} - -gboolean _vcui_is_headset_switch_on(void) -{ - int bt_status = VCONFKEY_BT_STATUS_OFF; - Eina_Bool ret = EINA_FALSE; - - ret = vconf_get_int(VCONFKEY_BT_STATUS, &bt_status); - if (0 == ret) { - CALL_UI_DEBUG("bt_status = [0x%x] ", bt_status); - } else { - CALL_UI_DEBUG("vconf_get_int failed..[%d]", ret); - } - - return (VCONFKEY_BT_STATUS_ON == (bt_status & VCONFKEY_BT_STATUS_ON)) ? EINA_TRUE : EINA_FALSE; -} - -gboolean _vcui_is_answering_mode_on(void) -{ - gboolean bAnswerMode = EINA_FALSE; - Eina_Bool ret = EINA_FALSE; - - ret = vconf_get_bool(VCONFKEY_CISSAPPL_ANSWERING_KEY_BOOL, &bAnswerMode); - if (0 == ret) { - CALL_UI_DEBUG("bAnswerMode = [%d] \n", bAnswerMode); - } else { - CALL_UI_DEBUG("vconf_get_int failed..[%d]\n", ret); - } - - return bAnswerMode; -} - -gboolean _vcui_is_powerkey_mode_on(void) -{ - gboolean bPowerkeyMode = EINA_FALSE; - Eina_Bool ret = EINA_FALSE; - - ret = vconf_get_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, &bPowerkeyMode); - if (0 == ret) { - CALL_UI_DEBUG("bPowerkeyMode = [%d] \n", bPowerkeyMode); - } else { - CALL_UI_DEBUG("vconf_get_int failed..[%d]\n", ret); - } - - return bPowerkeyMode; -} - -gboolean _vcui_is_phonelock_status() -{ - gboolean b_phonelock = EINA_FALSE; - if (!vconf_get_bool(VCONFKEY_SETAPPL_STATE_POWER_ON_LOCK_BOOL, &b_phonelock)) { - CALL_UI_DEBUG("b_phonelock:[%d]", b_phonelock); - return b_phonelock; - } else { - CALL_UI_DEBUG("get VCONFKEY_SETAPPL_STATE_POWER_ON_LOCK_BOOL failed.."); - return EINA_FALSE; - } -} - -void _vcui_add_calllog(int type, call_data_t *data, int boutgoing_end) -{ - CALL_UI_DEBUG("type = [0x%x] ", type); - CTSvalue *plog; - time_t current_time; - - if (data == NULL) - return; - contacts_svc_connect(); - - current_time = time(NULL); - - plog = contacts_svc_value_new(CTS_VALUE_PHONELOG); - contacts_svc_value_set_str(plog, CTS_PLOG_VAL_NUMBER_STR, data->call_num); - contacts_svc_value_set_int(plog, CTS_PLOG_VAL_LOG_TIME_INT, (int)current_time); - contacts_svc_value_set_int(plog, CTS_PLOG_VAL_LOG_TYPE_INT, type); - contacts_svc_value_set_int(plog, CTS_PLOG_VAL_RELATED_ID_INT, data->contact_id); - - if ((type == CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN) || (type == CTS_PLOG_TYPE_VOICE_REJECT) || - (type == CTS_PLOG_TYPE_VOICE_BLOCKED) || (boutgoing_end == EINA_TRUE)) { - contacts_svc_value_set_int(plog, CTS_PLOG_VAL_DURATION_INT, 0); - } else { - contacts_svc_value_set_int(plog, CTS_PLOG_VAL_DURATION_INT, _vcui_get_diff_now(data->start_time)); - } - contacts_svc_insert_phonelog(plog); - - contacts_svc_value_free(plog); - contacts_svc_disconnect(); - - /* vconf set & quickpanel noti (for missed call) */ - if (type == CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN) { - char szname[255] = { 0, }; - int ret; - notification_h noti = NULL; - notification_error_e noti_err = NOTIFICATION_ERROR_NONE; - - if (strlen((char *)data->call_display) == 0) { - snprintf(szname, sizeof(szname), "%s", data->call_num); - } else { - snprintf(szname, sizeof(szname), "%s", data->call_display); - } - CALL_UI_DEBUG("szname:[%s]", szname); - - noti = notification_new(NOTIFICATION_TYPE_NOTI, __VCUI_NOTIFICATION_CALL_GROUP_ID, NOTIFICATION_PRIV_ID_NONE); - if(noti == NULL) { - CALL_UI_DEBUG("Fail to notification_new\n"); - return; - } - - noti_err = notification_set_application(noti, DIALER_PKG); - if(noti_err != NOTIFICATION_ERROR_NONE) { - CALL_UI_DEBUG("Fail to notification_set_application : %d\n", noti_err); - } - - bundle *args = bundle_create(); - - bundle_add(args, "logs", "missed_call"); - noti_err = notification_set_args(noti, args, NULL); - if(noti_err != NOTIFICATION_ERROR_NONE) { - CALL_UI_DEBUG("Fail to notification_set_args : %d\n", noti_err); - } - bundle_free(args); - - noti_err = notification_set_time(noti, current_time); - if(noti_err != NOTIFICATION_ERROR_NONE) { - CALL_UI_DEBUG("Fail to notification_set_icon : %d\n", noti_err); - } - - noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, szname, szname, NOTIFICATION_VARIABLE_TYPE_NONE); - if(noti_err != NOTIFICATION_ERROR_NONE) { - CALL_UI_DEBUG("Fail to notification_set_title : %d\n", noti_err); - } - - CALL_UI_DEBUG("data->call_file_path(%s)",data->call_file_path); - if (strlen(data->call_file_path) > 0) { - noti_err = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL, data->call_file_path); - if(noti_err != NOTIFICATION_ERROR_NONE) { - CALL_UI_DEBUG("Fail to notification_set_title : %d\n", noti_err); - } - } - - noti_err = notification_insert(noti, NULL); - if(noti_err != NOTIFICATION_ERROR_NONE) { - CALL_UI_DEBUG("Fail to notification_set_text_domain\n"); - } - - noti_err = notification_free(noti); - if(noti_err != NOTIFICATION_ERROR_NONE) { - CALL_UI_DEBUG("Fail to notification_set_text_domain\n"); - } - } -} - -void _vcui_raise_main_win() -{ - CALL_UI_DEBUG(".."); - - vcui_app_call_data_t *ad = _vcui_get_app_data(); - if (ad == NULL) { - CALL_UI_DEBUG("App data is NULL"); - return; - } - if (ad->win_main == NULL) { - CALL_UI_DEBUG("Main Window is NULL"); - return; - } - - elm_win_activate(ad->win_main); - _vcui_show_main_ui_set_flag(); - /*view_refresh_now();*/ - -} - -int _vcui_check_valid_eo(Evas_Object *eo, char *v_name) -{ - /*CALL_UI_DEBUG("eo addr:[%p], v_name:[%s]", eo, v_name);*/ - const char *obj_name = evas_object_name_get(eo); - if (obj_name == NULL) { - CALL_UI_DEBUG("obj_name is NULL!!. eo addr:[%p], v_name:[%s]", eo, v_name); - return VC_ERROR; - } - if (strncmp(obj_name, v_name, strlen(obj_name)) == 0) { - return VC_NO_ERROR; - } else { - CALL_UI_DEBUG("different name !! "); - return VC_ERROR; - } -} - -vcui_app_call_data_t *_vcui_get_app_data() -{ - return &global_ad; -} - -void _vcui_show_main_ui_set_flag() -{ - vcui_app_call_data_t *ad = _vcui_get_app_data(); - if (ad->show_flag == WIN_HIDE) { - CALL_UI_DEBUG("show_flag : WIN_SHOW"); - evas_object_show(ad->win_main); - ad->show_flag = WIN_SHOW; - } -} - -void __vcui_hide_main_ui_set_flag() -{ - vcui_app_call_data_t *ad = _vcui_get_app_data(); - CALL_UI_DEBUG("show_flag: WIN_HIDE"); - evas_object_hide(ad->win_main); - ad->show_flag = WIN_HIDE; -} - -Evas_Object *_vcui_load_edj(Evas_Object *parent, const char *file, const char *group) -{ - Evas_Object *eo; - int r; - - eo = elm_layout_add(parent); - if (eo) { - r = elm_layout_file_set(eo, file, group); - if (!r) { - evas_object_del(eo); - CALL_UI_DEBUG("ERROR!!"); - return NULL; - } - - evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - } - - return eo; -} - -int main(int argc, char *argv[]) -{ - CALL_UI_DEBUG("voice call ui main().."); - - struct appcore_ops ops = { - .create = __vcui_app_create, - .terminate = __vcui_app_terminate, - .pause = __vcui_app_pause, - .resume = __vcui_app_resume, - .reset = __vcui_app_reset, - }; - - memset(&global_ad, 0, sizeof(vcui_app_call_data_t)); - - ops.data = &global_ad; - - CALL_UI_KPI("__vcui_init start"); - __vcui_init(&global_ad); - CALL_UI_KPI("__vcui_init done"); - - appcore_set_i18n(PACKAGE, LOCALEDIR); - - return appcore_efl_main(PACKAGE, &argc, &argv, &ops); -} - -static Eina_Bool __vcui_avoid_multi_setup_timer_cb(void *data) -{ - CALL_UI_DEBUG(".."); - - g_avoid_multi_setup = EINA_FALSE; - - return ECORE_CALLBACK_CANCEL; -} - diff --git a/ui/vcui-document.c b/ui/vcui-document.c deleted file mode 100755 index b518a52..0000000 --- a/ui/vcui-document.c +++ /dev/null @@ -1,501 +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. - */ - - -#include "vcui-application.h" -#include "vcui-document.h" - -static call_data_t *recent_mo; -static call_data_t *recent_mt; -static call_data_t *recent_mt_mo; -static Eina_List *caller_list; - -void _vcui_doc_recent_init() -{ - recent_mo = NULL; - recent_mt = NULL; - recent_mt_mo = NULL; -} - -call_data_t *_vcui_doc_get_recent_mo() -{ - return recent_mo; -} - -call_data_t *_vcui_doc_get_recent_mt() -{ - return recent_mt; -} - -call_data_t *_vcui_doc_get_all_recent() -{ - CALL_UI_DEBUG(".."); - if (recent_mt_mo == NULL) { - CALL_UI_DEBUG("recent is NULL"); - if (recent_mo != NULL) { - recent_mt_mo = recent_mo; - CALL_UI_DEBUG("recent is mo"); - } else if (recent_mt != NULL) { - recent_mt_mo = recent_mt; - CALL_UI_DEBUG("recent is mt"); - } - } - return recent_mt_mo; -} - -void _vcui_doc_set_all_recent(call_data_t *in) -{ - CALL_UI_DEBUG(".."); - if (in == NULL) { - CALL_UI_DEBUG("set recent_mt_mo to null"); - } - recent_mt_mo = in; -} - -void _vcui_doc_set_mo_recent(call_data_t *in) -{ - CALL_UI_DEBUG(".."); - if (in == NULL) { - CALL_UI_DEBUG("set recent_mo to null"); - } - if (recent_mo != NULL && recent_mo->call_handle == NO_HANDLE) { - CALL_UI_DEBUG("Set_recent 1"); - free(recent_mo); - recent_mo = NULL; - } - _vcui_doc_set_all_recent(in); - recent_mo = in; -} - -void _vcui_doc_set_mt_recent(call_data_t *in) -{ - CALL_UI_DEBUG(".."); - if (in == NULL) { - CALL_UI_DEBUG("set recent_mt to null"); - } - _vcui_doc_set_all_recent(in); - recent_mt = in; -} - -void _vcui_doc_caller_list_init() -{ - caller_list = NULL; -} - -int _vcui_doc_is_call_data(call_data_t *in) -{ - if (in == NULL) - return EINA_FALSE; - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd == in) { - return EINA_TRUE; - } - } - - return EINA_FALSE; -} - -void _vcui_doc_add_call_data(call_data_t *in) -{ - if (in == NULL) - return; - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd == in) { - return; - } - } - - caller_list = eina_list_append(caller_list, (void *)in); -} - -void _vcui_doc_update_call_data(call_data_t *in) -{ - if (in == NULL) - return; - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd == in) { - *cd = *in; - return; - } - } -} - -void _vcui_doc_remove_all_data() -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - free(cd); - cd = NULL; - } - } - eina_list_free(caller_list); - caller_list = NULL; -} - -call_data_t *_vcui_doc_remove_call_data_only_list(call_data_t *in) -{ - if (in == NULL) { - CALL_UI_DEBUG("Call data is Null"); - return NULL; - } - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd == in) { - caller_list = eina_list_remove(caller_list, in); - return in; - } - } - return NULL; -} - -void _vcui_doc_remove_call_data(call_data_t *in) -{ - if (in == NULL) { - CALL_UI_DEBUG("Call data is Null"); - return; - } - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd == in) { - if (in == _vcui_doc_get_recent_mo()) - _vcui_doc_set_mo_recent(NULL); - if (in == _vcui_doc_get_recent_mt()) - _vcui_doc_set_mt_recent(NULL); - - caller_list = eina_list_remove(caller_list, in); - free(in); - in = NULL; - CALL_UI_DEBUG("Call data removed"); - break; - } - - } - - if (_vcui_doc_get_count() == 0) { - eina_list_free(caller_list); - caller_list = NULL; - } - -} - -call_data_t *_vcui_doc_get_call_handle(int handle) -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->call_handle == handle) { - return cd; - } - } - } - return NULL; -} - -call_data_t *_vcui_doc_get_first_unhold() -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_UNHOLD) { - return cd; - } - } - } - return NULL; -} - -call_data_t *_vcui_doc_get_first_hold() -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_HOLD) { - return cd; - } - } - } - return NULL; -} - -call_data_t *_vcui_doc_get_last_status(int call_status) -{ - - Eina_List *l; - call_data_t *fast_cd = NULL; - call_data_t *cd; - int i = 0; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == call_status) { - if (i == 0) { - fast_cd = cd; - i++; - continue; - } else { - if (fast_cd->start_time > cd->start_time) { - fast_cd = cd; - } - } - i++; - } - } - } - return fast_cd; -} - -call_data_t *_vcui_doc_get_last_type_mo() -{ - - Eina_List *l; - call_data_t *last_cd = NULL; - call_data_t *cd; - int i = 0; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->mo_mt_status == CALL_OUTGOING) { - if (i == 0) { - last_cd = cd; - i++; - continue; - } else { - if (last_cd->start_time < cd->start_time) { - last_cd = cd; - } - } - i++; - } - } - } - return last_cd; -} - -call_data_t *_vcui_doc_get_first() -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) - if (cd != NULL) { - return cd; - } - return NULL; -} - -void _vcui_doc_set_unhold_all() -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_HOLD) { - cd->caller_status = CALL_UNHOLD; - } - } - } -} - -void _vcui_doc_set_hold_all() -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_UNHOLD) { - cd->caller_status = CALL_HOLD; - } - } - } -} - -void _vcui_doc_set_swap_all() -{ - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_HOLD) { - cd->caller_status = CALL_UNHOLD; - } else if (cd->caller_status == CALL_UNHOLD) { - cd->caller_status = CALL_HOLD; - } - } - } -} - -int _vcui_doc_get_show_callstatus() -{ - if (_vcui_doc_get_count() > 1) { - if (_vcui_doc_get_count_hold() > 1) - return CALL_HOLD; - else - return CALL_UNHOLD; - } else - return CALL_UNHOLD; -} - -int _vcui_doc_get_count() -{ - int i = eina_list_count(caller_list); - return i; -} - -int _vcui_doc_get_count_hold() -{ - int i = 0; - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_HOLD) { - i++; - } - } - } - CALL_UI_DEBUG("(%d)",i); - return i; -} - -int _vcui_doc_get_count_unhold() -{ - int i = 0; - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_UNHOLD) { - i++; - } - } - } - CALL_UI_DEBUG("(%d)",i); - return i; -} - -int _vcui_doc_get_count_nostatus() -{ - int i = 0; - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == NO_STATUS) { - i++; - } - } - } - return i; -} - -Eina_List *_vcui_doc_get_hold_caller() -{ - if (_vcui_doc_get_count() == 0) - return NULL; - Eina_List *hold_list = NULL; - Eina_List *l; - call_data_t *cd; - - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - if (cd->caller_status == CALL_HOLD) { - hold_list = eina_list_append(hold_list, cd); - } - } - } - return hold_list; -} - -Eina_List *_vcui_doc_get_unhold_caller() -{ - if (_vcui_doc_get_count() == 0) - return NULL; - Eina_List *unhold_list = NULL; - Eina_List *l; - call_data_t *cd; - - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - CALL_UI_DEBUG("_vcui_doc_get_unhold_caller"); - if (cd->caller_status == CALL_UNHOLD) { - CALL_UI_DEBUG("find it"); - unhold_list = eina_list_append(unhold_list, cd); - } - } - } - return unhold_list; -} - -Eina_List *_vcui_doc_get_caller() -{ - if (_vcui_doc_get_count() == 0) - return NULL; - - Eina_List *list = NULL; - Eina_List *l; - call_data_t *cd; - - EINA_LIST_FOREACH(caller_list, l, cd) { - list = eina_list_append(list, cd); - } - return list; -} - -void _vcui_doc_all_print_address() -{ - vcui_app_call_data_t *ad = _vcui_get_app_data(); - CALL_UI_DEBUG("----------address----------"); - CALL_UI_DEBUG("View Data : DIALING VIEW %p", ad->view_st[VIEW_DIALLING_VIEW]); - CALL_UI_DEBUG("View Data : INCOMING VIEW %p", ad->view_st[VIEW_INCOMING_VIEW]); - CALL_UI_DEBUG("View Data : INCOMING LOCK VIEW %p", ad->view_st[VIEW_INCOMING_LOCK_VIEW]); - CALL_UI_DEBUG("View Data : INCALL ONEVIEW %p", ad->view_st[VIEW_INCALL_ONECALL_VIEW]); - CALL_UI_DEBUG("View Data : INCALL MULTIVIEW SPLIT %p", ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW]); - CALL_UI_DEBUG("View Data : INCALL MULTIVIEW CONF %p", ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW]); - CALL_UI_DEBUG("View Data : INCALL MULTIVIEW LIST %p", ad->view_st[VIEW_INCALL_MULTICALL_LIST_VIEW]); - CALL_UI_DEBUG("View Data : INCALL KEYPAD %p", ad->view_st[VIEW_INCALL_KEYPAD_VIEW]); - CALL_UI_DEBUG(" --------------------------"); - -} - -void _vcui_doc_all_print(char *msg_pos) -{ - CALL_UI_DEBUG(" --------%s------------", msg_pos); - Eina_List *l; - call_data_t *cd; - EINA_LIST_FOREACH(caller_list, l, cd) { - if (cd != NULL) { - CALL_UI_DEBUG(" call_handle %d", cd->call_handle); - CALL_UI_DEBUG(" call_num %s", cd->call_num); - CALL_UI_DEBUG(" call_display %s", cd->call_display); - CALL_UI_DEBUG(" call_file_path %s", cd->call_file_path); - CALL_UI_DEBUG(" call_full_file_path %s", cd->call_full_file_path); - CALL_UI_DEBUG(" caller_status %d", cd->caller_status); - CALL_UI_DEBUG(" call_time %d", (int)(cd->start_time)); - } - } - CALL_UI_DEBUG(" --------------------------"); -} - diff --git a/ui/vcui-document.h b/ui/vcui-document.h deleted file mode 100755 index 7d52d7d..0000000 --- a/ui/vcui-document.h +++ /dev/null @@ -1,87 +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 _VOICE_CALL_UI_VIEW_DOCUMENT -#define _VOICE_CALL_UI_VIEW_DOCUMENT - -typedef struct _call_data_t { - unsigned char call_handle; - char call_num[VC_PHONE_NUMBER_LENGTH_MAX]; - char call_display[VC_DISPLAY_NAME_LENGTH_MAX]; - char call_file_path[VC_IMAGE_PATH_LENGTH_MAX]; - char call_full_file_path[VC_IMAGE_PATH_LENGTH_MAX]; - int caller_status; - time_t start_time; - - int mo_mt_status; - - int contact_id; - int contact_phone_type; - gboolean bno_end_show; /* multi list end */ -} call_data_t; - -int _vcui_doc_get_count_hold(); -int _vcui_doc_get_count_unhold(); -int _vcui_doc_get_count_nostatus(); - -int _vcui_doc_is_call_data(call_data_t *in); -void _vcui_doc_add_call_data(call_data_t *in); -void _vcui_doc_update_call_data(call_data_t *in); -void _vcui_doc_remove_call_data(call_data_t *in); -void _vcui_doc_remove_all_data(); -call_data_t *_vcui_doc_remove_call_data_only_list(call_data_t *in); - -call_data_t *_vcui_doc_get_call_handle(int handle); - -int _vcui_doc_get_count(); - -Eina_List *_vcui_doc_get_hold_caller(); -Eina_List *_vcui_doc_get_unhold_caller(); -Eina_List *_vcui_doc_get_caller(); - -call_data_t *_vcui_doc_get_last_status(int call_status); -call_data_t *_vcui_doc_get_last_type_mo(); - -void _vcui_doc_caller_list_init(); -call_data_t *_vcui_doc_get_first(); - -call_data_t *_vcui_doc_get_first_hold(); -call_data_t *_vcui_doc_get_first_unhold(); - -void _vcui_doc_recent_init(); -call_data_t *_vcui_doc_get_recent_mo(); -call_data_t *_vcui_doc_get_recent_mt(); -call_data_t *_vcui_doc_get_all_recent(); -void _vcui_doc_set_all_recent(call_data_t *in); -void _vcui_doc_set_mo_recent(call_data_t *in); -void _vcui_doc_set_mt_recent(call_data_t *in); - -void _vcui_doc_set_unhold_all(); -void _vcui_doc_set_hold_all(); -void _vcui_doc_set_swap_all(); - -int _vcui_doc_get_show_callstatus(); - -void _vcui_doc_all_print(char *); -void _vcui_doc_all_print_address(); - -int get_status_backhide(); -int get_status_delete(); -void add_status(int in); -int get_status_all(); -#endif - diff --git a/ui/vcui-engine-interface.c b/ui/vcui-engine-interface.c deleted file mode 100755 index db246d2..0000000 --- a/ui/vcui-engine-interface.c +++ /dev/null @@ -1,1113 +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. - */ - - -#include "vcui-application.h" -#include "vcui-engine-interface.h" -#include "vcui-view-dialing.h" - -/* For Debug Information, Call Event name string constant */ -static char *gszcall_callback_msg[VC_ENGINE_MSG_MAX_TO_UI] = { - "VC_ENGINE_MSG_INCOM_TO_UI", - "VC_ENGINE_MSG_OUTGOING_TO_UI", - "VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI", - "VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI_TEST", - "VC_ENGINE_MSG_OUTGOING_ALERT_TO_UI", - "VC_ENGINE_MSG_CONNECTED_TO_UI", - "VC_ENGINE_MSG_NORMAL_END_TO_UI", - "VC_ENGINE_MSG_INCOM_END_TO_UI", - "VC_ENGINE_MSG_REJECTED_END_TO_UI", - "VC_ENGINE_MSG_OUTGOING_END_TO_UI", - "VC_ENGINE_MSG_OUTGOING_END_SIGNAL_PLAY_TO_UI", - "VC_ENGINE_MSG_OUTGOING_ABORTED_TO_UI", - "VC_ENGINE_MSG_DTMF_ACK_TO_UI", - - "VC_ENGINE_MSG_SS_HELD_TO_UI", - "VC_ENGINE_MSG_SS_RETREIVED_TO_UI", - "VC_ENGINE_MSG_SS_SWAP_TO_UI", - "VC_ENGINE_MSG_SS_SETUP_CONF_TO_UI", - "VC_ENGINE_MSG_SS_SPLIT_CONF_TO_UI", - "VC_ENGINE_MSG_SS_TRANSFERRED_TO_UI", - "VC_ENGINE_MSG_SS_CONNECT_LINE_IND_TO_UI", - - "VC_ENGINE_MSG_IND_FORWARD_TO_UI", - "VC_ENGINE_MSG_IND_ACTIVATE_TO_UI", - "VC_ENGINE_MSG_IND_HOLD_TO_UI", - "VC_ENGINE_MSG_IND_TRANSFER_TO_UI", - "VC_ENGINE_MSG_IND_SETUPCONFERENCE_TO_UI", - "VC_ENGINE_MSG_IND_BARRING_TO_UI", - "VC_ENGINE_MSG_IND_WAITING_TO_UI", - "VC_ENGINE_MSG_IND_CUGINFO_TO_UI", - "VC_ENGINE_MSG_IND_SSNOTIFY_TO_UI", - "VC_ENGINE_MSG_IND_CALLINGNAMEINFO_TO_UI", - "VC_ENGINE_MSG_IND_REDIRECT_CNF_TO_UI", - "VC_ENGINE_MSG_IND_ACTIVATECCBS_CNF_TO_UI", - "VC_ENGINE_MSG_IND_ACTIVATECCBS_USERINFO_TO_UI", - "VC_ENGINE_MSG_IND_AOC_TO_UI", - - "VC_ENGINE_MSG_ERROR_OCCURED_TO_UI", - - "VC_ENGINE_MSG_ACTION_INCOM_FORCE_TO_UI", - "VC_ENGINE_MSG_ACTION_SAT_REQUEST_TO_UI", - "VC_ENGINE_MSG_ACTION_SAT_RESPONSE_TO_UI", - "VC_ENGINE_MSG_ACTION_CALL_END_HELD_RETREIVED_TO_UI", - "VC_ENGINE_MSG_ACTION_NO_ACTIVE_TASK_TO_UI", - - "VC_ENGINE_MSG_GET_VOLUME_RESP_TO_UI", - "VC_ENGINE_MSG_SET_VOLUME_FROM_BT_TO_UI", - "VC_ENGINE_MSG_HEADSET_STATUS_TO_UI", - "VC_ENGINE_MSG_EARJACK_STATUS_TO_UI", - - "VC_ENGINE_MSG_ACCEPT_CHOICE_BOX_TO_UI", - "VC_ENGINE_MSG_MESSAGE_BOX_TO_UI", - - "VC_ENGINE_MSG_REDIAL_TO_UI", - "VC_ENGINE_MSG_STOPPED_RECORDING_TO_UI", - "VC_ENGINE_MSG_CREATE_NEWVOICEFILE_TO_UI", -}; - -static char *gszcall_error_msg[IDS_CALL_MAX] = { - "IDS_CALL_POP_CALL_IS_DIVERTED", - "IDS_CALL_POP_CALLFAILED", - "IDS_CALL_POP_CALLING_EMERG_ONLY", - "IDS_CALL_POP_CALLNOTCALLOWED", - "IDS_CALL_POP_CAUSE_WRONG_NUMBER", - "IDS_CALL_POP_CHANGEOFFLINEMODETOCALL", - "IDS_CALL_POP_DTMFSENDING_FAIL", - "IDS_CALL_POP_FDNCALLONLY", - "IDS_CALL_POP_HOLD_FAILED", - "IDS_CALL_POP_HOLD_NOT_SUPPORTED", - "IDS_CALL_POP_INCOMPLETE", - "IDS_CALL_POP_JOIN_FAILED", - "IDS_CALL_POP_JOIN_NOT_SUPPORTED", - "IDS_CALL_POP_OPERATION_REFUSED", - "IDS_CALL_POP_PHONE_NOT_INITIALISED", - "IDS_CALL_POP_REJECTED", - "IDS_CALL_POP_SENDING", - "IDS_CALL_POP_SOS_CALL_ONLY_IN_NO_SIM_MODE", - "IDS_CALL_POP_SPLIT_FAILED", - "IDS_CALL_POP_SPLIT_NOT_SUPPORTED", - "IDS_CALL_POP_SWAP_FAILED", - "IDS_CALL_POP_SWAP_NOT_SUPPORTED", - "IDS_CALL_POP_TRANSFER_FAILED", - "IDS_CALL_POP_TRANSFER_NOT_SUPPORTED", - "IDS_CALL_POP_UNABLE_TO_RETRIEVE", - "IDS_CALL_POP_UNAVAILABLE", - "IDS_CALL_POP_UNHOLD_NOT_SUPPORTED", - "IDS_CALL_POP_VOICE_CALL_IS_NOT_ALLOWED_DURING_VIDEO_CALL", - "IDS_CALL_POP_WAITING_ACTIVE", - "IDS_CALL_BODY_CALLENDED", - "Invalid DTMF", - "Sent" -}; - -void _vcui_engine_init(vcui_app_call_data_t *ad) -{ - CALL_UI_DEBUG(".."); - vcall_engine_init((vcall_engine_app_cb) _vcui_engine_callback, ad); - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_answer_call(void) -{ - int ret = VCALL_ENGINE_API_SUCCESS; - - CALL_UI_DEBUG(".."); - - ret = vcall_engine_answer_call(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_answer_call_by_type(int ans_type) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_answer_call_by_type(ans_type); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_cancel_call(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_cancel_call(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_reject_call(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_reject_call(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_set_volume_level(vcui_vol_type_t vol_type, int level) -{ - int vol = 0; - vcall_engine_vol_type_t engine_vol_type = VCALL_ENGINE_VOL_TYPE_RINGTONE; - CALL_UI_DEBUG(".."); - - if (vol_type == VCUI_VOL_RING) { - engine_vol_type = VCALL_ENGINE_VOL_TYPE_RINGTONE; - } else if (vol_type == VCUI_VOL_VOICE) { - engine_vol_type = VCALL_ENGINE_VOL_TYPE_VOICE; - } else if (vol_type == VCUI_VOL_HEADSET) { - engine_vol_type = VCALL_ENGINE_VOL_TYPE_HEADSET; - } - - vol = vcall_engine_set_volume_level(engine_vol_type, level); - CALL_UI_DEBUG("End.."); -} - -int _vcui_engine_get_volume_level(vcui_vol_type_t vol_type) -{ - int vol = 0; - vcall_engine_vol_type_t engine_vol_type = VCALL_ENGINE_VOL_TYPE_RINGTONE; - CALL_UI_DEBUG("vol_type(%d)", vol_type); - - if (vol_type == VCUI_VOL_RING) { - engine_vol_type = VCALL_ENGINE_VOL_TYPE_RINGTONE; - } else if (vol_type == VCUI_VOL_VOICE) { - engine_vol_type = VCALL_ENGINE_VOL_TYPE_VOICE; - } else if (vol_type == VCUI_VOL_HEADSET) { - engine_vol_type = VCALL_ENGINE_VOL_TYPE_HEADSET; - } - - vol = vcall_engine_get_volume_level(engine_vol_type); - CALL_UI_DEBUG("End.."); - - return vol; -} - -void _vcui_engine_change_sound_path(vcui_audio_type_t sound_path) -{ - int ret = 0; - vcall_engine_audio_type_t rqst_snd_path = VCALL_ENGINE_AUDIO_NONE; - CALL_UI_DEBUG("sound_path(%d)", sound_path); - - if (sound_path == VCUI_AUDIO_SPEAKER) { - rqst_snd_path = VCALL_ENGINE_AUDIO_SPEAKER; - } else if (sound_path == VCUI_AUDIO_HEADSET) { - rqst_snd_path = VCALL_ENGINE_AUDIO_HEADSET; - } else if (sound_path == VCUI_AUDIO_EARJACK) { - rqst_snd_path = VCALL_ENGINE_AUDIO_EARJACK; - } - - vcall_engine_change_sound_path(rqst_snd_path); - CALL_UI_DEBUG("End.."); -} - -vcui_audio_type_t _vcui_engine_get_sound_path(void) -{ - int ret = 0; - int snd_path = VCALL_ENGINE_AUDIO_NONE; - - ret = vcall_engine_get_sound_path(&snd_path); - - if (snd_path == VCALL_ENGINE_AUDIO_SPEAKER) { - return VCUI_AUDIO_SPEAKER; - } else if (snd_path == VCALL_ENGINE_AUDIO_HEADSET) { - return VCUI_AUDIO_HEADSET; - } else if (snd_path == VCALL_ENGINE_AUDIO_EARJACK) { - return VCUI_AUDIO_EARJACK; - } else if (snd_path == VCALL_ENGINE_AUDIO_RECEIVER) { - return VCUI_AUDIO_RECEIVER; - } else { - return VCALL_ENGINE_AUDIO_NONE; - } -} - -void _vcui_engine_stop_alert(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_stop_alert(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_end_call(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_release_call(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_end_call_by_handle(int handle) -{ - CALL_UI_DEBUG("handle(%d)",handle); - - vcall_engine_release_call_by_handle(handle); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_end_all_call(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_CALLS); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_end_active_calls(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_ACTIVE_CALLS); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_end_held_calls(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_release_call_by_type(VCALL_ENGINE_RELEASE_ALL_HELD_CALLS); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_hold_unhold_swap_call(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_process_hold_call(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_join_call(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_join_call(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_split_call(int call_handle) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_split_call(call_handle); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_transfer_call(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_transfer_call(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_speaker_on_off(int bLoundSpeaker) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_process_loudspeaker(bLoundSpeaker); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_mute_on_off(int bMute) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_process_voice_mute(bMute); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_interface_process_auto_redial(int bRedial) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_process_auto_redial(bRedial); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_interface_process_mute_alert(void) -{ - CALL_UI_DEBUG(".."); - - vcall_engine_mute_alert(); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_interface_send_dtmf_number(char data) -{ - CALL_UI_DEBUG(".."); - char dtmf_number[2]; - - dtmf_number[0] = data; - dtmf_number[1] = '\0'; - - vcall_engine_send_dtmf_number(dtmf_number); - - CALL_UI_DEBUG("End.."); -} - -void _vcui_engine_interface_process_mo_call(vcui_call_type_t call_type, vcui_call_mo_data_t *data) -{ - CALL_UI_DEBUG("."); - - CALL_UI_KPI("vcall_engine_process_normal_call start"); - vcui_call_mo_data_t *mocall = (vcui_call_mo_data_t *) data; - CALL_UI_DEBUG("number is : [%s] ", mocall->call_number); - - if (call_type == VCUI_CALL_TYPE_MO) - vcall_engine_process_normal_call(mocall->call_number, mocall->ct_index, EINA_FALSE); - else if (call_type == VCUI_CALL_TYPE_DOWNLOAD_CALL) - vcall_engine_process_normal_call(mocall->call_number, mocall->ct_index, EINA_TRUE); - - CALL_UI_KPI("vcall_engine_process_normal_call done"); - -} - -void _vcui_engine_interface_process_mt_call(vcui_call_type_t call_type, vcui_call_mt_data_t *data) -{ - CALL_UI_KPI("vcall_engine_process_incoming_call start"); - vcui_call_mt_data_t *mtcall = (vcui_call_mt_data_t *) data; - vcall_engine_incoming_info_t mtcall_info; - CALL_UI_DEBUG("number is : [%s] ", mtcall->call_num); - - mtcall_info.call_handle = mtcall->call_handle; - mtcall_info.call_type = mtcall->call_type; - mtcall_info.cli_presentation_indicator = mtcall->cli_presentation_indicator; - _vc_core_util_strcpy(mtcall_info.call_num, sizeof(mtcall_info.call_num), mtcall->call_num); - mtcall_info.calling_name_mode = mtcall->calling_name_mode; - _vc_core_util_strcpy(mtcall_info.calling_name, sizeof(mtcall_info.calling_name), mtcall->calling_name); - _vc_core_util_strcpy(mtcall_info.redirected_number, sizeof(mtcall_info.redirected_number), mtcall->redirected_number); - _vc_core_util_strcpy(mtcall_info.redirected_sub_address, sizeof(mtcall_info.redirected_sub_address), mtcall->redirected_sub_address); - mtcall_info.cli_cause = mtcall->cli_cause; - mtcall_info.bfwded = mtcall->bfwded; - mtcall_info.active_line = mtcall->active_line; - - vcall_engine_process_incoming_call(&mtcall_info); - CALL_UI_KPI("vcall_engine_process_incoming_call done"); -} - -void _vcui_engine_interface_process_ecc_call(vcui_call_type_t call_type, vcui_call_ecc_data_t *data) -{ - vcui_call_ecc_data_t *emercall = (vcui_call_ecc_data_t *) data; - - CALL_UI_DEBUG("number is : [%s] ", emercall->call_number); - if (call_type == VCUI_CALL_TYPE_ECC) - vcall_engine_process_emergency_call(emercall->call_number); - else if (call_type == VCUI_CALL_TYPE_ECC_TEST) - vcall_engine_process_emergency_call_test(emercall->call_number); - -} - -void _vcui_engine_interface_process_sat_call(vcui_call_type_t call_type, vcui_call_sat_data_t *data) -{ - vcui_call_sat_data_t *satcall = (vcui_call_sat_data_t *) data; - vcall_engine_sat_setup_call_info_t sat_setup_call_info; - CALL_UI_DEBUG(".."); - - memset(&sat_setup_call_info, 0, sizeof(sat_setup_call_info)); - sat_setup_call_info.command_id = satcall->command_id; - sat_setup_call_info.command_qualifier = satcall->command_qualifier; - sat_setup_call_info.duration = satcall->duration; - memcpy(sat_setup_call_info.disp_text, satcall->disp_text, sizeof(sat_setup_call_info.disp_text)); - memcpy(sat_setup_call_info.call_num, satcall->call_num, VC_PHONE_NUMBER_LENGTH_MAX); - - vcall_engine_process_sat_setup_call(&sat_setup_call_info); -} - -void _vcui_engine_callback(int event, void *pdata, void *puser_data) -{ - vcui_app_call_data_t *ad = (vcui_app_call_data_t *) puser_data; - vc_engine_msg_type *msg = (vc_engine_msg_type *)pdata; - - if ((ad == NULL) || (msg == NULL)) { - CALL_UI_DEBUG("ERROR.NULL pointer"); - return; - } - CALL_UI_DEBUG("@@@ event:[%s], view_top:[%d], count:[%d] @@@ \n", gszcall_callback_msg[event], ad->view_top, _vcui_doc_get_count()); - - switch (event) { - case VC_ENGINE_MSG_INCOM_TO_UI: - { - _voicecall_dvc_control_lcd_state(VC_LCD_ON_LOCK); - - CALL_UI_DEBUG("num:[%s], name:[%s]", msg->incoming.call_num, msg->incoming.call_name); - - call_data_t *call_data = malloc(sizeof(call_data_t)); - if (call_data == NULL) - return; - memset(call_data, 0, sizeof(call_data_t)); - - call_data->call_handle = msg->incoming.call_handle; - call_data->contact_id = msg->incoming.contact_index; - call_data->contact_phone_type = msg->incoming.phone_type; - vcall_engine_util_strcpy(call_data->call_num, sizeof(call_data->call_num), msg->incoming.call_num); - if (msg->incoming.brestricted == EINA_TRUE) { - if (msg->incoming.bpayphone == EINA_TRUE) { - vcall_engine_util_strcpy(call_data->call_display, VC_DISPLAY_NAME_LENGTH_MAX, _("Payphone")); - } else { - vcall_engine_util_strcpy(call_data->call_display, VC_DISPLAY_NAME_LENGTH_MAX, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); - } - } else { - vcall_engine_util_strcpy(call_data->call_display, VC_DISPLAY_NAME_LENGTH_MAX, msg->incoming.call_name); - } - - if (strcmp((char *)msg->incoming.call_file_path, "default") == 0) - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else if (strlen((char *)msg->incoming.call_file_path) == 0) - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, msg->incoming.call_file_path); - - if (strcmp((char *)msg->incoming.call_full_file_path, "default") == 0) - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else if (strlen((char *)msg->incoming.call_full_file_path) == 0) - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, msg->incoming.call_full_file_path); - - call_data->caller_status = NO_STATUS; - call_data->mo_mt_status = CALL_INCOMING; - - _vcui_doc_set_mt_recent(call_data); - _vcui_doc_add_call_data(call_data); - - if (_vcui_is_idle_lock() == CALL_LOCK) { - _vcui_view_change(VIEW_INCOMING_LOCK_VIEW, 0, NULL, NULL); - } else { - _vcui_view_change(VIEW_INCOMING_VIEW, 0, NULL, NULL); - } - } - break; - - case VC_ENGINE_MSG_OUTGOING_TO_UI: - { - call_data_t *call_data = malloc(sizeof(call_data_t)); - if (call_data == NULL) - return; - memset(call_data, 0, sizeof(call_data_t)); - - call_data->call_handle = NO_HANDLE; - call_data->contact_id = msg->outgoing.contact_index; - call_data->contact_phone_type = msg->outgoing.phone_type; - vcall_engine_util_strcpy(call_data->call_num, VC_PHONE_NUMBER_LENGTH_MAX, msg->outgoing.call_num); - vcall_engine_util_strcpy(call_data->call_display, VC_DISPLAY_NAME_LENGTH_MAX, msg->outgoing.call_name); - - if (strcmp((char *)msg->outgoing.call_file_path, "default") == 0) - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else if (strlen((char *)msg->outgoing.call_file_path) == 0) - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, msg->outgoing.call_file_path); - - if (strcmp((char *)msg->outgoing.call_full_file_path, "default") == 0) - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else if (strlen((char *)msg->outgoing.call_full_file_path) == 0) - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - else - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, msg->outgoing.call_full_file_path); - - call_data->caller_status = NO_STATUS; - call_data->mo_mt_status = CALL_OUTGOING; - call_data->start_time = time(&(call_data->start_time)); - - _vcui_doc_set_mo_recent(call_data); - - } - break; - - case VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI: - { - if (_voicecall_dvc_get_proximity_sensor_state() != VCALL_SENSOR_NEAR) - _voicecall_dvc_control_lcd_state(VC_LCD_ON_LOCK); - - vc_engine_outgoing_orig_type outgoing_orig = msg->outgoing_orig; - - call_data_t *call_data = _vcui_doc_get_recent_mo(); - call_data->call_handle = outgoing_orig.call_handle; - - if (outgoing_orig.bemergency == EINA_TRUE) { - CALL_UI_DEBUG("it is emergency call"); - char *em_name = _("IDS_CALL_POP_EMERGENCY_CALL"); - - memset(call_data->call_display, 0, sizeof(call_data->call_display)); - memset(call_data->call_file_path, 0, sizeof(call_data->call_file_path)); - memset(call_data->call_full_file_path, 0, sizeof(call_data->call_full_file_path)); - - vcall_engine_util_strcpy(call_data->call_display, VC_DISPLAY_NAME_LENGTH_MAX, em_name); - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - call_data->contact_phone_type = -1; - } - - _vcui_doc_add_call_data(call_data); - _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL); - } - break; - - case VC_ENGINE_MSG_OUTGOING_ORIG_TO_UI_TEST: - { - if (_voicecall_dvc_get_proximity_sensor_state() != VCALL_SENSOR_NEAR) - _voicecall_dvc_control_lcd_state(VC_LCD_ON_LOCK); - - vc_engine_outgoing_orig_type outgoing_orig = msg->outgoing_orig; - - call_data_t *call_data = _vcui_doc_get_recent_mo(); - call_data->call_handle = 1; - - if (outgoing_orig.bemergency == EINA_TRUE) { - CALL_UI_DEBUG("it is emergency call"); - char *em_name = _("IDS_CALL_POP_EMERGENCY_CALL"); - - memset(call_data->call_display, 0, sizeof(call_data->call_display)); - memset(call_data->call_file_path, 0, sizeof(call_data->call_file_path)); - memset(call_data->call_full_file_path, 0, sizeof(call_data->call_full_file_path)); - - vcall_engine_util_strcpy(call_data->call_display, VC_DISPLAY_NAME_LENGTH_MAX, em_name); - vcall_engine_util_strcpy(call_data->call_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - vcall_engine_util_strcpy(call_data->call_full_file_path, VC_IMAGE_PATH_LENGTH_MAX, NOIMG_ICON); - call_data->contact_phone_type = -1; - } - - _vcui_doc_add_call_data(call_data); - _vcui_view_change(VIEW_DIALLING_VIEW, 0, NULL, NULL); - } - break; - - case VC_ENGINE_MSG_OUTGOING_ALERT_TO_UI: - { - call_data_t *call_data = _vcui_doc_get_recent_mo(); - - if (call_data == NULL) { - CALL_UI_DEBUG("Error"); - elm_exit(); - return; - } - - if (_vcui_doc_is_call_data(call_data) == EINA_FALSE) { - CALL_UI_DEBUG("Error. check outgoing_orig msg."); - elm_exit(); - return; - } - - _vcui_view_dialing_draw_txt_connecting(ad->view_st[VIEW_DIALLING_VIEW]); - } - break; - - case VC_ENGINE_MSG_CONNECTED_TO_UI: - { - _voicecall_dvc_control_lcd_state(VC_LCD_ON_UNLOCK); - - vc_engine_connected_type connected = msg->connected; - call_data_t *call_data = _vcui_doc_get_call_handle(connected.call_handle); - - if (call_data == NULL) { - CALL_UI_DEBUG("Error"); - elm_exit(); - return; - } - - call_data->caller_status = CALL_UNHOLD; - call_data->call_handle = connected.call_handle; - call_data->start_time = time(&(call_data->start_time)); - - /* When new call connected, if it's multiparty call, always show split1 first. */ - ad->bswapped = EINA_FALSE; - - _vcui_view_auto_change(); - } - break; - - case VC_ENGINE_MSG_NORMAL_END_TO_UI: - { - vc_engine_normal_end_type normal_end = msg->normal_end; - - CALL_UI_DEBUG("end_cause_type:[%d]", normal_end.end_cause_type); - - call_data_t *call_data = _vcui_doc_get_call_handle(normal_end.call_handle); - if (call_data == NULL) { - CALL_UI_DEBUG("Error"); - elm_exit(); - return; - } - if (call_data->mo_mt_status == CALL_INCOMING) - _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_INCOMMING, call_data, EINA_FALSE); - else if (call_data->mo_mt_status == CALL_OUTGOING) - _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_OUTGOING, call_data, EINA_FALSE); - - time_t start_time; - memcpy(&start_time, &(call_data->start_time), sizeof(call_data->start_time)); - - if (call_data->bno_end_show == EINA_TRUE) { - _vcui_doc_remove_call_data(call_data); - _vcui_view_common_call_terminate_or_view_change(); - } else { - vcui_app_call_data_t *ad = _vcui_get_app_data(); - if (_vcui_doc_get_count() == 1 && ad->view_top == VIEW_INCALL_ONECALL_VIEW) { - ad->call_end_type = CALL_END_TYPE_SINGLE_CALL; - } - CALL_UI_DEBUG("ad->call_end_type[%d]", ad->call_end_type); - if (ad->call_end_type == CALL_END_TYPE_SINGLE_CALL || ad->call_end_type == CALL_END_TYPE_CONF_CALL) { - CALL_UI_DEBUG("Show end screen - %d", ad->call_end_type); - _vcui_view_change(VIEW_ENDCALL_VIEW, -1, call_data, NULL); - ad->call_end_type = CALL_END_TYPE_NONE; - CALL_UI_DEBUG("Blink show: end call time"); - _vcui_view_common_call_end_show(start_time, normal_end.end_cause_type); - _vcui_doc_remove_call_data(call_data); - } - else { - _vcui_doc_remove_call_data(call_data); - _vcui_view_common_call_terminate_or_view_change(); - } - } - } - break; - - case VC_ENGINE_MSG_INCOM_END_TO_UI: - { - _voicecall_dvc_control_lcd_state(VC_LCD_ON_UNLOCK); - - vc_engine_common_with_handle_type incom_end = msg->incom_end; - - call_data_t *call_data = _vcui_doc_get_call_handle(incom_end.call_handle); - if (call_data == NULL) { - CALL_UI_DEBUG("Error"); - elm_exit(); - return; - } - - _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN, call_data, EINA_FALSE); - _vcui_doc_remove_call_data(call_data); - - _vcui_view_common_call_terminate_or_view_change(); - - } - break; - - case VC_ENGINE_MSG_REJECTED_END_TO_UI: - { - _voicecall_dvc_control_lcd_state(VC_LCD_ON_UNLOCK); - - vc_engine_common_with_handle_type rejected_end = msg->rejected_end; - - call_data_t *call_data = _vcui_doc_get_call_handle(rejected_end.call_handle); - - if (call_data == NULL) { - CALL_UI_DEBUG("Error"); - elm_exit(); - - return; - } - - _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_REJECT, call_data, EINA_FALSE); - _vcui_doc_remove_call_data(call_data); - _vcui_view_common_call_terminate_or_view_change(); - } - break; - - case VC_ENGINE_MSG_OUTGOING_END_TO_UI: - { - _voicecall_dvc_control_lcd_state(VC_LCD_ON_UNLOCK); - - vc_engine_outgoing_end_type outgoing_end = msg->outgoing_end; - call_data_t *call_data = _vcui_doc_get_call_handle(outgoing_end.call_handle); - - if (call_data == NULL) { - CALL_UI_DEBUG("It is the case which call orig is not received."); - char data[VC_DATA_LENGTH_MAX] = { 0, }; - _vcui_view_popup_load(_vcui_get_endcause_string(outgoing_end.end_cause_type, data), POPUP_TIMEOUT_LONG, EINA_TRUE); - } else { - _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_OUTGOING, call_data, EINA_TRUE); - if (outgoing_end.bauto_redial == EINA_TRUE) { - CALL_UI_DEBUG("bauto_redial is EINA_TRUE"); - _vcui_doc_remove_call_data_only_list(call_data); - } else { - CALL_UI_DEBUG("show the call end screen"); - vcui_app_call_data_t *ad = _vcui_get_app_data(); - if (_vcui_doc_get_count() == 1 && ad->view_top == VIEW_DIALLING_VIEW) { - ad->call_end_type = CALL_END_TYPE_SINGLE_CALL; - _vcui_view_change(VIEW_ENDCALL_VIEW, -1, call_data, NULL); - } - _vcui_doc_remove_call_data(call_data); - } - _vcui_view_common_call_end_show_dialing(outgoing_end.end_cause_type, outgoing_end.bauto_redial); - } - - } - break; - - case VC_ENGINE_MSG_OUTGOING_END_SIGNAL_PLAY_TO_UI: - { - vc_engine_outgoing_end_signal_play_type outgoing_end_signal_play = msg->outgoing_end_signal_play; - call_data_t *call_data = _vcui_doc_get_call_handle(outgoing_end_signal_play.call_handle); - - if (call_data != NULL) { - _vcui_view_dialing_draw_txt_ended(ad->view_st[ad->view_top], outgoing_end_signal_play.end_cause_type); - } else { - CALL_UI_DEBUG("Check it whether call data exists. handle:[%d]", outgoing_end_signal_play.call_handle); - } - } - break; - - case VC_ENGINE_MSG_OUTGOING_ABORTED_TO_UI: - { - _voicecall_dvc_control_lcd_state(VC_LCD_ON_UNLOCK); - - vc_engine_common_with_handle_type outgoing_aborted = msg->outgoing_aborted; - call_data_t *call_data = _vcui_doc_get_call_handle(outgoing_aborted.call_handle); - - if (call_data == NULL) - call_data = _vcui_doc_get_recent_mo(); - - if (call_data == NULL) { - CALL_UI_DEBUG("Error"); - elm_exit(); - return; - } - - _vcui_add_calllog(CTS_PLOG_TYPE_VOICE_OUTGOING, call_data, EINA_TRUE); - - _vcui_doc_remove_call_data(call_data); - - _vcui_view_common_call_terminate_or_view_change(); - - } - break; - - case VC_ENGINE_MSG_DTMF_ACK_TO_UI: - { -#ifdef PDIAL_SEND_DTMF - - vc_engine_dtmf_ack_type dtmf_ack = msg->dtmf_progress; - - if (EINA_FALSE == dtmf_ack.bstatus) { - _vcui_view_popup_unload_progress(ad); - if ((dtmf_ack.string_id != -1) && (dtmf_ack.string_id != IDS_CALL_POP_DTMF_SENT)) { - CALL_UI_DEBUG("load popup window... Start"); - _vcui_view_popup_load(_(gszcall_error_msg[dtmf_ack.string_id]), POPUP_TIMEOUT_LONG, EINA_FALSE); - } - } else { - CALL_UI_DEBUG("display_string:[%s], string_id:[%d]", dtmf_ack.display_string, dtmf_ack.string_id); - _vcui_view_popup_load_sending_dtmf(_(gszcall_error_msg[dtmf_ack.string_id]), dtmf_ack.display_string); - } -#endif - } - break; - - case VC_ENGINE_MSG_SS_HELD_TO_UI: - { - _vcui_doc_set_hold_all(); - _vcui_view_update(); - } - break; - - case VC_ENGINE_MSG_SS_RETREIVED_TO_UI: - { - _vcui_doc_set_unhold_all(); - _vcui_view_update(); - } - break; - - case VC_ENGINE_MSG_SS_SWAP_TO_UI: - { - _vcui_view_popup_unload(ad->popup_eo); - - if (ad->bholdisleft == EINA_TRUE) { - ad->bswapped = EINA_FALSE; - } else { - ad->bswapped = EINA_TRUE; - } - - _vcui_doc_set_swap_all(); - _vcui_view_auto_change(); - } - break; - - case VC_ENGINE_MSG_SS_SETUP_CONF_TO_UI: - { - _vcui_view_popup_unload(ad->popup_eo); - - _vcui_doc_set_unhold_all(); - _vcui_view_auto_change(); - } - break; - - case VC_ENGINE_MSG_SS_SPLIT_CONF_TO_UI: - { - vc_engine_common_with_handle_type ss_split_conf = msg->ss_split_conf; - - CALL_UI_DEBUG("[UI]The handle is %d ", ss_split_conf.call_handle); - - call_data_t *call_data = _vcui_doc_get_call_handle(ss_split_conf.call_handle); - if (call_data == NULL) { - CALL_UI_DEBUG("Error"); - elm_exit(); - return; - } else { - _vcui_doc_set_hold_all(); - call_data->caller_status = CALL_UNHOLD; - - _vcui_view_auto_change(); - } - } - break; - - case VC_ENGINE_MSG_SS_TRANSFERRED_TO_UI: - break; - - case VC_ENGINE_MSG_SS_CONNECT_LINE_IND_TO_UI: - break; - - case VC_ENGINE_MSG_IND_FORWARD_TO_UI: - break; - - case VC_ENGINE_MSG_IND_ACTIVATE_TO_UI: - { - _vcui_view_popup_load(_("IDS_CALL_POP_UNHELD"), POPUP_TIMEOUT_SHORT, EINA_FALSE); - } - break; - - case VC_ENGINE_MSG_IND_HOLD_TO_UI: - { - _vcui_view_popup_load(_("IDS_CALL_POP_HELD"), POPUP_TIMEOUT_SHORT, EINA_FALSE); - } - break; - - case VC_ENGINE_MSG_IND_TRANSFER_TO_UI: - break; - - case VC_ENGINE_MSG_IND_SETUPCONFERENCE_TO_UI: - break; - - case VC_ENGINE_MSG_IND_BARRING_TO_UI: - break; - - case VC_ENGINE_MSG_IND_WAITING_TO_UI: - { - _vcui_view_popup_load(_("IDS_CALL_POP_WAITING_ACTIVE"), POPUP_TIMEOUT_SHORT, EINA_FALSE); - } - break; - - case VC_ENGINE_MSG_IND_CUGINFO_TO_UI: - break; - - case VC_ENGINE_MSG_IND_SSNOTIFY_TO_UI: - break; - - case VC_ENGINE_MSG_IND_CALLINGNAMEINFO_TO_UI: - break; - - case VC_ENGINE_MSG_IND_REDIRECT_CNF_TO_UI: - break; - - case VC_ENGINE_MSG_IND_ACTIVATECCBS_CNF_TO_UI: - break; - - case VC_ENGINE_MSG_IND_ACTIVATECCBS_USERINFO_TO_UI: - break; - - case VC_ENGINE_MSG_GET_VOLUME_RESP_TO_UI: - { - vc_engine_vol_resp_type vol_resp = msg->vol_resp; - _vcui_response_volume(vol_resp.vol_alert_type, vol_resp.vol_level); - } - break; - - case VC_ENGINE_MSG_SET_VOLUME_FROM_BT_TO_UI: - { - vc_engine_vol_set_from_bt_type vol_set_from_bt = msg->vol_set_from_bt; - ad->bt_vol_val = vol_set_from_bt.vol_level; - _vcui_view_popup_vol_bt(ad->bt_vol_val); - } - break; - - case VC_ENGINE_MSG_ACTION_NO_ACTIVE_TASK_TO_UI: - { - - } - break; - - case VC_ENGINE_MSG_ACTION_CALL_END_HELD_RETREIVED_TO_UI: - { - - } - break; - - case VC_ENGINE_MSG_ACTION_SAT_RESPONSE_TO_UI: - { - - } - break; - - case VC_ENGINE_MSG_ACTION_SAT_REQUEST_TO_UI: - { - - } - break; - - case VC_ENGINE_MSG_ERROR_OCCURED_TO_UI: - break; - - case VC_ENGINE_MSG_IND_AOC_TO_UI: - break; - - case VC_ENGINE_MSG_ACCEPT_CHOICE_BOX_TO_UI: - { - CALL_UI_DEBUG("not supported"); - } - break; - - case VC_ENGINE_MSG_HEADSET_STATUS_TO_UI: - { - vc_engine_headset_status_type headset_status = msg->headset_status; - ad->headset_status = headset_status.bstatus; - if (ad->headset_status == EINA_TRUE) { - ad->speaker_status = EINA_FALSE; - } - - CALL_UI_DEBUG("Headset Status = %d", ad->headset_status); - CALL_UI_DEBUG("ad->view_top:[%d]", ad->view_top); - - if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) - || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { - if (ad->view_st[ad->view_top] != NULL) { - ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); - } - } - - } - break; - - case VC_ENGINE_MSG_EARJACK_STATUS_TO_UI: - { - vc_engine_earjack_status_type earjack_status = msg->earjack_status; - - CALL_UI_DEBUG("earjack Status = %d", earjack_status.bstatus); - CALL_UI_DEBUG("ad->view_top:[%d]", ad->view_top); - - if(earjack_status.bstatus == EINA_TRUE) { - if (ad->ctxpopup_radio_group_eo != NULL ) - elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_EARJACK); -#ifdef _NEW_SND_ -#else - _vcui_engine_change_sound_path(VCUI_AUDIO_EARJACK); -#endif - - ad->speaker_status = EINA_FALSE; - ad->headset_status = EINA_FALSE; - - if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) - || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { - if (ad->view_st[ad->view_top] != NULL) { - ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); - } - } - } else { - if (_vcui_is_headset_conected() == EINA_TRUE) { - if (ad->ctxpopup_radio_group_eo != NULL ) - elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_HEADSET); - -#ifdef _NEW_SND_ -#else - _vcui_engine_change_sound_path(VCUI_AUDIO_HEADSET); -#endif - - ad->speaker_status = EINA_FALSE; - ad->headset_status = EINA_TRUE; - - if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) - || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { - if (ad->view_st[ad->view_top] != NULL) { - ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); - } - } - } else { - if (ad->ctxpopup_radio_group_eo != NULL ) - elm_radio_value_set(ad->ctxpopup_radio_group_eo, VCUI_SND_PATH_EARJACK); - -#ifdef _NEW_SND_ -#else - _vcui_engine_change_sound_path(VCUI_AUDIO_EARJACK); -#endif - - ad->speaker_status = EINA_FALSE; - ad->headset_status = EINA_FALSE; - - if ((ad->view_top == VIEW_INCALL_ONECALL_VIEW) || (ad->view_top == VIEW_INCALL_MULTICALL_SPLIT_VIEW) - || (ad->view_top == VIEW_INCALL_MULTICALL_CONF_VIEW) || (ad->view_top == VIEW_DIALLING_VIEW)) { - if (ad->view_st[ad->view_top] != NULL) { - ad->view_st[ad->view_top]->onUpdate(ad->view_st[ad->view_top], NULL, NULL); - } - } - } - } - } - break; - - case VC_ENGINE_MSG_ACTION_INCOM_FORCE_TO_UI: - { - call_data_t *recent_mo = _vcui_doc_get_recent_mo(); - if (recent_mo != NULL && recent_mo->call_handle == NO_HANDLE) { - _vcui_doc_remove_call_data_only_list(recent_mo); - _vcui_doc_set_mo_recent(NULL); - } - - } - break; - - case VC_ENGINE_MSG_MESSAGE_BOX_TO_UI: - { - _voicecall_dvc_control_lcd_state(VC_LCD_ON_UNLOCK); - - vc_engine_msg_box_type msg_box = msg->msg_box; - _vcui_view_popup_load(_(gszcall_error_msg[msg_box.string_id]), POPUP_TIMEOUT_LONG, EINA_TRUE); - } - break; - - case VC_ENGINE_MSG_REDIAL_TO_UI: - { - CALL_UI_DEBUG("not used"); - } - break; - - case VC_ENGINE_MSG_CREATE_NEWVOICEFILE_TO_UI: - { - CALL_UI_DEBUG("not used"); - } - - default: - break; - } - - _vcui_doc_all_print(gszcall_callback_msg[event]); - - CALL_UI_DEBUG("End.."); - -} diff --git a/ui/vcui-engine-interface.h b/ui/vcui-engine-interface.h deleted file mode 100755 index 01d12ef..0000000 --- a/ui/vcui-engine-interface.h +++ /dev/null @@ -1,132 +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 _VOICE_CALL_UI_IPC_ -#define _VOICE_CALL_UI_IPC_ - -#include "voice-call-engine.h" - -typedef enum _vcui_snd_path_type_t{ - VCUI_SND_PATH_NONE, - VCUI_SND_PATH_HEADSET, - VCUI_SND_PATH_EARJACK, - VCUI_SND_PATH_SPEAKER, - VCUI_SND_PATH_MAX, -}vcui_snd_path_type_t; - -typedef enum _vcui_call_type_t { - VCUI_CALL_TYPE_MO, - VCUI_CALL_TYPE_MT, - VCUI_CALL_TYPE_ECC, - VCUI_CALL_TYPE_ECC_TEST, - VCUI_CALL_TYPE_DOWNLOAD_CALL, - VCUI_CALL_TYPE_SAT, - VCUI_CALL_TYPE_MAX -} vcui_call_type_t; - -typedef struct _vcui_call_mo_data_t { - char call_number[VC_PHONE_NUMBER_LENGTH_MAX]; - int ct_index; -} vcui_call_mo_data_t; - -typedef struct _vcui_call_mt_data_t { - int call_handle; - int call_type; - int cli_presentation_indicator; - char call_num[VC_PHONE_NUMBER_LENGTH_MAX]; - int calling_name_mode; - char calling_name[VC_PHONE_NAME_LENGTH_MAX]; - char redirected_number[VC_PHONE_NUMBER_LENGTH_MAX]; - char redirected_sub_address[VC_PHONE_SUBADDRESS_LENGTH_MAX]; - int cli_cause; - int bfwded; - int active_line; -} vcui_call_mt_data_t; - -typedef struct _vcui_call_ecc_data_t { - char call_number[VC_PHONE_NUMBER_LENGTH_MAX]; -} vcui_call_ecc_data_t; - -typedef struct _vcui_call_sat_data_t { - int command_id; /**app_data; - - ad->bholdisleft = ad->bswapped; - _vcui_view_popup_load(_("IDS_CALL_POP_SWAPPED"), POPUP_TIMEOUT_LONG, EINA_FALSE); - _vcui_engine_hold_unhold_swap_call(); -} - -static void __vcui_join_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - _vcui_create_top_right_button_disabled(data); - _vcui_engine_join_call(); -} - -void _vcui_conf_img_cb(void *data, Evas_Object *obj, void *event_info) /* for multicall list view */ -{ - CALL_UI_DEBUG(".."); - _vcui_view_change(VIEW_INCALL_MULTICALL_LIST_VIEW, 0, 0, 0); -} - -static void __vcui_keypad_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - _vcui_view_change(VIEW_INCALL_KEYPAD_VIEW, 0, NULL, NULL); -} - -static void __vcui_contacts_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - _vcui_doc_launch_contact_list_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data)); -} - -static void __vcui_addcall_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - - _vcui_doc_launch_phoneui_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data)); -} - -static void __vcui_sound_path_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - _vcui_view_popup_load_snd_path(); -} - -static void __vcui_spk_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - - CALL_UI_DEBUG("vd->type:[%d]", vd->type); - - _vcui_engine_speaker_on_off(EINA_TRUE); - - ad->speaker_status = EINA_TRUE; - _vcui_create_bottom_left_button(vd); -} - -static void __vcui_spk_press_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - - CALL_UI_DEBUG("vd->type:[%d]", vd->type); - - _vcui_engine_speaker_on_off(EINA_FALSE); - - ad->speaker_status = EINA_FALSE; - _vcui_create_bottom_left_button(vd); -} - -static void __vcui_mute_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - - CALL_UI_DEBUG("vd->type:[%d]", vd->type); - - _vcui_engine_mute_on_off(EINA_TRUE); - - ad->mute_status = EINA_TRUE; - _vcui_create_bottom_middle_button(vd); -} - -static void __vcui_mute_press_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - - CALL_UI_DEBUG("vd->type:[%d]", vd->type); - - _vcui_engine_mute_on_off(EINA_FALSE); - - ad->mute_status = EINA_FALSE; - _vcui_create_bottom_middle_button(vd); -} - -static void __vcui_bigend_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - CALL_UI_DEBUG("vd->type:[%d]", vd->type); - - _vcui_create_button_bigend_disabled(vd); - - switch (vd->type) { - case VIEW_DIALLING_VIEW: - { - _vcui_engine_cancel_call(); - } - break; - case VIEW_INCALL_ONECALL_VIEW: - { - _vcui_engine_end_call(); - } - break; - case VIEW_INCALL_MULTICALL_SPLIT_VIEW: - { - _vcui_engine_end_active_calls(); - } - break; - case VIEW_INCALL_MULTICALL_CONF_VIEW: - { - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; - if (priv->call_status == CALL_HOLD) - _vcui_engine_end_held_calls(); - else - _vcui_engine_end_active_calls(); - ad->call_end_type = CALL_END_TYPE_CONF_CALL; - } - break; - case VIEW_INCALL_MULTICALL_LIST_VIEW: - { - vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *) vd->priv; - if (priv->call_status == CALL_HOLD) - _vcui_engine_end_held_calls(); - else - _vcui_engine_end_active_calls(); - - int grp_count = 0; - vcall_engine_get_group_count(&grp_count); - CALL_UI_DEBUG("No. of groups - %d", grp_count); - if (grp_count == 1) - ad->call_end_type = CALL_END_TYPE_CONF_CALL; - else - ad->call_end_type = CALL_END_TYPE_NONE; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return; - break; - - } -} - -static void __vcui_accept_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - - if (priv->bselected_btn == EINA_TRUE) { - CALL_UI_DEBUG("already clicked!!"); - } else { - priv->bselected_btn = EINA_TRUE; - _vcui_engine_answer_call(); - } -} - -static void __vcui_reject_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - - if (priv->bselected_btn == EINA_TRUE) { - CALL_UI_DEBUG("already clicked!!"); - } else { - priv->bselected_btn = EINA_TRUE; - _vcui_engine_reject_call(); - } -} - -static void __vcui_second_incoming_reject_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - _vcui_engine_reject_call(); -} - -static void __vcui_second_incoming_hold_and_accept_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - priv->bdont_refresh = EINA_TRUE; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - break; - } - - _vcui_engine_answer_call_by_type(1); -} - -static void __vcui_second_incoming_end_and_accept_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - priv->bdont_refresh = EINA_TRUE; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - break; - } - - _vcui_engine_answer_call_by_type(2); -} - -static void __vcui_second_incoming_end_active_and_accept_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - priv->bdont_refresh = EINA_TRUE; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - break; - } - - _vcui_engine_answer_call_by_type(2); -} - -static void __vcui_second_incoming_end_hold_and_accept_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - priv->bdont_refresh = EINA_TRUE; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - break; - } - - _vcui_engine_answer_call_by_type(3); -} - -static void __vcui_second_incoming_end_all_and_accept_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - priv->bdont_refresh = EINA_TRUE; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - break; - } - - _vcui_engine_answer_call_by_type(4); -} - -Evas_Object *_vcui_create_top_left_button(void *data) -{ - return NULL; -} - -Evas_Object *_vcui_create_top_left_button_disabled(void *data) -{ - return NULL; -} - - -Evas_Object *_vcui_create_top_middle_button(void *data) -{ - return NULL; -} - -Evas_Object *_vcui_create_top_middle_button_disabled(void *data) -{ - return NULL; -} - -Evas_Object *_vcui_create_top_right_button(void *data) -{ - return NULL; -} - -Evas_Object *_vcui_create_top_right_button_disabled(void *data) -{ - return NULL; -} - -/* Speaker Button ENABLED */ -Evas_Object *_vcui_create_bottom_left_button(void *data) -{ - CALL_UI_KPI("_vcui_create_bottom_left_button start"); - Evas_Object *btn; - Evas_Object *ic; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - - switch (vd->type) { - case VIEW_DIALLING_VIEW: - { - vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_ONECALL_VIEW: - { - incall_one_view_priv_t *priv = (incall_one_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_MULTICALL_SPLIT_VIEW: - { - incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_MULTICALL_CONF_VIEW: - { - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_speaker"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - if (EINA_TRUE == _vcui_is_headset_conected()) { - btn = elm_button_add(layout); - CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn"); - elm_object_style_set(btn, "style_call_sixbtn"); - CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn"); - elm_object_part_content_set(layout, "btn_speaker", btn); - ic = elm_icon_add(layout); - elm_icon_file_set(ic, SPEAKER_ICON, NULL); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_resizable_set(ic, 1, 1); - elm_object_part_content_set(btn, "icon", ic); - elm_object_text_set(btn, _("IDS_MSGC_OPT_SOUND")); - evas_object_smart_callback_add(btn, "clicked", __vcui_sound_path_btn_cb, vd); - } else { - if (ad->speaker_status == EINA_FALSE) { - btn = elm_button_add(layout); - CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn"); - elm_object_style_set(btn, "style_call_sixbtn"); - CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn"); - elm_object_part_content_set(layout, "btn_speaker", btn); - ic = elm_icon_add(layout); - elm_icon_file_set(ic, SPEAKER_ICON, NULL); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_resizable_set(ic, 1, 1); - elm_object_part_content_set(btn, "icon", ic); - elm_object_text_set(btn, _("IDS_CALL_BUTTON_SPEAKER")); - evas_object_smart_callback_add(btn, "clicked", __vcui_spk_btn_cb, vd); - } else { - btn = elm_button_add(layout); - CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_pressed"); - elm_object_style_set(btn, "style_call_sixbtn_pressed"); - CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_pressed"); - elm_object_part_content_set(layout, "btn_speaker", btn); - ic = elm_icon_add(layout); - elm_icon_file_set(ic, SPEAKER_ICON, NULL); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_resizable_set(ic, 1, 1); - elm_object_part_content_set(btn, "icon", ic); - elm_object_text_set(btn, _("IDS_CALL_BUTTON_SPEAKER")); - evas_object_smart_callback_add(btn, "clicked", __vcui_spk_press_btn_cb, vd); - } - } - CALL_UI_KPI("_vcui_create_bottom_left_button done"); - return layout; -} - -/* Speaker Button DISABLED */ -Evas_Object *_vcui_create_bottom_left_button_disabled(void *data) -{ - CALL_UI_KPI("_vcui_create_bottom_left_button_disabled start"); - Evas_Object *btn; - Evas_Object *ic; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_ENDCALL_VIEW: - { - endcall_view_priv_t *priv = (endcall_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_speaker"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - CALL_UI_KPI("elm_object_style_set start :: style_call_sixbtn_disabled"); - elm_object_style_set(btn, "style_call_sixbtn_disabled"); - CALL_UI_KPI("elm_object_style_set done :: style_call_sixbtn_disabled"); - elm_object_part_content_set(layout, "btn_speaker", btn); - ic = elm_icon_add(layout); - elm_icon_file_set(ic, SPEAKER_DISABLED_ICON, NULL); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_resizable_set(ic, 1, 1); - elm_object_part_content_set(btn, "icon", ic); - elm_object_text_set(btn, _("IDS_CALL_BUTTON_SPEAKER")); - CALL_UI_KPI("_vcui_create_bottom_left_button_disabled done"); - return layout; -} - -Evas_Object *_vcui_create_bottom_middle_button(void *data) -{ - return NULL; -} - -Evas_Object *_vcui_create_bottom_middle_button_disabled(void *data) -{ - return NULL; -} - -Evas_Object *_vcui_create_bottom_right_button(void *data) -{ - return NULL; -} - - -Evas_Object *_vcui_create_bottom_right_button_disabled(void *data) -{ - return NULL; -} - - -Evas_Object *_vcui_create_button_bigend(void *data) -{ - CALL_UI_KPI("_vcui_create_button_bigend start"); - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_DIALLING_VIEW: - { - vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_ONECALL_VIEW: - { - incall_one_view_priv_t *priv = (incall_one_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_MULTICALL_SPLIT_VIEW: - { - incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_MULTICALL_CONF_VIEW: - { - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_MULTICALL_LIST_VIEW: - { - vcui_view_multi_call_list_priv_t *priv = (vcui_view_multi_call_list_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_bigend"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_bigend", btn); - CALL_UI_KPI("elm_object_style_set start :: text_only/style_call_text_only_red"); - elm_object_style_set(btn, "text_only/style_call_text_only_red"); - CALL_UI_KPI("elm_object_style_set done :: text_only/style_call_text_only_red"); - elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL")); - evas_object_smart_callback_add(btn, "clicked", __vcui_bigend_btn_cb, vd); - CALL_UI_KPI("_vcui_create_button_bigend done"); - return layout; -} - -Evas_Object *_vcui_create_button_bigend_disabled(void *data) -{ - CALL_UI_KPI("_vcui_create_button_bigend_disabled start"); - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_DIALLING_VIEW: - { - vcui_view_dialing_priv_t *priv = (vcui_view_dialing_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_ONECALL_VIEW: - { - incall_one_view_priv_t *priv = (incall_one_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_MULTICALL_SPLIT_VIEW: - { - incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_INCALL_MULTICALL_CONF_VIEW: - { - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *) vd->priv; - layout = priv->contents; - } - break; - case VIEW_ENDCALL_VIEW: - { - endcall_view_priv_t *priv = (endcall_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_bigend"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_bigend", btn); - CALL_UI_KPI("elm_object_style_set start :: text_only/style_call_text_only_red_disabled"); - elm_object_style_set(btn, "text_only/style_call_text_only_red_disabled"); - CALL_UI_KPI("elm_object_style_set done :: text_only/style_call_text_only_red_disabled"); - elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL")); - CALL_UI_KPI("_vcui_create_button_bigend_disabled done"); - return layout; -} - -Evas_Object *_vcui_create_conf_list_button_hold(void *data) -{ - return NULL; -} - -Evas_Object *_vcui_create_button_accept(void *data) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_accept"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_accept", btn); - CALL_UI_KPI("elm_object_style_set start :: text_only/style_call_text_only_green"); - elm_object_style_set(btn, "text_only/style_call_text_only_green"); - CALL_UI_KPI("elm_object_style_set done :: text_only/style_call_text_only_green"); - elm_object_text_set(btn, _("IDS_CALL_BUTTON_ACCEPT")); - evas_object_smart_callback_add(btn, "clicked", __vcui_accept_btn_cb, vd); - - return layout; -} - -Evas_Object *_vcui_create_button_reject(void *data) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_reject"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_reject", btn); - CALL_UI_KPI("elm_object_style_set start :: text_only/style_call_text_only_red"); - elm_object_style_set(btn, "text_only/style_call_text_only_red"); - CALL_UI_KPI("elm_object_style_set done :: text_only/style_call_text_only_red"); - elm_object_text_set(btn, _("IDS_CALL_BUTTON_REJECT")); - evas_object_smart_callback_add(btn, "clicked", __vcui_reject_btn_cb, vd); - - return layout; -} - -Evas_Object *_vcui_create_button_second_incoming_reject(void *data, char *text, char *part_name) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), part_name); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, part_name, btn); - CALL_UI_KPI("elm_object_style_set start :: multiline_text_black"); - elm_object_style_set(btn, "multiline_text_black"); - CALL_UI_KPI("elm_object_style_set done :: multiline_text_black"); - elm_object_text_set(btn, text); - evas_object_smart_callback_add(btn, "clicked", __vcui_second_incoming_reject_btn_cb, vd); - - return layout; -} - -Evas_Object *_vcui_create_button_second_incoming_hold_and_accept(void *data, char *text) -{ - return NULL; -} - -Evas_Object *_vcui_create_button_second_incoming_end_and_accept(void *data, char *text) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_incoming4"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_incoming4", btn); - CALL_UI_KPI("elm_object_style_set start :: multiline_text_red"); - elm_object_style_set(btn, "multiline_text_red"); - CALL_UI_KPI("elm_object_style_set done :: multiline_text_red"); - elm_object_text_set(btn, text); - evas_object_smart_callback_add(btn, "clicked", __vcui_second_incoming_end_and_accept_btn_cb, vd); - - return layout; -} - -Evas_Object *_vcui_create_button_second_incoming_end_active_and_accept(void *data, char *text) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_incoming2"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_incoming2", btn); - CALL_UI_KPI("elm_object_style_set start :: multiline_text_black"); - elm_object_style_set(btn, "multiline_text_black"); - CALL_UI_KPI("elm_object_style_set done :: multiline_text_black"); - elm_object_text_set(btn, text); - evas_object_smart_callback_add(btn, "clicked", __vcui_second_incoming_end_active_and_accept_btn_cb, vd); - - return layout; -} - -Evas_Object *_vcui_create_button_second_incoming_end_hold_and_accept(void *data, char *text) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_incoming3"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_incoming3", btn); - CALL_UI_KPI("elm_object_style_set start :: multiline_text_black"); - elm_object_style_set(btn, "multiline_text_black"); - CALL_UI_KPI("elm_object_style_set done :: multiline_text_black"); - elm_object_text_set(btn, text); - evas_object_smart_callback_add(btn, "clicked", __vcui_second_incoming_end_hold_and_accept_btn_cb, vd); - - return layout; -} - -Evas_Object *_vcui_create_button_second_incoming_end_all_and_accept(void *data, char *text) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - switch (vd->type) { - case VIEW_INCOMING_VIEW: - { - incoming_view_priv_t *priv = (incoming_view_priv_t *) vd->priv; - layout = priv->contents; - } - break; - default: - CALL_UI_DEBUG("ERROR - wrong vd type:[%d]", vd->type); - return NULL; - break; - - } - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_incoming4"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_incoming4", btn); - CALL_UI_KPI("elm_object_style_set start :: multiline_text_red"); - elm_object_style_set(btn, "multiline_text_red"); - CALL_UI_KPI("elm_object_style_set done :: multiline_text_red"); - elm_object_text_set(btn, text); - evas_object_smart_callback_add(btn, "clicked", __vcui_second_incoming_end_all_and_accept_btn_cb, vd); - - return layout; -} - -Evas_Object *_vcui_show_wallpaper_image(Evas_Object *contents) -{ - return NULL; -} - -Evas_Object *_vcui_show_calling_name_bg(Evas_Object *contents) -{ - vcui_app_call_data_t *ad = _vcui_get_app_data(); - Evas_Object *sw = NULL; - Evas_Object *ic = NULL; - - sw = edje_object_part_swallow_get(_EDJ(contents), "swl_calling_name_bg"); - if (sw) { - edje_object_part_unswallow(_EDJ(contents), sw); - evas_object_del(sw); - } - - ic = elm_icon_add(ad->win_main); - elm_object_part_content_set(contents, "swl_calling_name_bg", ic); - elm_icon_file_set(ic, CALLING_NAME_BG_IMAGE, NULL); - elm_icon_fill_outside_set(ic, EINA_TRUE); - - return ic; -} - -void _vcui_delete_contact_image(Evas_Object *contents) -{ - Evas_Object *sw; - - sw = edje_object_part_swallow_get(_EDJ(contents), "swl_cid"); - if (sw) { - edje_object_part_unswallow(_EDJ(contents), sw); - evas_object_del(sw); - } -} - -Evas_Object *_vcui_show_contact_image(Evas_Object *contents, Evas_Object *win_main, char *path) -{ - Evas_Object *sw; - Evas_Object *ic; - - sw = edje_object_part_swallow_get(_EDJ(contents), "swl_cid"); - if (sw) { - edje_object_part_unswallow(_EDJ(contents), sw); - evas_object_del(sw); - } - - ic = elm_icon_add(win_main); - elm_object_part_content_set(contents, "swl_cid", ic); - elm_icon_file_set(ic, path, NULL); - - return ic; -} - -Evas_Object *_vcui_show_default_image(Evas_Object *contents, Evas_Object *win_main, char *path) -{ - Evas_Object *sw; - Evas_Object *ic; - - sw = edje_object_part_swallow_get(_EDJ(contents), "swl_cid"); - if (sw) { - edje_object_part_unswallow(_EDJ(contents), sw); - evas_object_del(sw); - } - - ic = elm_icon_add(win_main); - elm_object_part_content_set(contents, "swl_cid", ic); - elm_icon_file_set(ic, path, NULL); - - return ic; -} - -void _vcui_set_full_image(Evas_Object *contents, Evas_Object *win_main, char *img_path) -{ - Evas_Object *d_image; - Evas_Object *sw; - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - CALL_UI_DEBUG("path:[%s]", img_path); - - sw = edje_object_part_swallow_get(_EDJ(contents), "swl_cid_background"); - if (sw) { - edje_object_part_unswallow(_EDJ(contents), sw); - evas_object_del(sw); - } - - d_image = elm_image_add(contents); - elm_image_file_set(d_image, img_path, NULL); - elm_object_part_content_set(contents, "swl_cid_background", d_image); -} - -static void __vcui_videocall_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG("__vcui_videocall_btn_cb.."); - char *tel_num = (char *)data; - - bundle *kb; - kb = bundle_create(); - bundle_add(kb, "KEY_CALL_TYPE", "MO"); - bundle_add(kb, "number", tel_num); - aul_launch_app("org.tizen.vtmain", kb); - bundle_free(kb); - - free(tel_num); - tel_num = NULL; - - _vcui_view_common_call_end_timer_reset(); - evas_object_smart_callback_del(obj, "clicked", __vcui_videocall_btn_cb); -} - -static void __vcui_voicecall_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG("__vcui_voicecall_btn_cb.."); - vcui_app_call_data_t *ad = _vcui_get_app_data(); - char *tel_num = (char *)data; - vcui_call_type_t call_type; - vcui_call_mo_data_t call_data; - - _vcui_view_common_timer_redial_reset(); - ad->speaker_status = EINA_FALSE; - ad->mute_status = EINA_FALSE; - - memset(&call_data, 0, sizeof(call_data)); - call_type = VCUI_CALL_TYPE_MO; - - snprintf(call_data.call_number, sizeof(call_data.call_number), "%s", tel_num); - - _vcui_engine_interface_process_mo_call(call_type, &call_data); - - free(tel_num); - tel_num = NULL; - - evas_object_smart_callback_del(obj, "clicked", __vcui_voicecall_btn_cb); -} - -static void __vcui_msg_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG("__vcui_msg_btn_cb.."); - char *tel_num = (char *)data; - - _vcui_doc_launch_msg_composer(NULL, tel_num); - - free(tel_num); - tel_num = NULL; - - _vcui_view_common_call_end_timer_reset(); - evas_object_smart_callback_del(obj, "clicked", __vcui_msg_btn_cb); -} - -static void __vcui_add_to_contacts_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG("__vcui_add_to_contacts_btn_cb.."); - vcui_app_call_data_t *ad = _vcui_get_app_data(); - voice_call_view_data_t *vd = ad->view_st[VIEW_ENDCALL_VIEW]; - char *tel_num = (char *)data; - - _vcui_doc_launch_add_to_contacts_ug(NULL, NULL, vd->layout, NULL, NULL, NULL, &(vd->app_data->ugs_array_data), tel_num); - - free(tel_num); - tel_num = NULL; - - evas_object_smart_callback_del(obj, "clicked", __vcui_add_to_contacts_btn_cb); -} - -static void __qp_end_btn_cb(void *data, Evas_Object * obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - voice_call_view_data_t *vd = (voice_call_view_data_t *) data; - vcui_app_call_data_t *ad = vd->app_data; - int grp_count = 0; - - vcall_engine_get_group_count(&grp_count); - CALL_UI_DEBUG("No. of groups - %d", grp_count); - - if (grp_count > 1) { - CALL_UI_DEBUG("multi-party call"); - _vcui_engine_end_active_calls(); - } else if (grp_count == 1) { - CALL_UI_DEBUG("single-party call"); - int all_calls = 0, call_status = 0; - all_calls = _vcui_doc_get_count(); - call_status = _vcui_doc_get_show_callstatus(); - CALL_UI_DEBUG("all_calls[%d], call_status[%d]", all_calls, call_status); - - if (all_calls > 1) { - CALL_UI_DEBUG("End active conference call"); - if (call_status == CALL_HOLD) - _vcui_engine_end_held_calls(); - else - _vcui_engine_end_active_calls(); - ad->call_end_type = CALL_END_TYPE_CONF_CALL; /*conf call end screen SHOW*/ - } else if (all_calls == 1) { - CALL_UI_DEBUG("End single active call"); - _vcui_engine_end_call(); - } else { - CALL_UI_DEBUG("invalid case"); - } - } else { - CALL_UI_DEBUG("dialing/connecting screen end"); - _vcui_engine_cancel_call(); - } -} diff --git a/ui/vcui-view-incoming-lock.c b/ui/vcui-view-incoming-lock.c deleted file mode 100755 index 18ab954..0000000 --- a/ui/vcui-view-incoming-lock.c +++ /dev/null @@ -1,421 +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. - */ - - -#include "vcui-application.h" -#include "vcui-view-incoming-lock.h" - -#define ACCEPT_DIFF_VALUE (130) -#define ACCEPT_DIFF_VALUE_MAX (182) - -#define REJECT_DIFF_VALUE (-130) -#define REJECT_DIFF_VALUE_MAX (-182) - -static int __vcui_view_incoming_lock_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); -static int __vcui_view_incoming_lock_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); -static int __vcui_view_incoming_lock_onhide(voice_call_view_data_t *view_data); -static int __vcui_view_incoming_lock_onshow(voice_call_view_data_t *view_data); -static int __vcui_view_incoming_lock_ondestroy(voice_call_view_data_t *view_data); - -static voice_call_view_data_t s_view = { - .type = VIEW_INCOMING_LOCK_VIEW, - .app_data = NULL, - .layout = NULL, - .onCreate = __vcui_view_incoming_lock_oncreate, - .onUpdate = __vcui_view_incoming_lock_onupdate, - .onHide = __vcui_view_incoming_lock_onhide, - .onShow = __vcui_view_incoming_lock_onshow, - .onDestroy = __vcui_view_incoming_lock_ondestroy, - .priv = NULL, -}; - -voice_call_view_data_t *_vcui_view_incoming_lock_new(vcui_app_call_data_t *ad) -{ - - s_view.app_data = ad; - s_view.priv = calloc(1, sizeof(incoming_lock_view_priv_t)); - - if (!s_view.priv) { - CALL_UI_DEBUG("ERROR!!!!!!!!!!!"); - } - - return &s_view; -} - -static Evas_Object *__vcui_view_incoming_lock_load_edj(Evas *evas, char *edjname, const char *grpname) -{ - Evas_Object *edj; - - edj = edje_object_add(evas); - if (!edje_object_file_set(edj, edjname, grpname)) { - CALL_UI_DEBUG("ERROR!!"); - return NULL; - } - - return edj; -} - -static void __vcui_view_incoming_lock_accept_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - Evas_Event_Mouse_Move *ev = event_info; - - priv->accept_start_x = ev->cur.canvas.x; -} - -static void __vcui_view_incoming_lock_accept_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - Evas_Event_Mouse_Move *ev = event_info; - - int diff_x = 0; - - priv->accept_cur_x = ev->cur.canvas.x; - diff_x = priv->accept_cur_x - priv->accept_start_x; - - - if (diff_x >= 0) { - if (diff_x < (ACCEPT_DIFF_VALUE * ad->scale_factor)) { - evas_object_move(priv->lock_accept, diff_x, 0); - - edje_object_signal_emit(priv->lock_reject, "lock_reject,default", "prog"); - } else if (diff_x < (ACCEPT_DIFF_VALUE_MAX * ad->scale_factor)) { - evas_object_move(priv->lock_accept, diff_x, 0); - evas_object_move(priv->lock_reject, (diff_x - (ACCEPT_DIFF_VALUE * ad->scale_factor)), 0); - - edje_object_signal_emit(priv->lock_reject, "lock_reject,default", "prog"); - } else { - evas_object_move(priv->lock_accept, (ACCEPT_DIFF_VALUE_MAX * ad->scale_factor), 0); - evas_object_move(priv->lock_reject, ((ACCEPT_DIFF_VALUE_MAX * ad->scale_factor) - (ACCEPT_DIFF_VALUE * ad->scale_factor)), 0); - - edje_object_signal_emit(priv->lock_reject, "lock_reject,alpha", "prog"); - } - } -} - -static void __vcui_view_incoming_lock_accept_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - - int diff_x = priv->accept_cur_x - priv->accept_start_x; - - if (diff_x >= (ACCEPT_DIFF_VALUE_MAX * ad->scale_factor)) { - if(_vcui_is_phonelock_status() == EINA_FALSE) - vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); - _vcui_engine_answer_call(); - } else { - evas_object_move(priv->lock_accept, 0, 0); - evas_object_move(priv->lock_reject, 0, 0); - } - -} - -static Evas_Object *__vcui_view_incoming_lock_create_button_accept(void *data) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - - if(priv->lock_accept != NULL) { - evas_object_del(priv->lock_accept); - priv->lock_accept = NULL; - } - priv->lock_accept = __vcui_view_incoming_lock_load_edj(evas_object_evas_get(ad->win_main), EDJ_NAME, GRP_LOCK_ACCEPT); - evas_object_resize(priv->lock_accept, ad->root_w, ad->root_h); - - evas_object_event_callback_add(priv->lock_accept, EVAS_CALLBACK_MOUSE_DOWN, __vcui_view_incoming_lock_accept_mouse_down_cb, vd); - evas_object_event_callback_add(priv->lock_accept, EVAS_CALLBACK_MOUSE_MOVE, __vcui_view_incoming_lock_accept_mouse_move_cb, vd); - evas_object_event_callback_add(priv->lock_accept, EVAS_CALLBACK_MOUSE_UP, __vcui_view_incoming_lock_accept_mouse_up_cb, vd); - - edje_object_part_text_set(priv->lock_accept, "accept_text", _("IDS_CALL_BUTTON_ACCEPT")); - - evas_object_show(priv->lock_accept); - - return priv->lock_accept; -} - -static void __vcui_view_incoming_lock_reject_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - Evas_Event_Mouse_Move *ev = event_info; - - priv->reject_start_x = ev->cur.canvas.x; -} - -static void __vcui_view_incoming_lock_reject_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - Evas_Event_Mouse_Move *ev = event_info; - - int diff_x = 0; - - priv->reject_cur_x = ev->cur.canvas.x; - diff_x = priv->reject_cur_x - priv->reject_start_x; - - if (diff_x <= 0) { - if (diff_x > (REJECT_DIFF_VALUE * ad->scale_factor)) { - evas_object_move(priv->lock_reject, diff_x, 0); - - edje_object_signal_emit(priv->lock_accept, "lock_accept,default", "prog"); - } else if (diff_x > (REJECT_DIFF_VALUE_MAX * ad->scale_factor)) { - evas_object_move(priv->lock_reject, diff_x, 0); - evas_object_move(priv->lock_accept, (diff_x - (REJECT_DIFF_VALUE * ad->scale_factor)), 0); - - edje_object_signal_emit(priv->lock_accept, "lock_accept,default", "prog"); - } else { - evas_object_move(priv->lock_reject, (REJECT_DIFF_VALUE_MAX * ad->scale_factor), 0); - evas_object_move(priv->lock_accept, ((REJECT_DIFF_VALUE_MAX * ad->scale_factor) - (REJECT_DIFF_VALUE * ad->scale_factor)), 0); - - edje_object_signal_emit(priv->lock_accept, "lock_accept,alpha", "prog"); - - } - } -} - -static void __vcui_view_incoming_lock_reject_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - - int diff_x = priv->reject_cur_x - priv->reject_start_x; - - if (diff_x <= (REJECT_DIFF_VALUE_MAX * ad->scale_factor)) { -/* vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);*/ - _vcui_engine_reject_call(); - } else { - evas_object_move(priv->lock_reject, 0, 0); - evas_object_move(priv->lock_accept, 0, 0); - } - -} - -static Evas_Object *__vcui_view_incoming_lock_create_button_reject(void *data) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - - if(priv->lock_reject != NULL) { - evas_object_del(priv->lock_reject); - priv->lock_reject = NULL; - } - priv->lock_reject = __vcui_view_incoming_lock_load_edj(evas_object_evas_get(ad->win_main), EDJ_NAME, GRP_LOCK_REJECT); - evas_object_resize(priv->lock_reject, ad->root_w, ad->root_h); - - evas_object_event_callback_add(priv->lock_reject, EVAS_CALLBACK_MOUSE_DOWN, __vcui_view_incoming_lock_reject_mouse_down_cb, vd); - evas_object_event_callback_add(priv->lock_reject, EVAS_CALLBACK_MOUSE_MOVE, __vcui_view_incoming_lock_reject_mouse_move_cb, vd); - evas_object_event_callback_add(priv->lock_reject, EVAS_CALLBACK_MOUSE_UP, __vcui_view_incoming_lock_reject_mouse_up_cb, vd); - - edje_object_part_text_set(priv->lock_reject, "reject_text", _("IDS_CALL_BUTTON_REJECT")); - - evas_object_show(priv->lock_reject); - - return priv->lock_reject; -} - -static void __vcui_view_incoming_lock_draw_screen(voice_call_view_data_t *vd) -{ - CALL_UI_DEBUG(".."); - - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - Evas_Object *eo = priv->contents; - vcui_app_call_data_t *ad = vd->app_data; - - priv->now_data = _vcui_doc_get_recent_mt(); - if (priv->now_data == NULL) { - CALL_UI_DEBUG("call data is null"); - return; - } - if (priv->now_data->mo_mt_status != CALL_INCOMING) { - CALL_UI_DEBUG("it is not call_incoming."); - return; - } - - /* call image */ - if (strcmp((char *)priv->now_data->call_file_path, NOIMG_ICON) == 0) { - _vcui_show_wallpaper_image(priv->contents); - } else { - CALL_UI_DEBUG("there is caller image."); - _vcui_show_wallpaper_image(priv->contents); - priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, priv->now_data->call_file_path); - } - - /* call name (if nothing, call number) */ - if (strlen((char *)priv->now_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_num); - } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_display); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)priv->now_data->call_num); - } - - __vcui_view_incoming_lock_create_button_accept(vd); - __vcui_view_incoming_lock_create_button_reject(vd); - - ad->beffect_needed = EINA_TRUE; - - evas_object_show(eo); - -} - -static Evas_Object *__vcui_view_incoming_lock_create_contents(void *data) -{ - if (data == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - Evas_Object *eo; - - /* load edje */ - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_MTLOCK); - if (eo == NULL) - return NULL; - - return eo; -} - -static Evas_Object *__vcui_view_incoming_lock_create_layout_main(Evas_Object *parent) -{ - if (parent == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - - Evas_Object *ly; - ly = elm_layout_add(parent); - retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); - - elm_layout_theme_set(ly, "standard", "window", "integration"); - evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(parent, ly); - - edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); - edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); - evas_object_show(ly); - - return ly; -} - -static int __vcui_view_incoming_lock_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) -{ - CALL_UI_DEBUG("mt-lock view create!!"); - - vcui_app_call_data_t *ad = view_data->app_data; - incoming_lock_view_priv_t *priv = view_data->priv; - - if (!view_data->layout) { - view_data->layout = __vcui_view_incoming_lock_create_layout_main(ad->win_main); - if (view_data->layout == NULL) { - CALL_UI_DEBUG("ERROR"); - return VC_ERROR; - } - priv->contents = __vcui_view_incoming_lock_create_contents(view_data); - elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); - - evas_object_name_set(priv->contents, "INCOMINGLOCKVIEW"); - CALL_UI_DEBUG("[========== INCOMINGLOCKVIEW: priv->contents Addr : [%p] ==========]", priv->contents); - - } - - __vcui_view_incoming_lock_onshow(view_data); - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_lock_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) -{ - CALL_UI_DEBUG("mt-lock view update!!"); - - __vcui_view_incoming_lock_onshow(view_data); - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_lock_onhide(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("mt-lock view hide!!"); - - evas_object_hide(view_data->layout); - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_lock_onshow(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("mt-lock view show!!"); - vcui_app_call_data_t *ad = _vcui_get_app_data(); - int result = 0; - - __vcui_view_incoming_lock_draw_screen(view_data); - - evas_object_hide(view_data->layout); - evas_object_show(view_data->layout); - _vcui_app_win_set_noti_type(EINA_TRUE); - - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_lock_ondestroy(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("mt-lock view destroy!!"); - - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - voice_call_view_data_t *vd = ad->view_st[VIEW_INCOMING_LOCK_VIEW]; - incoming_lock_view_priv_t *priv = (incoming_lock_view_priv_t *)vd->priv; - - if (_vcui_is_idle_lock() == CALL_LOCK) - _vcui_app_win_set_noti_type(EINA_TRUE); - else - _vcui_app_win_set_noti_type(EINA_FALSE); - - ad->bmute_ringtone = EINA_FALSE; - if (priv != NULL) { - if (priv->lock_accept) { - evas_object_del(priv->lock_accept); - priv->lock_accept = NULL; - } - if (priv->lock_reject) { - evas_object_del(priv->lock_reject); - priv->lock_reject = NULL; - } - if (priv->contents) { - evas_object_del(priv->contents); - priv->contents = NULL; - } - - free(priv); - priv = NULL; - } - - if (vd->layout != NULL) { - evas_object_hide(vd->layout); - evas_object_del(vd->layout); - vd->layout = NULL; - } - - ad->view_st[VIEW_INCOMING_LOCK_VIEW] = NULL; - - _vcui_cache_flush(); - - return VC_NO_ERROR; -} diff --git a/ui/vcui-view-incoming.c b/ui/vcui-view-incoming.c deleted file mode 100755 index bd924b5..0000000 --- a/ui/vcui-view-incoming.c +++ /dev/null @@ -1,350 +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. - */ - - -#include "vcui-application.h" -#include "vcui-view-incoming.h" -#include "vcui-view-elements.h" - -static int __vcui_view_incoming_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); -static int __vcui_view_incoming_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); -static int __vcui_view_incoming_onhide(voice_call_view_data_t *view_data); -static int __vcui_view_incoming_onshow(voice_call_view_data_t *view_data); -static int __vcui_view_incoming_destroy(voice_call_view_data_t *view_data); - -static voice_call_view_data_t s_view = { - .type = VIEW_INCOMING_VIEW, - .app_data = NULL, - .layout = NULL, - .onCreate = __vcui_view_incoming_oncreate, - .onUpdate = __vcui_view_incoming_onupdate, - .onHide = __vcui_view_incoming_onhide, - .onShow = __vcui_view_incoming_onshow, - .onDestroy = __vcui_view_incoming_destroy, - .priv = NULL, -}; - -voice_call_view_data_t *_vcui_view_incoming_new(vcui_app_call_data_t *ad) -{ - - s_view.app_data = ad; - s_view.priv = calloc(1, sizeof(incoming_view_priv_t)); - - if (!s_view.priv) { - CALL_UI_DEBUG("ERROR!!!!!!!!!!! "); - } - - return &s_view; -} - -static void __vcui_view_incoming_clear_button(Evas_Object *eo) -{ - CALL_UI_DEBUG(".."); - Evas_Object *sw; - sw = edje_object_part_swallow_get(_EDJ(eo), "btn_accept"); - if (sw) { - edje_object_part_unswallow(_EDJ(eo), sw); - evas_object_del(sw); - } - sw = edje_object_part_swallow_get(_EDJ(eo), "btn_reject"); - if (sw) { - edje_object_part_unswallow(_EDJ(eo), sw); - evas_object_del(sw); - } - sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming1"); - if (sw) { - edje_object_part_unswallow(_EDJ(eo), sw); - evas_object_del(sw); - } - sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming2"); - if (sw) { - edje_object_part_unswallow(_EDJ(eo), sw); - evas_object_del(sw); - } - sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming3"); - if (sw) { - edje_object_part_unswallow(_EDJ(eo), sw); - evas_object_del(sw); - } - sw = edje_object_part_swallow_get(_EDJ(eo), "btn_incoming4"); - if (sw) { - edje_object_part_unswallow(_EDJ(eo), sw); - evas_object_del(sw); - } -} - -static void __vcui_view_incoming_draw_screen(Evas_Object *eo, void *data) -{ - CALL_UI_DEBUG(".."); - - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incoming_view_priv_t *priv = (incoming_view_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - int hold_cnt = 0; - int active_cnt = 0; - - /* ============ Check valid Evas Object ============= */ - int valid = 0; - valid = _vcui_check_valid_eo(priv->contents, "INCOMINGVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== INCOMINGVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - /* ============ Check valid Evas Object ============= */ - - if (strcmp((char *)priv->now_data->call_file_path, NOIMG_ICON) == 0) { - _vcui_show_wallpaper_image(priv->contents); - _vcui_show_calling_name_bg(priv->contents); - } else { - CALL_UI_DEBUG("there is caller image."); - _vcui_show_wallpaper_image(priv->contents); - _vcui_show_calling_name_bg(priv->contents); - priv->ic = _vcui_show_contact_image(priv->contents, vd->app_data->win_main, priv->now_data->call_file_path); - } - - /* call name (if nothing, call number) */ - if (strlen((char *)priv->now_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_num); - } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name", (char *)priv->now_data->call_display); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", (char *)priv->now_data->call_num); - } - - active_cnt = _vcui_doc_get_count_unhold(); - hold_cnt = _vcui_doc_get_count_hold(); - CALL_UI_DEBUG("unhold:[%d], hold:[%d]",active_cnt, hold_cnt ); - __vcui_view_incoming_clear_button(priv->contents); /* to change 2nd incoming call view -> normal incoming call view. */ - if (active_cnt == 0) { /* no active call - single mt call or 2nd call(1hold) */ - CALL_UI_DEBUG("normal incoming call"); - - _vcui_create_button_accept(vd); - _vcui_create_button_reject(vd); - - ad->beffect_needed = EINA_TRUE; - } else if (hold_cnt == 0) { /* active call & no hold call - 2nd call(1active) */ - CALL_UI_DEBUG("2nd incoming call-1"); - char text[256] = { 0, }; - _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming3"); - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_BODY_HOLD_ACTIVE_CALL_ABB"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_hold_and_accept(vd, text); - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_and_accept(vd, text); - } else if (active_cnt == 1 && hold_cnt == 1) { /* 1active & 1hold */ - CALL_UI_DEBUG("2nd incoming call - 1ACT & 1HLD"); - char text[256] = { 0, }; - _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming1"); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_active_and_accept(vd, text); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_HELD_CALL"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_hold_and_accept(vd, text); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_ALL_CALLS"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_all_and_accept(vd, text); - } else if (active_cnt >= 1 && hold_cnt == 1) { /* 1+active & 1hold */ - CALL_UI_DEBUG("2nd incoming call - [1+]ACT & 1HLD"); - char text[256] = { 0, }; - _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming1"); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s(%d) + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), active_cnt, _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_active_and_accept(vd, text); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_HELD_CALL"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_hold_and_accept(vd, text); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_ALL_CALLS"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_all_and_accept(vd, text); - } else if (active_cnt == 1 && hold_cnt >= 1) { /* 1active & 1+hold */ - CALL_UI_DEBUG("2nd incoming call - 1ACT & [1+]HLD"); - char text[256] = { 0, }; - _vcui_create_button_second_incoming_reject(vd, _("IDS_CALL_BUTTON_REJECT"), "btn_incoming1"); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_POP_END_ACTIVE_CALL"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_active_and_accept(vd, text); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s(%d) + %s", _("IDS_CALL_OPT_END_HELD_CALL"), hold_cnt, _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_hold_and_accept(vd, text); - - memset(text, 0x00, 256); - snprintf(text, 256, "%s + %s", _("IDS_CALL_OPT_END_ALL_CALLS"), _("IDS_CALL_BUTTON_ACCEPT")); - _vcui_create_button_second_incoming_end_all_and_accept(vd, text); - } - CALL_UI_DEBUG("unhold:[%d], hold:[%d]", active_cnt, hold_cnt); - - evas_object_show(eo); -} - -static Evas_Object *__vcui_view_incoming_create_contents(void *data) -{ - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - Evas_Object *eo = NULL; - - /* load edje */ - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_MTVIEW); - if (eo == NULL) - return NULL; - - return eo; -} - -static Evas_Object *__vcui_view_incoming_create_layout_main(Evas_Object *parent) -{ - if (parent == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - - Evas_Object *ly; - ly = elm_layout_add(parent); - retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); - - elm_layout_theme_set(ly, "standard", "window", "integration"); - evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(parent, ly); - - edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); - edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); - evas_object_show(ly); - - return ly; -} - -static int __vcui_view_incoming_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) -{ - CALL_UI_DEBUG("incoming view create!!"); - - vcui_app_call_data_t *ad = view_data->app_data; - incoming_view_priv_t *priv = view_data->priv; - - if (!view_data->layout) { - - view_data->layout = __vcui_view_incoming_create_layout_main(ad->win_main); - if (view_data->layout == NULL) { - CALL_UI_DEBUG("ERROR"); - return VC_ERROR; - } - - priv->contents = __vcui_view_incoming_create_contents(view_data); - elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); - - evas_object_name_set(priv->contents, "INCOMINGVIEW"); - CALL_UI_DEBUG("[========== INCOMINGVIEW: priv->contents Addr : [%p] ==========]", priv->contents); - - } - - __vcui_view_incoming_onshow(view_data); - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) -{ - CALL_UI_DEBUG("incoming view update"); - incoming_view_priv_t *priv = view_data->priv; - if (priv->bdont_refresh == EINA_TRUE) { - return VC_NO_ERROR; - } - priv->bselected_btn = EINA_FALSE; - __vcui_view_incoming_onshow(view_data); - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_onhide(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("incoming view hide"); - - int valid = 0; - incoming_view_priv_t *priv = (incoming_view_priv_t *)view_data->priv; - valid = _vcui_check_valid_eo(priv->contents, "INCOMINGVIEW"); - - if (valid == -1) { - CALL_UI_DEBUG("[========== INCOMINGVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - } - - evas_object_hide(view_data->layout); - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_onshow(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("incoming view show"); - vcui_app_call_data_t *ad = _vcui_get_app_data(); - int result = 0; - - incoming_view_priv_t *priv = view_data->priv; - priv->now_data = _vcui_doc_get_recent_mt(); - if (priv->now_data == NULL) { - CALL_UI_DEBUG("call data is null"); - return VC_ERROR; - } - - __vcui_view_incoming_draw_screen(priv->contents, view_data); - - evas_object_hide(view_data->layout); - evas_object_show(view_data->layout); - - _vcui_app_win_set_noti_type(EINA_TRUE); - - return VC_NO_ERROR; -} - -static int __vcui_view_incoming_destroy(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("incoming view destroy"); - - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - voice_call_view_data_t *vd = ad->view_st[VIEW_INCOMING_VIEW]; - incoming_view_priv_t *priv = (incoming_view_priv_t *)vd->priv; - - if (_vcui_is_idle_lock() == CALL_LOCK) - _vcui_app_win_set_noti_type(EINA_TRUE); - else - _vcui_app_win_set_noti_type(EINA_FALSE); - - ad->bmute_ringtone = EINA_FALSE; - - if (priv != NULL) { - if (priv->contents) { - evas_object_del(priv->contents); - priv->contents = NULL; - } - - free(priv); - priv = NULL; - } - - if (vd->layout != NULL) { - evas_object_hide(vd->layout); - evas_object_del(vd->layout); - vd->layout = NULL; - } - - ad->view_st[VIEW_INCOMING_VIEW] = NULL; - _vcui_cache_flush(); - - return VC_NO_ERROR; -} diff --git a/ui/vcui-view-keypad.c b/ui/vcui-view-keypad.c deleted file mode 100755 index c2294f6..0000000 --- a/ui/vcui-view-keypad.c +++ /dev/null @@ -1,438 +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. - */ - - -#include "vcui-application.h" -#include "vcui-view-keypad.h" -#include "vcui-view-common.h" - -static int _vcui_view_keypad_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); -static int _vcui_view_keypad_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); -static int _vcui_view_keypad_onhide(voice_call_view_data_t *view_data); -static int _vcui_view_keypad_onshow(voice_call_view_data_t *view_data); -static int _vcui_view_keypad_ondestroy(voice_call_view_data_t *view_data); -static Evas_Object *__vcui_view_keypad_create_single_line_scrolled_entry(void *content); - -static voice_call_view_data_t s_view = { - .type = VIEW_INCALL_KEYPAD_VIEW, - .app_data = NULL, - .layout = NULL, - .onCreate = _vcui_view_keypad_oncreate, - .onUpdate = _vcui_view_keypad_onupdate, - .onHide = _vcui_view_keypad_onhide, - .onShow = _vcui_view_keypad_onshow, - .onDestroy = _vcui_view_keypad_ondestroy, - .priv = NULL, -}; - -static void __vcui_view_keypad_on_keypad_down(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - CALL_UI_DEBUG("source(%s)",source); - - char before_dest[KEYPAD_STR_DEFINE_OPEN_SIZE+KEYPAD_ENTRY_DISP_DATA_SIZE+1] = { 0, }; - char *sub_buffer_pointer = NULL; - char entry_dest[KEYPAD_ENTRY_SET_DATA_SIZE+1] = { 0, }; - char *keypad_source; - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_view_keypad_priv_t *priv = NULL; - - if (NULL == vd) { - CALL_UI_DEBUG("\n data is null \n"); - return; - } - priv = (vcui_view_keypad_priv_t *)vd->priv; - - if (strlen(source) >= KEYPAD_ENTRY_DISP_DATA_SIZE) { - CALL_UI_DEBUG("strlen(source) >= DATA_BUF_SIZE(%d)",KEYPAD_ENTRY_DISP_DATA_SIZE); - return; - } - - if (strcmp(source, "star") == 0) { - keypad_source = "*"; - } else if (strcmp(source, "sharp") == 0) { - keypad_source = "#"; - } else { - keypad_source = (char *)source; - } - - _vcui_engine_interface_send_dtmf_number(keypad_source[0]); - - if (strlen(priv->entry_disp_data) == KEYPAD_ENTRY_DISP_DATA_SIZE) { - sub_buffer_pointer = &priv->entry_disp_data[1]; - - snprintf(priv->entry_disp_data, sizeof(priv->entry_disp_data), - "%s", sub_buffer_pointer); - CALL_UI_DEBUG("priv->entry_disp_data after change [%s]", priv->entry_disp_data); - } - - priv->entry_disp_data[priv->data_len] = keypad_source[0]; - if(priv->data_len < (KEYPAD_ENTRY_DISP_DATA_SIZE-1)) { - priv->data_len++; - } - - snprintf(before_dest, sizeof(before_dest), - "%s", - MAX_DIAL_NUMBER_FONT_SIZE, priv->entry_disp_data); - - snprintf(entry_dest, sizeof(entry_dest), - "%s", - before_dest); - - CALL_UI_DEBUG("entry_dest [%s]", priv->entry_disp_data); - elm_entry_entry_set(priv->entry, entry_dest); - elm_entry_cursor_end_set(priv->entry); -} - -static void __vcui_view_keypad_hide_btn_effect_done(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - CALL_UI_DEBUG(".."); - - _vcui_view_auto_change(); -} - -static void __vcui_view_keypad_hide_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv; - - edje_object_signal_emit(_EDJ(priv->contents), "HIDE", "KEYPADBTN"); - edje_object_signal_callback_add(_EDJ(priv->contents), "DONE", "HIDEKEYPAD", __vcui_view_keypad_hide_btn_effect_done, data); -} - -static void __vcui_view_keypad_end_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - - if (_vcui_doc_get_count_unhold() == 1) { - _vcui_engine_end_call(); - } else if (_vcui_doc_get_count_unhold() > 1) { - _vcui_engine_end_active_calls(); - } else if (_vcui_doc_get_count_hold() == 1) { - _vcui_engine_end_call(); - } else if (_vcui_doc_get_count_hold() > 1) { - _vcui_engine_end_held_calls(); - } else { - CALL_UI_DEBUG("call data is null"); - return; - } - -} - -voice_call_view_data_t *_vcui_view_keypad_new(vcui_app_call_data_t *ad) -{ - - s_view.app_data = ad; - s_view.priv = calloc(1, sizeof(vcui_view_keypad_priv_t)); - - if (!s_view.priv) { - CALL_UI_DEBUG("ERROR!!!!!!!!!!!"); - } - - return &s_view; -} - -static Evas_Object *__vcui_view_keypad_create_hide_button(void *data) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv; - layout = priv->contents; - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_hide"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_hide", btn); - elm_object_style_set(btn, "text_only/style_keypad_hide_button"); - elm_object_text_set(btn, _("IDS_CALL_BUTTON2_HIDE_KEYPAD")); - evas_object_smart_callback_add(btn, "clicked", __vcui_view_keypad_hide_btn_cb, vd); - - return layout; -} - -static Evas_Object *__vcui_view_keypad_create_end_call(void *data) -{ - Evas_Object *btn; - Evas_Object *layout; - Evas_Object *sw; - - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv; - layout = priv->contents; - - sw = edje_object_part_swallow_get(_EDJ(layout), "btn_end"); - if (sw) { - edje_object_part_unswallow(_EDJ(layout), sw); - evas_object_del(sw); - } - - btn = elm_button_add(layout); - elm_object_part_content_set(layout, "btn_end", btn); - elm_object_style_set(btn, "text_only/style_keypad_end_button"); - elm_object_text_set(btn, _("IDS_CALL_SK3_END_CALL")); - evas_object_smart_callback_add(btn, "clicked", __vcui_view_keypad_end_btn_cb, vd); - - return layout; -} - -static Evas_Object *__vcui_view_keypad_create_contents(void *data) -{ - if (data == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - - Evas_Object *eo; - - /* load edje */ - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, GRP_KEYPAD); - if (eo == NULL) - return NULL; - - return eo; -} - -static Evas_Object *__vcui_view_keypad_create_layout_main(Evas_Object *parent) -{ - if (parent == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - Evas_Object *ly; - - ly = elm_layout_add(parent); - retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); - - elm_layout_theme_set(ly, "standard", "window", "integration"); - evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(parent, ly); - - edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); - edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); - evas_object_show(ly); - - return ly; -} - -static void __vcui_view_keypad_draw_keypad_screen(Evas_Object *eo, void *data) -{ - CALL_UI_DEBUG(".."); - - int valid = 0; - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv; - - _vcui_show_wallpaper_image(priv->contents); - - if (_vcui_doc_get_count_unhold() == 1) { - priv->now_data = _vcui_doc_get_last_status(CALL_UNHOLD); - if (NULL == priv->now_data) { - CALL_UI_DEBUG("priv->now_data is NULL \n"); - return; - } - if (strlen((char *)priv->now_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_num); - } else { - edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_display); - } - } else if (_vcui_doc_get_count_unhold() > 1) { - priv->now_data = _vcui_doc_get_last_status(CALL_UNHOLD); - edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", _("IDS_CALL_OPT_CONFERENCE_CALL")); - } else if (_vcui_doc_get_count_hold() == 1) { - priv->now_data = _vcui_doc_get_last_status(CALL_HOLD); - if (NULL == priv->now_data) { - CALL_UI_DEBUG("priv->now_data is NULL \n"); - return; - } - - if (strlen((char *)priv->now_data->call_display) == 0) { - edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_num); - } else { - edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", (char *)priv->now_data->call_display); - } - } else if (_vcui_doc_get_count_hold() > 1) { - priv->now_data = _vcui_doc_get_last_status(CALL_HOLD); - edje_object_part_text_set(_EDJ(priv->contents), "txt_call_name", _("IDS_CALL_OPT_CONFERENCE_CALL")); - } else { - CALL_UI_DEBUG("call data is null"); - return; - } - - valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - return; - } - - if (NULL == priv->now_data) { - CALL_UI_DEBUG("\n priv->now_data is NULL \n"); - return; - } - _vcui_view_common_set_each_time(priv->now_data->start_time); - - __vcui_view_keypad_create_hide_button(vd); - __vcui_view_keypad_create_end_call(vd); - - edje_object_signal_emit(_EDJ(priv->contents), "SHOW", "KEYPADBTN"); - - evas_object_show(priv->contents); - -} - -static int _vcui_view_keypad_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) -{ - CALL_UI_DEBUG("keypad view create!!"); - - vcui_app_call_data_t *ad = view_data->app_data; - vcui_view_keypad_priv_t *priv = view_data->priv; - - if (!view_data->layout) { - /* Create Main Layout */ - view_data->layout = __vcui_view_keypad_create_layout_main(ad->win_main); - if (view_data->layout == NULL) { - CALL_UI_DEBUG("ERROR"); - return VC_ERROR; - } - - /* Create Contents */ - priv->contents = __vcui_view_keypad_create_contents(view_data); - elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); - - priv->entry = __vcui_view_keypad_create_single_line_scrolled_entry(priv->contents); - memset(priv->entry_disp_data, 0x0, sizeof(priv->entry_disp_data)); - priv->data_len = 0; - - edje_object_signal_callback_add(_EDJ(priv->contents), - "pad_down", "*", - __vcui_view_keypad_on_keypad_down, - view_data); - - edje_object_part_swallow(_EDJ(priv->contents), "textblock/textarea", priv->entry); - evas_object_name_set(priv->contents, "KEYPADVIEW"); - CALL_UI_DEBUG("[========== KEYPADVIEW: priv->contents Addr : [%p] ==========]", priv->contents); - } - - _vcui_view_keypad_onshow(view_data); - return VC_NO_ERROR; -} - -static int _vcui_view_keypad_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) -{ - CALL_UI_DEBUG("keypad view update!!"); - - _vcui_view_keypad_onshow(view_data); - return VC_NO_ERROR; -} - -static int _vcui_view_keypad_onhide(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("keypad view hide!!"); - int valid = 0; - vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)view_data->priv; - - valid = _vcui_check_valid_eo(priv->contents, "KEYPADVIEW"); - if (valid == -1) { - CALL_UI_DEBUG("[========== KEYPADVIEW : Invalid Evas Object, priv->contents : %p ==========]", priv->contents); - } - - evas_object_hide(view_data->layout); - return VC_NO_ERROR; -} - -static int _vcui_view_keypad_onshow(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("keypad view show!!"); - - vcui_view_keypad_priv_t *priv = view_data->priv; - - __vcui_view_keypad_draw_keypad_screen(priv->contents, view_data); - - evas_object_hide(view_data->layout); - evas_object_show(view_data->layout); - elm_object_focus_set(priv->entry, EINA_TRUE); - return VC_NO_ERROR; -} - -static int _vcui_view_keypad_ondestroy(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("keypad view destroy!!"); - - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_KEYPAD_VIEW]; - vcui_view_keypad_priv_t *priv = (vcui_view_keypad_priv_t *)vd->priv; - - if (priv != NULL) { - if (priv->contents) { - evas_object_del(priv->contents); - priv->contents = NULL; - } - - free(priv); - priv = NULL; - } - - if (vd->layout != NULL) { - evas_object_hide(vd->layout); - evas_object_del(vd->layout); - vd->layout = NULL; - } - - ad->view_st[VIEW_INCALL_KEYPAD_VIEW] = NULL; - - _vcui_cache_flush(); - - return VC_NO_ERROR; -} - -static Evas_Object *__vcui_view_keypad_create_single_line_scrolled_entry(void *content) -{ - Evas_Object *en; - - if (content == NULL) { - CALL_UI_DEBUG("content is NULL!"); - return NULL; - } - - en = elm_entry_add(content); - elm_entry_scrollable_set(en, EINA_TRUE); - - elm_entry_select_all(en); - elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, - ELM_SCROLLER_POLICY_AUTO); - - elm_entry_bounce_set(en, EINA_FALSE, EINA_FALSE); - elm_entry_line_wrap_set(en, ELM_WRAP_WORD); - elm_entry_input_panel_enabled_set(en, EINA_FALSE); - elm_entry_single_line_set(en, EINA_TRUE); - elm_entry_cursor_end_set(en); - evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); - - evas_object_show(en); - - return en; -} diff --git a/ui/vcui-view-layout-hd.h b/ui/vcui-view-layout-hd.h deleted file mode 100755 index 557ddf0..0000000 --- a/ui/vcui-view-layout-hd.h +++ /dev/null @@ -1,754 +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 __VCUI_VIEW_LAYOUT_HD__ -#define __VCUI_VIEW_LAYOUT_HD__ - -#define COLOR_DEFAULT 0 0 0 255 -#define COLOR_BG_ALPHA 0 0 0 0 -#define COLOR_BG_FOR_HELD_CALL_DIM 0 0 0 150 - -/*#define BTN_EDGE_W 9*/ - -/* - * HD GUI Widget Dimensions - * In Portrait mode - */ -#define MAIN_SCREEN_W 720 -#define MAIN_SCREEN_H 1280 - -#define INDICATOR_HEIGHT 50 -#define NAVIFRAME_TITLE_HEIGHT 100 - -#define MAIN_NAVIFRAME_W MAIN_SCREEN_W -#define MAIN_NAVIFRAME_H (MAIN_SCREEN_H-INDICATOR_HEIGHT-NAVIFRAME_TITLE_HEIGHT) -#define NAVIFRAME_T_PAD 50 - -#define QP_WIN_W MAIN_SCREEN_W -#define QP_WIN_H 166 /*approx*/ - -#define DIALING_STATUS_L_PAD 0 -#define DIALING_STATUS_WIDTH MAIN_SCREEN_W -#define DIALING_STATUS_T_PAD 687 -#define DIALING_STATUS_HEIGHT 52 - -#define CALL_NAME_L_PAD 20 -#define CALL_NAME_WIDTH 680 -#define CALL_NAME_T_PAD 83 -#define CALL_NAME_HEIGHT 80 - -#define CALL_NUMBER_T_GAP 6 - -#define CALL_NUMBER_L_PAD CALL_NAME_L_PAD -#define CALL_NUMBER_WIDTH CALL_NAME_WIDTH -#define CALL_NUMBER_T_PAD (CALL_NAME_T_PAD+CALL_NAME_HEIGHT+CALL_NUMBER_T_GAP) -#define CALL_NUMBER_HEIGHT 52 - -#define CALLER_ID_L_PAD 208 -#define CALLER_ID_WIDTH 304 -#define CALLER_ID_T_PAD 268 -#define CALLER_ID_HEIGHT 304 - -#define BACKGROUND_CID_L_PAD 0 -#define BACKGROUND_CID_WIDTH MAIN_SCREEN_W -#define BACKGROUND_CID_T_PAD 0 -#define BACKGROUND_CID_HEIGHT MAIN_SCREEN_H - -#define MT_CALLING_NAME_BG_WIDTH MAIN_SCREEN_W -#define MT_CALLING_NAME_BG_HEIGHT 590 - -#define ACCEPT_BTN_L_PAD 40 -#define ACCEPT_BTN_WIDTH 300 -#define ACCEPT_BTN_T_PAD 992 -#define ACCEPT_BTN_HEIGHT 112 - -#define REJECT_BTN_L_GAP 40 - -#define REJECT_BTN_L_PAD (ACCEPT_BTN_L_PAD+ACCEPT_BTN_WIDTH+REJECT_BTN_L_GAP) -#define REJECT_BTN_WIDTH ACCEPT_BTN_WIDTH -#define REJECT_BTN_T_PAD ACCEPT_BTN_T_PAD -#define REJECT_BTN_HEIGHT ACCEPT_BTN_HEIGHT - -#define REJECT_W_MSG_BTN_T_GAP 40 - -#define REJECT_W_MSG_BTN_L_PAD ACCEPT_BTN_L_PAD -#define REJECT_W_MSG_BTN_WIDTH 640 -#define REJECT_W_MSG_BTN_T_PAD (ACCEPT_BTN_T_PAD+ACCEPT_BTN_HEIGHT+REJECT_W_MSG_BTN_T_GAP) -#define REJECT_W_MSG_BTN_HEIGHT 90 - -#define INCALL_HOLD_BTN_L_PAD 40 -#define INCALL_HOLD_BTN_WIDTH 108 /*approx*/ -#define INCALL_HOLD_BTN_T_PAD 670 /*approx*/ -#define INCALL_HOLD_BTN_HEIGHT 86 /*approx*/ - -#define INCALL_TIMER_L_PAD 40 -#define INCALL_TIMER_WIDTH 640 -#define INCALL_TIMER_T_PAD 687 -#define INCALL_TIMER_HEIGHT 52 - -#define INCALL_SHARE_BG_T_PAD 584 /*approx*/ -#define INCALL_SHARE_BG_HEIGHT 654 /*approx*/ - -#define KEYPAD_TIMER_L_PAD 40 -#define KEYPAD_TIMER_WIDTH 640 -#define KEYPAD_TIMER_T_PAD 384 -#define KEYPAD_TIMER_HEIGHT 52 - -#define KEYPAD_ENTRY_TXT_L_PAD KEYPAD_TIMER_L_PAD -#define KEYPAD_ENTRY_TXT_WIDTH KEYPAD_TIMER_WIDTH -#define KEYPAD_ENTRY_TXT_T_PAD 90 -#define KEYPAD_ENTRY_TXT_HEIGHT 114 - -#define KEYPAD_BTNS_T_PAD 461 -#define KEYPAD_BTNS_WIDTH MAIN_SCREEN_W -#define KEYPAD_BTNS_HEIGHT 620 - -#define KEYPAD_HIDE_BTN_L_PAD KEYPAD_TIMER_L_PAD -#define KEYPAD_HIDE_BTN_WIDTH 300 -#define KEYPAD_HIDE_BTN_T_PAD 1140 -#define KEYPAD_HIDE_BTN_HEIGHT 112 - -#define KEYPAD_BTN_GAP 40 -#define KEYPAD_END_BTN_L_PAD (KEYPAD_HIDE_BTN_L_PAD+KEYPAD_HIDE_BTN_WIDTH+KEYPAD_BTN_GAP) -#define KEYPAD_END_BTN_WIDTH KEYPAD_HIDE_BTN_WIDTH - -#define SPLIT_CID1_L_PAD 56 -#define SPLIT_CID1_WIDTH 304 -#define SPLIT_CID1_T_PAD 219 -#define SPLIT_CID1_HEIGHT 304 - -#define SPLIT_PAUSE_L_PAD (SPLIT_CID1_L_PAD+8) -#define SPLIT_PAUSE_WIDTH 62 -#define SPLIT_PAUSE_HEIGHT 62 -#define SPLIT_PAUSE_T_PAD (SPLIT_CID1_T_PAD+SPLIT_CID1_HEIGHT-8-SPLIT_PAUSE_HEIGHT) - -#define SPLIT_CID2_L_PAD 456 -#define SPLIT_CID2_WIDTH 208 -#define SPLIT_CID2_T_PAD 267 -#define SPLIT_CID2_HEIGHT 208 - -#define SPLIT_PLAY_L_PAD (SPLIT_CID2_L_PAD+12) -#define SPLIT_PLAY_WIDTH 40 -#define SPLIT_PLAY_HEIGHT 40 -#define SPLIT_PLAY_T_PAD (SPLIT_CID2_T_PAD+SPLIT_CID2_HEIGHT-8-SPLIT_PLAY_HEIGHT) - -#define SPLIT_NAME1_L_PAD 38 -#define SPLIT_NAME1_WIDTH 364 -#define SPLIT_NAME1_T_PAD 145 -#define SPLIT_NAME1_HEIGHT 58 - -#define SPLIT_NAME2_L_PAD (SPLIT_NAME1_L_PAD+SPLIT_NAME1_WIDTH+22) -#define SPLIT_NAME2_WIDTH 258 -#define SPLIT_NAME2_T_PAD 217 -#define SPLIT_NAME2_HEIGHT 40 - -#define SPLIT_TIMER_TXT_T_PAD 549 -#define SPLIT_TIMER_TXT_HEIGHT 46 - -#define SPLIT_MORE_BTN_WIDTH 40 -#define SPLIT_MORE_BTN_L_PAD (SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) -#define SPLIT_ONHOLD_TXT_W_ICON_WIDTH (SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) -#define SPLIT_ONHOLD_TXT_T_PAD 492 -#define SPLIT_ONHOLD_TXT_HEIGHT 40 - -#define SPLIT_SWAP_CID1_L_PAD 70 -#define SPLIT_SWAP_CID1_WIDTH 208 - -#define SPLIT_SWAP_PLAY_L_PAD (SPLIT_SWAP_CID1_L_PAD+12) -#define SPLIT_SWAP_PLAY_WIDTH 40 - -#define SPLIT_SWAP_CID2_L_PAD 336 -#define SPLIT_SWAP_CID2_WIDTH 304 - -#define SPLIT_SWAP_PAUSE_L_PAD (SPLIT_SWAP_CID2_L_PAD+8) -#define SPLIT_SWAP_PAUSE_WIDTH 62 - -#define SPLIT_SWAP_NAME1_L_PAD 38 -#define SPLIT_SWAP_NAME1_WIDTH 258 - -#define SPLIT_SWAP_NAME2_L_PAD (SPLIT_SWAP_NAME1_L_PAD+SPLIT_SWAP_NAME1_WIDTH+22) -#define SPLIT_SWAP_NAME2_WIDTH 364 - -#define SPLIT_SWAP_MORE_BTN_WIDTH 60 -#define SPLIT_SWAP_MORE_BTN_L_PAD (SPLIT_SWAP_CID2_L_PAD+SPLIT_SWAP_CID2_WIDTH-SPLIT_SWAP_MORE_BTN_WIDTH) -#define SPLIT_SWAP_MORE_BTN_T_PAD (SPLIT_TIMER_TXT_T_PAD-7) -#define SPLIT_SWAP_MORE_BTN_HEIGHT 60 -#define SPLIT_TIMER_TXT_W_ICON_WIDTH (SPLIT_SWAP_CID2_WIDTH-SPLIT_SWAP_MORE_BTN_WIDTH) - -#define CONF_LIST_T_PAD 182 -#define CONF_LIST_HEIGHT 566 - -#define CONF_HOLD_WIDTH 110 -#define CONF_HOLD_L_PAD (MAIN_SCREEN_W-40-CONF_HOLD_WIDTH) -#define CONF_HOLD_T_PAD 866 -#define CONF_HOLD_HEIGHT 76 - -#define CONF_TIMER_T_PAD 878 -#define CONF_TIMER_HEIGHT 52 - -#define CONF_CALL_BIG_END_T_PAD 1026 - -#define REJ_MSG_NEW_BTN_L_PAD 40 /*approx*/ -#define REJ_MSG_NEW_BTN_WIDTH 640 /*approx*/ -#define REJ_MSG_NEW_BTN_T_PAD 120 /*approx*/ -#define REJ_MSG_NEW_BTN_HEIGHT 128 /*approx*/ - -#define REJ_MSG_LIST_T_PAD 32 /*approx*/ -#define REJ_MSG_LIST_HEIGHT 1096 /*approx*/ - -#define SIX_BTN_COL1_L_PAD 40 -#define SIX_BTN_COL1_WIDTH 200 -#define SIX_BTN_COL2_L_PAD (SIX_BTN_COL1_L_PAD+SIX_BTN_COL1_WIDTH+20) -#define SIX_BTN_COL3_L_PAD (SIX_BTN_COL2_L_PAD+SIX_BTN_COL1_WIDTH+20) -#define SIX_BTN_ROW1_T_PAD 792 -#define SIX_BTN_ROW1_HEIGHT 140 -#define SIX_BTN_ROW2_T_PAD (SIX_BTN_ROW1_T_PAD+SIX_BTN_ROW1_HEIGHT+20) - -#define CALL_BIG_END_L_PAD 40 -#define CALL_BIG_END_WIDTH 640 -#define CALL_BIG_END_T_PAD 1140 -#define CALL_BIG_END_HEIGHT 112 - -#define INCMG_CALL_BTN1_T_PAD 700 -#define INCMG_CALL_BTN_HEIGHT CALL_BIG_END_HEIGHT -#define INCMG_CALL_BTN2_T_PAD 838 -#define INCMG_CALL_BTN3_T_PAD 976 - -#define VIDEO_BTN_POS1_L_PAD 40 -#define VIDEO_BTN_POS1_WIDTH 300 -#define VIDEO_BTN_POS1_T_PAD 864 -#define VIDEO_BTN_POS1_HEIGHT 112 -#define VIDEO_BTN_POS2_L_PAD VIDEO_BTN_POS1_L_PAD -#define VIDEO_BTN_POS2_WIDTH VIDEO_BTN_POS1_WIDTH -#define VIDEO_BTN_POS2_T_PAD 1002 -#define VIDEO_BTN_POS2_HEIGHT VIDEO_BTN_POS1_HEIGHT - -#define VOICE_BTN_POS1_L_PAD (VIDEO_BTN_POS1_L_PAD+VIDEO_BTN_POS1_WIDTH+40) -#define VOICE_BTN_POS1_WIDTH VIDEO_BTN_POS1_WIDTH - -#define MSG_BTN_POS1_L_PAD VIDEO_BTN_POS1_L_PAD -#define MSG_BTN_POS1_WIDTH 640 -#define MSG_BTN_POS1_T_PAD 1002 -#define MSG_BTN_POS1_HEIGHT VIDEO_BTN_POS1_HEIGHT -#define MSG_BTN_POS2_T_PAD 1140 -#define MSG_BTN_POS2_HEIGHT VIDEO_BTN_POS1_HEIGHT - -#define CONTACT_BTN_POS1_L_PAD VIDEO_BTN_POS1_L_PAD -#define CONTACT_BTN_POS1_WIDTH MSG_BTN_POS1_WIDTH -#define CONTACT_BTN_POS1_T_PAD 1140 -#define CONTACT_BTN_POS1_HEIGHT VIDEO_BTN_POS1_HEIGHT - -#define QP_CID_L_PAD 15 /*approx*/ -#define QP_CID_WIDTH 123 /*approx*/ -#define QP_CID_T_PAD 18 /*approx*/ -#define QP_CID_HEIGHT 130 /*approx*/ - -#define QP_END_BTN_L_PAD 153 /*approx*/ -#define QP_END_BTN_WIDTH 552 /*approx*/ -#define QP_END_BTN_T_PAD 80 /*approx*/ -#define QP_END_BTN_HEIGHT 64 /*approx*/ - -#define QP_NAME_L_PAD 153 /*approx*/ -#define QP_NAME_WIDTH 372 /*approx*/ -#define QP_NAME_T_PAD 13 /*approx*/ -#define QP_NAME_HEIGHT 48 /*approx*/ - -#define QP_TIMER_L_PAD 555 /*approx*/ -/* - * End of HD GUI Widget Dimensions - */ - - -/* - * Relative positions - * In Portrait mode - */ -/* Relative X & Y positions of widgets w.r.t. Full Screen */ -#define REL_W(x) ((x)/MAIN_SCREEN_W) -#define REL_H(y) ((y)/MAIN_SCREEN_H) - -/* Relative X & Y positions of widgets w.r.t. Navi-frame layout */ -/*#define WL_NB_H 94*/ -#define REL_NAVIFRAME_W(x) ((x)/MAIN_NAVIFRAME_W) -#define REL_NAVIFRAME_H(y) ((y)/MAIN_NAVIFRAME_H) - -/* Relative X & Y positions of widgets w.r.t. ACC/REJ ICON layout */ -#define REL_LOCK_W(x) ((x)/483) /*approx*/ -#define REL_LOCK_H(y) ((y)/198) /*approx*/ -/* Relative X & Y positions of widgets w.r.t. REJ-W-MSG ICON layout */ -#define REL_LOCK_MSG_W(x) ((x)/348) /*approx*/ -#define REL_LOCK_MSG_H(y) ((y)/200) /*approx*/ - -/* Relative X & Y positions of widgets w.r.t. Keypad Buttons layout */ -#define REL_KEYPAD_W(x) ((x)/KEYPAD_BTNS_WIDTH) -#define REL_KEYPAD_H(y) ((y)/KEYPAD_BTNS_HEIGHT) -/* - * End of Relative positions - */ - - -/* - * MO/Dialing view & MT/Incoming view - * In Portrait mode - */ -#define DIALLING_STATUS_L REL_W(DIALING_STATUS_L_PAD) -#define DIALLING_STATUS_R REL_W(DIALING_STATUS_L_PAD+DIALING_STATUS_WIDTH) -#define DIALLING_STATUS_T REL_H(DIALING_STATUS_T_PAD) -#define DIALLING_STATUS_B REL_H(DIALING_STATUS_T_PAD+DIALING_STATUS_HEIGHT) - -/* -#define DIALLING_MT_STATUS_L REL_W(123) -#define DIALLING_MT_STATUS_R REL_W(357) -#define DIALLING_MT_STATUS_T REL_H(375) -#define DIALLING_MT_STATUS_B REL_H(407) -*/ - -#define DIALLING_NAME_L REL_W(CALL_NAME_L_PAD) -#define DIALLING_NAME_R REL_W(CALL_NAME_L_PAD+CALL_NAME_WIDTH) -#define DIALLING_NAME_T REL_H(CALL_NAME_T_PAD) -#define DIALLING_NAME_B REL_H(CALL_NAME_T_PAD+CALL_NAME_HEIGHT) - -#define DIALLING_NUMBER_L REL_W(CALL_NUMBER_L_PAD) -#define DIALLING_NUMBER_R REL_W(CALL_NUMBER_L_PAD+CALL_NUMBER_WIDTH) -#define DIALLING_NUMBER_T REL_H(CALL_NUMBER_T_PAD) -#define DIALLING_NUMBER_B REL_H(CALL_NUMBER_T_PAD+CALL_NUMBER_HEIGHT) - -#define DIALLING_CID_L REL_W(CALLER_ID_L_PAD) -#define DIALLING_CID_R REL_W(CALLER_ID_L_PAD+CALLER_ID_WIDTH) -#define DIALLING_CID_T REL_H(CALLER_ID_T_PAD) -#define DIALLING_CID_B REL_H(CALLER_ID_T_PAD+CALLER_ID_HEIGHT) - -#define DIALLING_BACKGROUND_CID_L REL_W(BACKGROUND_CID_L_PAD) -#define DIALLING_BACKGROUND_CID_R REL_W(BACKGROUND_CID_L_PAD+BACKGROUND_CID_WIDTH) -#define DIALLING_BACKGROUND_CID_T REL_H(BACKGROUND_CID_T_PAD) -#define DIALLING_BACKGROUND_CID_B REL_H(BACKGROUND_CID_T_PAD+BACKGROUND_CID_HEIGHT) - -#define MT_CALLING_BG_L REL_W(0) -#define MT_CALLING_BG_R REL_W(0+MT_CALLING_NAME_BG_WIDTH) -#define MT_CALLING_BG_T REL_H(0) -#define MT_CALLING_BG_B REL_H(0+MT_CALLING_NAME_BG_HEIGHT) - -/* accept - MT view */ -#define DIALLING_MT_BTN1_L REL_W(ACCEPT_BTN_L_PAD) -#define DIALLING_MT_BTN1_R REL_W(ACCEPT_BTN_L_PAD+ACCEPT_BTN_WIDTH) -#define DIALLING_MT_BTN1_T REL_H(ACCEPT_BTN_T_PAD) -#define DIALLING_MT_BTN1_B REL_H(ACCEPT_BTN_T_PAD+ACCEPT_BTN_HEIGHT) - -/* reject - MT view */ -#define DIALLING_MT_BTN2_L REL_W(REJECT_BTN_L_PAD) -#define DIALLING_MT_BTN2_R REL_W(REJECT_BTN_L_PAD+REJECT_BTN_WIDTH) -#define DIALLING_MT_BTN2_T REL_H(REJECT_BTN_T_PAD) -#define DIALLING_MT_BTN2_B REL_H(REJECT_BTN_T_PAD+REJECT_BTN_HEIGHT) -/* - * End of MO/Dialing view & MT/Incoming view - */ - - -/* - * MT LOCK View - check - * In Portrait mode - */ -#define INCOMING_LOCK_ACCEPT_BG_L REL_W(-273) -#define INCOMING_LOCK_ACCEPT_BG_R REL_W(210) -#define INCOMING_LOCK_ACCEPT_BG_T REL_H(945) -#define INCOMING_LOCK_ACCEPT_BG_B REL_H(1144) - -#define INCOMING_LOCK_ACCEPT_ICON_L REL_LOCK_W(303) -#define INCOMING_LOCK_ACCEPT_ICON_R REL_LOCK_W(408) -#define INCOMING_LOCK_ACCEPT_ICON_T REL_LOCK_H(37) -#define INCOMING_LOCK_ACCEPT_ICON_B REL_LOCK_H(149) - -#define INCOMING_LOCK_ACCEPT_TEXT_L REL_LOCK_W(45) -#define INCOMING_LOCK_ACCEPT_TEXT_R REL_LOCK_W(273) -#define INCOMING_LOCK_ACCEPT_TEXT_T INCOMING_LOCK_ACCEPT_ICON_T -#define INCOMING_LOCK_ACCEPT_TEXT_B INCOMING_LOCK_ACCEPT_ICON_B - -#define INCOMING_LOCK_REJECT_BG_L REL_W(510) -#define INCOMING_LOCK_REJECT_BG_R REL_W(993) -#define INCOMING_LOCK_REJECT_BG_T INCOMING_LOCK_ACCEPT_BG_T -#define INCOMING_LOCK_REJECT_BG_B INCOMING_LOCK_ACCEPT_BG_B - -#define INCOMING_LOCK_REJECT_ICON_L REL_LOCK_W(75) -#define INCOMING_LOCK_REJECT_ICON_R REL_LOCK_W(180) -#define INCOMING_LOCK_REJECT_ICON_T INCOMING_LOCK_ACCEPT_ICON_T -#define INCOMING_LOCK_REJECT_ICON_B INCOMING_LOCK_ACCEPT_ICON_B - -#define INCOMING_LOCK_REJECT_TEXT_L REL_LOCK_W(195) -#define INCOMING_LOCK_REJECT_TEXT_R REL_LOCK_W(423) -#define INCOMING_LOCK_REJECT_TEXT_T INCOMING_LOCK_REJECT_ICON_T -#define INCOMING_LOCK_REJECT_TEXT_B INCOMING_LOCK_REJECT_ICON_B -/* - * End of MT LOCK View - */ - - -/* - * KEYPAD View - * In Portrait mode - */ -#define INCALL_DIALER_TIMER_L REL_W(KEYPAD_TIMER_L_PAD) -#define INCALL_DIALER_TIMER_R REL_W(KEYPAD_TIMER_L_PAD+KEYPAD_TIMER_WIDTH) -#define INCALL_DIALER_TIMER_T REL_H(KEYPAD_TIMER_T_PAD) -#define INCALL_DIALER_TIMER_B REL_H(KEYPAD_TIMER_T_PAD+KEYPAD_TIMER_HEIGHT) - -#define INCALL_DIALER_NAME_L INCALL_DIALER_TIMER_L -#define INCALL_DIALER_NAME_R INCALL_DIALER_TIMER_R -#define INCALL_DIALER_NAME_T INCALL_DIALER_TIMER_T -#define INCALL_DIALER_NAME_B INCALL_DIALER_TIMER_B - -/* -#define DIALLING_KEYPAD_T_BF REL_H(319) -#define DIALLING_KEYPAD_B_BF REL_H(710) -*/ - -#define DIALLING_KEYPAD_L REL_W(0) -#define DIALLING_KEYPAD_R REL_W(MAIN_SCREEN_W) -#define DIALLING_KEYPAD_T REL_H(KEYPAD_BTNS_T_PAD) -#define DIALLING_KEYPAD_B REL_H(KEYPAD_BTNS_T_PAD+KEYPAD_BTNS_HEIGHT) - -#define DIALLING_ENTRY_TEXT_L REL_W(KEYPAD_ENTRY_TXT_L_PAD) -#define DIALLING_ENTRY_TEXT_R REL_W(KEYPAD_ENTRY_TXT_L_PAD+KEYPAD_ENTRY_TXT_WIDTH) -#define DIALLING_ENTRY_TEXT_T REL_H(KEYPAD_ENTRY_TXT_T_PAD) -#define DIALLING_ENTRY_TEXT_B REL_H(KEYPAD_ENTRY_TXT_T_PAD+KEYPAD_ENTRY_TXT_HEIGHT) - -#define DIALER_BTN1_L REL_W(KEYPAD_HIDE_BTN_L_PAD) -#define DIALER_BTN1_R REL_W(KEYPAD_HIDE_BTN_L_PAD+KEYPAD_HIDE_BTN_WIDTH) -#define DIALER_BTN1_T REL_H(KEYPAD_HIDE_BTN_T_PAD) -#define DIALER_BTN1_B REL_H(KEYPAD_HIDE_BTN_T_PAD+KEYPAD_HIDE_BTN_HEIGHT) - -#define DIALER_BTN2_L REL_W(KEYPAD_END_BTN_L_PAD) -#define DIALER_BTN2_R REL_W(KEYPAD_END_BTN_L_PAD+KEYPAD_END_BTN_WIDTH) -#define DIALER_BTN2_T DIALER_BTN1_T -#define DIALER_BTN2_B DIALER_BTN1_B -/* - * End of KEYPAD View - */ - - -/* - * INCALL View - * In Portrait mode - */ -#define INCALL_CID_L DIALLING_CID_L -#define INCALL_CID_R DIALLING_CID_R -#define INCALL_CID_T DIALLING_CID_T -#define INCALL_CID_B DIALLING_CID_B - -/* -#define INCALL_CID_DIM_T DIALLING_CID_T -#define INCALL_CID_DIM_B DIALLING_CID_B -#define INCALL_CID_DIM_L REL_W(145) -#define INCALL_CID_DIM_R REL_W(334) -*/ - -#define INCALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L -#define INCALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R -#define INCALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T -#define INCALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B - -#define INCALL_NAME_L DIALLING_NAME_L -#define INCALL_NAME_R DIALLING_NAME_R -#define INCALL_NAME_T DIALLING_NAME_T -#define INCALL_NAME_B DIALLING_NAME_B - -#define INCALL_NUMBER_L DIALLING_NUMBER_L -#define INCALL_NUMBER_R DIALLING_NUMBER_R -#define INCALL_NUMBER_T DIALLING_NUMBER_T -#define INCALL_NUMBER_B DIALLING_NUMBER_B - -#define INCALL_HOLD_L REL_W(INCALL_HOLD_BTN_L_PAD) -#define INCALL_HOLD_R REL_W(INCALL_HOLD_BTN_L_PAD+INCALL_HOLD_BTN_WIDTH) -#define INCALL_HOLD_T REL_H(INCALL_HOLD_BTN_T_PAD) -#define INCALL_HOLD_B REL_H(INCALL_HOLD_BTN_T_PAD+INCALL_HOLD_BTN_HEIGHT) - -#define INCALL_TIMER_L REL_W(INCALL_TIMER_L_PAD) -#define INCALL_TIMER_R REL_W(INCALL_TIMER_L_PAD+INCALL_TIMER_WIDTH) -#define INCALL_TIMER_T REL_H(INCALL_TIMER_T_PAD) -#define INCALL_TIMER_B REL_H(INCALL_TIMER_T_PAD+INCALL_TIMER_HEIGHT) - -#define INCALL_BACKGROUND_SHARE_L REL_W(0) -#define INCALL_BACKGROUND_SHARE_R REL_W(MAIN_SCREEN_W) -#define INCALL_BACKGROUND_SHARE_T REL_H(INCALL_SHARE_BG_T_PAD) -#define INCALL_BACKGROUND_SHARE_B REL_H(INCALL_SHARE_BG_T_PAD+INCALL_SHARE_BG_HEIGHT) -/* - * End of INCALL View - */ - - -/* - * MULTI-CALL SPLIT View - * In Portrait mode - */ -/* L[ACT] + R[HLD] */ -#define MULTICALL_SPLIT_BACKGROUND_CID_L INCALL_BACKGROUND_CID_L -#define MULTICALL_SPLIT_BACKGROUND_CID_R INCALL_BACKGROUND_CID_R -#define MULTICALL_SPLIT_BACKGROUND_CID_T INCALL_BACKGROUND_CID_T -#define MULTICALL_SPLIT_BACKGROUND_CID_B INCALL_BACKGROUND_CID_B - -#define MULTICALL_SPLIT_CID_1_L REL_W(SPLIT_CID1_L_PAD) -#define MULTICALL_SPLIT_CID_1_R REL_W(SPLIT_CID1_L_PAD+SPLIT_CID1_WIDTH) -#define MULTICALL_SPLIT_CID_1_T REL_H(SPLIT_CID1_T_PAD) -#define MULTICALL_SPLIT_CID_1_B REL_H(SPLIT_CID1_T_PAD+SPLIT_CID1_HEIGHT) - -#define MULTICALL_SPLIT_PAUSE_L REL_W(SPLIT_PAUSE_L_PAD) -#define MULTICALL_SPLIT_PAUSE_R REL_W(SPLIT_PAUSE_L_PAD+SPLIT_PAUSE_WIDTH) -#define MULTICALL_SPLIT_PAUSE_T REL_H(SPLIT_PAUSE_T_PAD) -#define MULTICALL_SPLIT_PAUSE_B REL_H(SPLIT_PAUSE_T_PAD+SPLIT_PAUSE_HEIGHT) - -#define MULTICALL_SPLIT_CID_2_L REL_W(SPLIT_CID2_L_PAD) -#define MULTICALL_SPLIT_CID_2_R REL_W(SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH) -#define MULTICALL_SPLIT_CID_2_T REL_H(SPLIT_CID2_T_PAD) -#define MULTICALL_SPLIT_CID_2_B REL_H(SPLIT_CID2_T_PAD+SPLIT_CID2_HEIGHT) - -#define MULTICALL_SPLIT_PLAY_L REL_W(SPLIT_PLAY_L_PAD) -#define MULTICALL_SPLIT_PLAY_R REL_W(SPLIT_PLAY_L_PAD+SPLIT_PLAY_WIDTH) -#define MULTICALL_SPLIT_PLAY_T REL_H(SPLIT_PLAY_T_PAD) -#define MULTICALL_SPLIT_PLAY_B REL_H(SPLIT_PLAY_T_PAD+SPLIT_PLAY_HEIGHT) - -#define MULTICALL_SPLIT_NAME_1_L REL_W(SPLIT_NAME1_L_PAD) -#define MULTICALL_SPLIT_NAME_1_R REL_W(SPLIT_NAME1_L_PAD+SPLIT_NAME1_WIDTH) -#define MULTICALL_SPLIT_NAME_1_T REL_H(SPLIT_NAME1_T_PAD) -#define MULTICALL_SPLIT_NAME_1_B REL_H(SPLIT_NAME1_T_PAD+SPLIT_NAME1_HEIGHT) - -#define MULTICALL_SPLIT_NAME_2_L REL_W(SPLIT_NAME2_L_PAD) -#define MULTICALL_SPLIT_NAME_2_R REL_W(SPLIT_NAME2_L_PAD+SPLIT_NAME2_WIDTH) -#define MULTICALL_SPLIT_NAME_2_T REL_H(SPLIT_NAME2_T_PAD) -#define MULTICALL_SPLIT_NAME_2_B REL_H(SPLIT_NAME2_T_PAD+SPLIT_NAME2_HEIGHT) - -#define MULTICALL_SPLIT_TIMER_L MULTICALL_SPLIT_CID_1_L -#define MULTICALL_SPLIT_TIMER_R MULTICALL_SPLIT_CID_1_R -#define MULTICALL_SPLIT_TIMER_T REL_H(SPLIT_TIMER_TXT_T_PAD) -#define MULTICALL_SPLIT_TIMER_B REL_H(SPLIT_TIMER_TXT_T_PAD+SPLIT_TIMER_TXT_HEIGHT) - -#define MULTICALL_SPLIT_ON_HOLD_TXT_L MULTICALL_SPLIT_CID_2_L -#define MULTICALL_SPLIT_ON_HOLD_TXT_R MULTICALL_SPLIT_CID_2_R -#define MULTICALL_SPLIT_ON_HOLD_TXT_T REL_H(SPLIT_ONHOLD_TXT_T_PAD) -#define MULTICALL_SPLIT_ON_HOLD_TXT_B REL_H(SPLIT_ONHOLD_TXT_T_PAD+SPLIT_ONHOLD_TXT_HEIGHT) - -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_L MULTICALL_SPLIT_CID_2_L -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_R REL_W(SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_T MULTICALL_SPLIT_ON_HOLD_TXT_T -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_B MULTICALL_SPLIT_ON_HOLD_TXT_B - -#define MULTICALL_SPLIT_MORE_ICON_L REL_W(SPLIT_MORE_BTN_L_PAD) -#define MULTICALL_SPLIT_MORE_ICON_R REL_W(SPLIT_MORE_BTN_L_PAD+SPLIT_MORE_BTN_WIDTH) -#define MULTICALL_SPLIT_MORE_ICON_T MULTICALL_SPLIT_ON_HOLD_TXT_T -#define MULTICALL_SPLIT_MORE_ICON_B MULTICALL_SPLIT_ON_HOLD_TXT_B -/* L[ACT] + R[HLD] */ - -/* L[HLD] + R[ACT] */ -#define MULTICALL_SPLIT_SWAP_CID_1_L REL_W(SPLIT_SWAP_CID1_L_PAD) -#define MULTICALL_SPLIT_SWAP_CID_1_R REL_W(SPLIT_SWAP_CID1_L_PAD+SPLIT_SWAP_CID1_WIDTH) -#define MULTICALL_SPLIT_SWAP_CID_1_T MULTICALL_SPLIT_CID_2_T -#define MULTICALL_SPLIT_SWAP_CID_1_B MULTICALL_SPLIT_CID_2_B - -#define MULTICALL_SPLIT_SWAP_PLAY_L REL_W(SPLIT_SWAP_PLAY_L_PAD) -#define MULTICALL_SPLIT_SWAP_PLAY_R REL_W(SPLIT_SWAP_PLAY_L_PAD+SPLIT_SWAP_PLAY_WIDTH) -#define MULTICALL_SPLIT_SWAP_PLAY_T MULTICALL_SPLIT_PLAY_T -#define MULTICALL_SPLIT_SWAP_PLAY_B MULTICALL_SPLIT_PLAY_B - -#define MULTICALL_SPLIT_SWAP_CID_2_L REL_W(SPLIT_SWAP_CID2_L_PAD) -#define MULTICALL_SPLIT_SWAP_CID_2_R REL_W(SPLIT_SWAP_CID2_L_PAD+SPLIT_SWAP_CID2_WIDTH) -#define MULTICALL_SPLIT_SWAP_CID_2_T MULTICALL_SPLIT_CID_1_T -#define MULTICALL_SPLIT_SWAP_CID_2_B MULTICALL_SPLIT_CID_1_B - -#define MULTICALL_SPLIT_SWAP_PAUSE_L REL_W(SPLIT_SWAP_PAUSE_L_PAD) -#define MULTICALL_SPLIT_SWAP_PAUSE_R REL_W(SPLIT_SWAP_PAUSE_L_PAD+SPLIT_SWAP_PAUSE_WIDTH) -#define MULTICALL_SPLIT_SWAP_PAUSE_T MULTICALL_SPLIT_PAUSE_T -#define MULTICALL_SPLIT_SWAP_PAUSE_B MULTICALL_SPLIT_PAUSE_B - -#define MULTICALL_SPLIT_SWAP_NAME_1_L MULTICALL_SPLIT_NAME_1_L -#define MULTICALL_SPLIT_SWAP_NAME_1_R REL_W(SPLIT_SWAP_NAME1_L_PAD+SPLIT_SWAP_NAME1_WIDTH) -#define MULTICALL_SPLIT_SWAP_NAME_1_T MULTICALL_SPLIT_NAME_2_T -#define MULTICALL_SPLIT_SWAP_NAME_1_B MULTICALL_SPLIT_NAME_2_B - -#define MULTICALL_SPLIT_SWAP_NAME_2_L REL_W(SPLIT_SWAP_NAME2_L_PAD) -#define MULTICALL_SPLIT_SWAP_NAME_2_R REL_W(SPLIT_SWAP_NAME2_L_PAD+SPLIT_SWAP_NAME2_WIDTH) -#define MULTICALL_SPLIT_SWAP_NAME_2_T MULTICALL_SPLIT_NAME_1_T -#define MULTICALL_SPLIT_SWAP_NAME_2_B MULTICALL_SPLIT_NAME_1_B - -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_L MULTICALL_SPLIT_SWAP_CID_1_L -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_R MULTICALL_SPLIT_SWAP_CID_1_R -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_T MULTICALL_SPLIT_ON_HOLD_TXT_T -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_B MULTICALL_SPLIT_ON_HOLD_TXT_B - -#define MULTICALL_SPLIT_SWAP_TIMER_L MULTICALL_SPLIT_SWAP_CID_2_L -#define MULTICALL_SPLIT_SWAP_TIMER_R MULTICALL_SPLIT_SWAP_CID_2_R -#define MULTICALL_SPLIT_SWAP_TIMER_T MULTICALL_SPLIT_TIMER_T -#define MULTICALL_SPLIT_SWAP_TIMER_B MULTICALL_SPLIT_TIMER_B - -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_L MULTICALL_SPLIT_SWAP_CID_2_L -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_R REL_W(SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_T MULTICALL_SPLIT_TIMER_T -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_B MULTICALL_SPLIT_TIMER_B - -#define MULTICALL_SPLIT_SWAP_MORE_ICON_L REL_W(SPLIT_SWAP_MORE_BTN_L_PAD) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_R REL_W(SPLIT_SWAP_MORE_BTN_L_PAD+SPLIT_SWAP_MORE_BTN_WIDTH) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_T REL_H(SPLIT_SWAP_MORE_BTN_T_PAD) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_B REL_H(SPLIT_SWAP_MORE_BTN_T_PAD+SPLIT_SWAP_MORE_BTN_HEIGHT) -/* L[HLD] + R[ACT] */ -/* - * End of MULTI-CALL SPLIT View - */ - -/* - * MULTI-CALL LIST View - * In Portrait mode - */ -#define MULTICALL_LIST_L REL_W(0) -#define MULTICALL_LIST_R REL_W(MAIN_SCREEN_W) -#define MULTICALL_LIST_T REL_H(CONF_LIST_T_PAD) -#define MULTICALL_LIST_B REL_H(CONF_LIST_T_PAD+CONF_LIST_HEIGHT) - -#define MULTICALL_LIST_HOLD_L REL_W(CONF_HOLD_L_PAD) -#define MULTICALL_LIST_HOLD_R REL_W(CONF_HOLD_L_PAD+CONF_HOLD_WIDTH) -#define MULTICALL_LIST_HOLD_T REL_H(CONF_HOLD_T_PAD) -#define MULTICALL_LIST_HOLD_B REL_H(CONF_HOLD_T_PAD+CONF_HOLD_HEIGHT) - -#define MULTICALL_LIST_TIMER_L REL_W(0) -#define MULTICALL_LIST_TIMER_R REL_W(MAIN_SCREEN_W) -#define MULTICALL_LIST_TIMER_T REL_H(CONF_TIMER_T_PAD) -#define MULTICALL_LIST_TIMER_B REL_H(CONF_TIMER_T_PAD+CONF_TIMER_HEIGHT) - -#define MULTICALL_LIST_BIG_END_L REL_W(CALL_BIG_END_L_PAD) -#define MULTICALL_LIST_BIG_END_R REL_W(CALL_BIG_END_L_PAD+CALL_BIG_END_WIDTH) -#define MULTICALL_LIST_BIG_END_T REL_H(CONF_CALL_BIG_END_T_PAD) -#define MULTICALL_LIST_BIG_END_B REL_H(CONF_CALL_BIG_END_T_PAD+CALL_BIG_END_HEIGHT) -/* - * End of MULTI-CALL LIST View - */ - - -/* - * SIX Button Layout - * In Portrait mode - */ -#define SIX_BTN_1_L REL_W(SIX_BTN_COL1_L_PAD) -#define SIX_BTN_1_R REL_W(SIX_BTN_COL1_L_PAD+SIX_BTN_COL1_WIDTH) -#define SIX_BTN_2_L REL_W(SIX_BTN_COL2_L_PAD) -#define SIX_BTN_2_R REL_W(SIX_BTN_COL2_L_PAD+SIX_BTN_COL1_WIDTH) -#define SIX_BTN_3_L REL_W(SIX_BTN_COL3_L_PAD) -#define SIX_BTN_3_R REL_W(SIX_BTN_COL3_L_PAD+SIX_BTN_COL1_WIDTH) - -#define SIX_BTN_1_T REL_H(SIX_BTN_ROW1_T_PAD) -#define SIX_BTN_1_B REL_H(SIX_BTN_ROW1_T_PAD+SIX_BTN_ROW1_HEIGHT) -#define SIX_BTN_2_T REL_H(SIX_BTN_ROW2_T_PAD) -#define SIX_BTN_2_B REL_H(SIX_BTN_ROW2_T_PAD+SIX_BTN_ROW1_HEIGHT) - -#define SIX_BTN_BIG_END_L REL_W(CALL_BIG_END_L_PAD) -#define SIX_BTN_BIG_END_R REL_W(CALL_BIG_END_L_PAD+CALL_BIG_END_WIDTH) -#define SIX_BTN_BIG_END_T REL_H(CALL_BIG_END_T_PAD) -#define SIX_BTN_BIG_END_B REL_H(CALL_BIG_END_T_PAD+CALL_BIG_END_HEIGHT) - -#define SIX_BTN_INCOMING_1_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_1_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_1_T REL_H(INCMG_CALL_BTN1_T_PAD) -#define SIX_BTN_INCOMING_1_B REL_H(INCMG_CALL_BTN1_T_PAD+INCMG_CALL_BTN_HEIGHT) - -#define SIX_BTN_INCOMING_2_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_2_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_2_T REL_H(INCMG_CALL_BTN2_T_PAD) -#define SIX_BTN_INCOMING_2_B REL_H(INCMG_CALL_BTN2_T_PAD+INCMG_CALL_BTN_HEIGHT) - -#define SIX_BTN_INCOMING_3_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_3_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_3_T REL_H(INCMG_CALL_BTN3_T_PAD) -#define SIX_BTN_INCOMING_3_B REL_H(INCMG_CALL_BTN3_T_PAD+INCMG_CALL_BTN_HEIGHT) -/* - * End of SIX Button Layout - */ - - -/* - * Navigation bar layout - */ -#define CALL_NAVIGATION_BAR_T REL_H(NAVIFRAME_T_PAD) -#define CALL_NAVIGATION_BAR_B REL_H(MAIN_SCREEN_H) -#define CALL_NAVIGATION_BAR_L REL_W(0) -#define CALL_NAVIGATION_BAR_R REL_W(MAIN_SCREEN_W) -/* - * End of Navigation bar layout - */ - - -/* - * END CALL View - * In Portrait mode - */ -#define ENDSINGLECALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L -#define ENDSINGLECALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R -#define ENDSINGLECALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T -#define ENDSINGLECALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B - -#define ENDSINGLECALL_CID_L DIALLING_CID_L -#define ENDSINGLECALL_CID_R DIALLING_CID_R -#define ENDSINGLECALL_CID_T DIALLING_CID_T -#define ENDSINGLECALL_CID_B DIALLING_CID_B - -#define ENDSINGLECALL_NAME_L DIALLING_NAME_L -#define ENDSINGLECALL_NAME_R DIALLING_NAME_R -#define ENDSINGLECALL_NAME_T DIALLING_NAME_T -#define ENDSINGLECALL_NAME_B DIALLING_NAME_B - -#define ENDSINGLECALL_NUMBER_L DIALLING_NUMBER_L -#define ENDSINGLECALL_NUMBER_R DIALLING_NUMBER_R -#define ENDSINGLECALL_NUMBER_T DIALLING_NUMBER_T -#define ENDSINGLECALL_NUMBER_B DIALLING_NUMBER_B - -#define ENDSINGLECALL_TIMER_L INCALL_TIMER_L -#define ENDSINGLECALL_TIMER_R INCALL_TIMER_R -#define ENDSINGLECALL_TIMER_T INCALL_TIMER_T -#define ENDSINGLECALL_TIMER_B INCALL_TIMER_B - -#define ENDSINGLECALL_VIDEO_BTN_L REL_W(VIDEO_BTN_POS1_L_PAD) -#define ENDSINGLECALL_VIDEO_BTN_R REL_W(VIDEO_BTN_POS1_L_PAD+VIDEO_BTN_POS1_WIDTH) -#define ENDSINGLECALL_VIDEO_BTN_T REL_H(VIDEO_BTN_POS1_T_PAD) -#define ENDSINGLECALL_VIDEO_BTN_B REL_H(VIDEO_BTN_POS1_T_PAD+VIDEO_BTN_POS1_HEIGHT) - -#define ENDSINGLECALL_VIDEO2_BTN_L REL_W(VIDEO_BTN_POS2_L_PAD) -#define ENDSINGLECALL_VIDEO2_BTN_R REL_W(VIDEO_BTN_POS2_L_PAD+VIDEO_BTN_POS2_WIDTH) -#define ENDSINGLECALL_VIDEO2_BTN_T REL_H(VIDEO_BTN_POS2_T_PAD) -#define ENDSINGLECALL_VIDEO2_BTN_B REL_H(VIDEO_BTN_POS2_T_PAD+VIDEO_BTN_POS2_HEIGHT) - -#define ENDSINGLECALL_VOICE_BTN_L REL_W(VOICE_BTN_POS1_L_PAD) -#define ENDSINGLECALL_VOICE_BTN_R REL_W(VOICE_BTN_POS1_L_PAD+VOICE_BTN_POS1_WIDTH) -#define ENDSINGLECALL_VOICE_BTN_T ENDSINGLECALL_VIDEO_BTN_T -#define ENDSINGLECALL_VOICE_BTN_B ENDSINGLECALL_VIDEO_BTN_B - -#define ENDSINGLECALL_VOICE2_BTN_L ENDSINGLECALL_VOICE_BTN_L -#define ENDSINGLECALL_VOICE2_BTN_R ENDSINGLECALL_VOICE_BTN_R -#define ENDSINGLECALL_VOICE2_BTN_T ENDSINGLECALL_VIDEO2_BTN_T -#define ENDSINGLECALL_VOICE2_BTN_B ENDSINGLECALL_VIDEO2_BTN_B - -#define ENDSINGLECALL_MSG_BTN_L REL_W(MSG_BTN_POS1_L_PAD) -#define ENDSINGLECALL_MSG_BTN_R REL_W(MSG_BTN_POS1_L_PAD+MSG_BTN_POS1_WIDTH) -#define ENDSINGLECALL_MSG_BTN_T REL_H(MSG_BTN_POS1_T_PAD) -#define ENDSINGLECALL_MSG_BTN_B REL_H(MSG_BTN_POS1_T_PAD+MSG_BTN_POS1_HEIGHT) - -#define ENDSINGLECALL_MSG2_BTN_L ENDSINGLECALL_MSG_BTN_L -#define ENDSINGLECALL_MSG2_BTN_R ENDSINGLECALL_MSG_BTN_R -#define ENDSINGLECALL_MSG2_BTN_T REL_H(MSG_BTN_POS2_T_PAD) -#define ENDSINGLECALL_MSG2_BTN_B REL_H(MSG_BTN_POS2_T_PAD+MSG_BTN_POS2_HEIGHT) - -#define ENDSINGLECALL_CONTACT_BTN_L REL_W(CONTACT_BTN_POS1_L_PAD) -#define ENDSINGLECALL_CONTACT_BTN_R REL_W(CONTACT_BTN_POS1_L_PAD+CONTACT_BTN_POS1_WIDTH) -#define ENDSINGLECALL_CONTACT_BTN_T REL_H(CONTACT_BTN_POS1_T_PAD) -#define ENDSINGLECALL_CONTACT_BTN_B REL_H(CONTACT_BTN_POS1_T_PAD+CONTACT_BTN_POS1_HEIGHT) -/* - * End of END CALL View - */ -#endif /*__VCUI_VIEW_LAYOUT_HD__*/ diff --git a/ui/vcui-view-layout-wvga.h b/ui/vcui-view-layout-wvga.h deleted file mode 100755 index 558a903..0000000 --- a/ui/vcui-view-layout-wvga.h +++ /dev/null @@ -1,745 +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 __VCUI_VIEW_LAYOUT_WVGA__ -#define __VCUI_VIEW_LAYOUT_WVGA__ - -#define COLOR_DEFAULT 0 0 0 255 -#define COLOR_BG_ALPHA 0 0 0 0 -#define COLOR_BG_FOR_HELD_CALL_DIM 0 0 0 150 - -/*#define BTN_EDGE_W 9*/ - -/* - * WVGA GUI Widget Dimensions - * In Portrait mode - */ -#define MAIN_SCREEN_W 480 -#define MAIN_SCREEN_H 800 - -#define INDICATOR_HEIGHT 40 -#define NAVIFRAME_TITLE_HEIGHT 75 - -#define MAIN_NAVIFRAME_W MAIN_SCREEN_W -#define MAIN_NAVIFRAME_H (MAIN_SCREEN_H-INDICATOR_HEIGHT-NAVIFRAME_TITLE_HEIGHT) -#define NAVIFRAME_T_PAD 40 - -#define QP_WIN_W MAIN_SCREEN_W -#define QP_WIN_H 104 - -#define DIALING_STATUS_L_PAD 0 -#define DIALING_STATUS_WIDTH MAIN_SCREEN_W -#define DIALING_STATUS_T_PAD 428 -#define DIALING_STATUS_HEIGHT 32 - -#define CALL_NAME_L_PAD 12 -#define CALL_NAME_WIDTH 456 -#define CALL_NAME_T_PAD 52 -#define CALL_NAME_HEIGHT 50 - -#define CALL_NUMBER_T_GAP 4 - -#define CALL_NUMBER_L_PAD CALL_NAME_L_PAD -#define CALL_NUMBER_WIDTH CALL_NAME_WIDTH -#define CALL_NUMBER_T_PAD (CALL_NAME_T_PAD+CALL_NAME_HEIGHT+CALL_NUMBER_T_GAP) -#define CALL_NUMBER_HEIGHT 32 - -#define CALLER_ID_L_PAD 145 -#define CALLER_ID_WIDTH 190 -#define CALLER_ID_T_PAD 176 -#define CALLER_ID_HEIGHT 190 - -#define BACKGROUND_CID_L_PAD 0 -#define BACKGROUND_CID_WIDTH MAIN_SCREEN_W -#define BACKGROUND_CID_T_PAD 0 -#define BACKGROUND_CID_HEIGHT MAIN_SCREEN_H - -#define ACCEPT_BTN_L_PAD 26 -#define ACCEPT_BTN_WIDTH 202 -#define ACCEPT_BTN_T_PAD 620 -#define ACCEPT_BTN_HEIGHT 70 - -#define REJECT_BTN_L_GAP 24 - -#define REJECT_BTN_L_PAD (ACCEPT_BTN_L_PAD+ACCEPT_BTN_WIDTH+REJECT_BTN_L_GAP) -#define REJECT_BTN_WIDTH ACCEPT_BTN_WIDTH -#define REJECT_BTN_T_PAD ACCEPT_BTN_T_PAD -#define REJECT_BTN_HEIGHT ACCEPT_BTN_HEIGHT - -#define REJECT_W_MSG_BTN_T_GAP 25 - -#define REJECT_W_MSG_BTN_L_PAD ACCEPT_BTN_L_PAD -#define REJECT_W_MSG_BTN_WIDTH 428 -#define REJECT_W_MSG_BTN_T_PAD (ACCEPT_BTN_T_PAD+ACCEPT_BTN_HEIGHT+REJECT_W_MSG_BTN_T_GAP) -#define REJECT_W_MSG_BTN_HEIGHT 56 - -#define INCALL_HOLD_BTN_L_PAD 26 -#define INCALL_HOLD_BTN_WIDTH 73 -#define INCALL_HOLD_BTN_T_PAD 417 -#define INCALL_HOLD_BTN_HEIGHT 54 - -#define INCALL_TIMER_L_PAD 26 -#define INCALL_TIMER_WIDTH 428 -#define INCALL_TIMER_T_PAD 428 -#define INCALL_TIMER_HEIGHT 32 - -#define INCALL_SHARE_BG_T_PAD 365 /*approx*/ -#define INCALL_SHARE_BG_HEIGHT 774 /*approx*/ - -#define KEYPAD_TIMER_L_PAD 26 -#define KEYPAD_TIMER_WIDTH 428 -#define KEYPAD_TIMER_T_PAD 240 -#define KEYPAD_TIMER_HEIGHT 32 - -#define KEYPAD_ENTRY_TXT_L_PAD KEYPAD_TIMER_L_PAD -#define KEYPAD_ENTRY_TXT_WIDTH KEYPAD_TIMER_WIDTH -#define KEYPAD_ENTRY_TXT_T_PAD 57 -#define KEYPAD_ENTRY_TXT_HEIGHT 70 - -#define KEYPAD_BTNS_T_PAD 289 -#define KEYPAD_BTNS_WIDTH MAIN_SCREEN_W -#define KEYPAD_BTNS_HEIGHT 391 - -#define KEYPAD_HIDE_BTN_L_PAD KEYPAD_TIMER_L_PAD -#define KEYPAD_HIDE_BTN_WIDTH 202 -#define KEYPAD_HIDE_BTN_T_PAD 712 -#define KEYPAD_HIDE_BTN_HEIGHT 70 - -#define KEYPAD_BTN_GAP 13 -#define KEYPAD_END_BTN_L_PAD (KEYPAD_HIDE_BTN_L_PAD+KEYPAD_HIDE_BTN_WIDTH+KEYPAD_BTN_GAP) -#define KEYPAD_END_BTN_WIDTH KEYPAD_HIDE_BTN_WIDTH - -#define SPLIT_CID1_L_PAD 50 -#define SPLIT_CID1_WIDTH 190 -#define SPLIT_CID1_T_PAD 137 -#define SPLIT_CID1_HEIGHT 190 - -#define SPLIT_PAUSE_L_PAD (SPLIT_CID1_L_PAD+4) -#define SPLIT_PAUSE_WIDTH 40 -#define SPLIT_PAUSE_HEIGHT 40 -#define SPLIT_PAUSE_T_PAD (SPLIT_CID1_T_PAD+SPLIT_CID1_HEIGHT-8-SPLIT_PAUSE_HEIGHT) - -#define SPLIT_CID2_L_PAD 300 -#define SPLIT_CID2_WIDTH 130 -#define SPLIT_CID2_T_PAD 167 -#define SPLIT_CID2_HEIGHT 130 - -#define SPLIT_PLAY_L_PAD (SPLIT_CID2_L_PAD+8) -#define SPLIT_PLAY_WIDTH 25 -#define SPLIT_PLAY_HEIGHT 25 -#define SPLIT_PLAY_T_PAD (SPLIT_CID2_T_PAD+SPLIT_CID2_HEIGHT-8-SPLIT_PLAY_HEIGHT) - -#define SPLIT_NAME1_L_PAD 24 -#define SPLIT_NAME1_WIDTH 242 -#define SPLIT_NAME1_T_PAD 90 -#define SPLIT_NAME1_HEIGHT 36 - -#define SPLIT_NAME2_L_PAD (SPLIT_NAME1_L_PAD+SPLIT_NAME1_WIDTH+14) -#define SPLIT_NAME2_WIDTH 170 -#define SPLIT_NAME2_T_PAD 136 -#define SPLIT_NAME2_HEIGHT 24 - -#define SPLIT_TIMER_TXT_T_PAD 343 -#define SPLIT_TIMER_TXT_HEIGHT 28 - -#define SPLIT_MORE_BTN_WIDTH 24 -#define SPLIT_MORE_BTN_L_PAD (SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) -#define SPLIT_ONHOLD_TXT_W_ICON_WIDTH (SPLIT_CID2_WIDTH-SPLIT_MORE_BTN_WIDTH) -#define SPLIT_ONHOLD_TXT_T_PAD 308 -#define SPLIT_ONHOLD_TXT_HEIGHT 24 - -#define SPLIT_SWAP_CID1_L_PAD 47 -#define SPLIT_SWAP_CID1_WIDTH 130 - -#define SPLIT_SWAP_PLAY_L_PAD (SPLIT_SWAP_CID1_L_PAD+8) -#define SPLIT_SWAP_PLAY_WIDTH 25 - -#define SPLIT_SWAP_CID2_L_PAD 240 -#define SPLIT_SWAP_CID2_WIDTH 190 - -#define SPLIT_SWAP_PAUSE_L_PAD (SPLIT_SWAP_CID2_L_PAD+4) -#define SPLIT_SWAP_PAUSE_WIDTH 40 - -#define SPLIT_SWAP_NAME1_L_PAD 30 -#define SPLIT_SWAP_NAME1_WIDTH 170 - -#define SPLIT_SWAP_NAME2_L_PAD (SPLIT_SWAP_NAME1_L_PAD+SPLIT_SWAP_NAME1_WIDTH+14) -#define SPLIT_SWAP_NAME2_WIDTH 242 - -#define SPLIT_SWAP_MORE_BTN_WIDTH 40 -#define SPLIT_SWAP_MORE_BTN_L_PAD (SPLIT_SWAP_CID2_L_PAD+SPLIT_SWAP_CID2_WIDTH-SPLIT_SWAP_MORE_BTN_WIDTH) -#define SPLIT_SWAP_MORE_BTN_T_PAD (SPLIT_TIMER_TXT_T_PAD-6) -#define SPLIT_SWAP_MORE_BTN_HEIGHT 40 -#define SPLIT_TIMER_TXT_W_ICON_WIDTH (SPLIT_SWAP_CID2_WIDTH-SPLIT_SWAP_MORE_BTN_WIDTH) - -#define CONF_LIST_T_PAD 115 -#define CONF_LIST_HEIGHT (70*5+1*5) /*row-height(70) row-gap(1)*/ - -#define CONF_HOLD_WIDTH 45 -#define CONF_HOLD_L_PAD (MAIN_SCREEN_W-26-CONF_HOLD_WIDTH) -#define CONF_HOLD_T_PAD 620 -#define CONF_HOLD_HEIGHT 39 - -#define CONF_TIMER_T_PAD 620 -#define CONF_TIMER_HEIGHT 52 - -#define REJ_MSG_NEW_BTN_L_PAD 26 -#define REJ_MSG_NEW_BTN_WIDTH 428 -#define REJ_MSG_NEW_BTN_T_PAD 715 -#define REJ_MSG_NEW_BTN_HEIGHT 56 - -#define REJ_MSG_LIST_T_PAD 20 -#define REJ_MSG_LIST_HEIGHT 685 - -#define SIX_BTN_COL1_L_PAD 26 -#define SIX_BTN_COL1_WIDTH 134 -#define SIX_BTN_COL2_L_PAD (SIX_BTN_COL1_L_PAD+SIX_BTN_COL1_WIDTH+13) -#define SIX_BTN_COL3_L_PAD (SIX_BTN_COL2_L_PAD+SIX_BTN_COL1_WIDTH+13) -#define SIX_BTN_ROW1_T_PAD 494 -#define SIX_BTN_ROW1_HEIGHT 88 -#define SIX_BTN_ROW2_T_PAD (SIX_BTN_ROW1_T_PAD+SIX_BTN_ROW1_HEIGHT+13) - -#define CALL_BIG_END_L_PAD 26 -#define CALL_BIG_END_WIDTH 428 -#define CALL_BIG_END_T_PAD 712 -#define CALL_BIG_END_HEIGHT 70 - -#define INCMG_CALL_BTN1_T_PAD 438 -#define INCMG_CALL_BTN_HEIGHT CALL_BIG_END_HEIGHT -#define INCMG_CALL_BTN2_T_PAD 524 -#define INCMG_CALL_BTN3_T_PAD 610 - -#define VIDEO_BTN_POS1_L_PAD 26 -#define VIDEO_BTN_POS1_WIDTH 202 -#define VIDEO_BTN_POS1_T_PAD 524 -#define VIDEO_BTN_POS1_HEIGHT 70 -#define VIDEO_BTN_POS2_L_PAD VIDEO_BTN_POS1_L_PAD -#define VIDEO_BTN_POS2_WIDTH VIDEO_BTN_POS1_WIDTH -#define VIDEO_BTN_POS2_T_PAD 610 -#define VIDEO_BTN_POS2_HEIGHT VIDEO_BTN_POS1_HEIGHT - -#define VOICE_BTN_POS1_L_PAD (VIDEO_BTN_POS1_L_PAD+VIDEO_BTN_POS1_WIDTH+40) -#define VOICE_BTN_POS1_WIDTH VIDEO_BTN_POS1_WIDTH - -#define MSG_BTN_POS1_L_PAD VIDEO_BTN_POS1_L_PAD -#define MSG_BTN_POS1_WIDTH 428 -#define MSG_BTN_POS1_T_PAD 610 -#define MSG_BTN_POS1_HEIGHT VIDEO_BTN_POS1_HEIGHT -#define MSG_BTN_POS2_T_PAD 712 -#define MSG_BTN_POS2_HEIGHT VIDEO_BTN_POS1_HEIGHT - -#define CONTACT_BTN_POS1_L_PAD VIDEO_BTN_POS1_L_PAD -#define CONTACT_BTN_POS1_WIDTH MSG_BTN_POS1_WIDTH -#define CONTACT_BTN_POS1_T_PAD 712 -#define CONTACT_BTN_POS1_HEIGHT VIDEO_BTN_POS1_HEIGHT - -#define QP_CID_L_PAD 10 -#define QP_CID_WIDTH 82 -#define QP_CID_T_PAD 11 -#define QP_CID_HEIGHT 82 - -#define QP_END_BTN_L_PAD 102 -#define QP_END_BTN_WIDTH 368 -#define QP_END_BTN_T_PAD 50 -#define QP_END_BTN_HEIGHT 40 - -#define QP_NAME_L_PAD 102 -#define QP_NAME_WIDTH 248 -#define QP_NAME_T_PAD 8 -#define QP_NAME_HEIGHT 30 - -#define QP_TIMER_L_PAD 370 -/* - * End of WVGA GUI Widget Dimensions - */ - - -/* - * Relative positions - * In Portrait mode - */ -/* Relative X & Y positions of widgets w.r.t. Full Screen */ -#define REL_W(x) ((x)/MAIN_SCREEN_W) -#define REL_H(y) ((y)/MAIN_SCREEN_H) - -/* Relative X & Y positions of widgets w.r.t. Navi-frame layout */ -/*#define WL_NB_H 94*/ -#define REL_NAVIFRAME_W(x) ((x)/MAIN_NAVIFRAME_W) -#define REL_NAVIFRAME_H(y) ((y)/MAIN_NAVIFRAME_H) - -/* Relative X & Y positions of widgets w.r.t. ACC/REJ ICON layout */ -#define REL_LOCK_W(x) ((x)/483) /*approx*/ -#define REL_LOCK_H(y) ((y)/198) /*approx*/ -/* Relative X & Y positions of widgets w.r.t. REJ-W-MSG ICON layout */ -#define REL_LOCK_MSG_W(x) ((x)/348) /*approx*/ -#define REL_LOCK_MSG_H(y) ((y)/200) /*approx*/ - -/* Relative X & Y positions of widgets w.r.t. Keypad Buttons layout */ -#define REL_KEYPAD_W(x) ((x)/KEYPAD_BTNS_WIDTH) -#define REL_KEYPAD_H(y) ((y)/KEYPAD_BTNS_HEIGHT) - /* - * End of Relative positions - */ - - -/* - * MO/Dialing view & MT/Incoming view - * In Portrait mode - */ -#define DIALLING_STATUS_L REL_W(DIALING_STATUS_L_PAD) -#define DIALLING_STATUS_R REL_W(DIALING_STATUS_L_PAD+DIALING_STATUS_WIDTH) -#define DIALLING_STATUS_T REL_H(DIALING_STATUS_T_PAD) -#define DIALLING_STATUS_B REL_H(DIALING_STATUS_T_PAD+DIALING_STATUS_HEIGHT) - -/* -#define DIALLING_MT_STATUS_L REL_W(123) -#define DIALLING_MT_STATUS_R REL_W(357) -#define DIALLING_MT_STATUS_T REL_H(375) -#define DIALLING_MT_STATUS_B REL_H(407) -*/ - -#define DIALLING_NAME_L REL_W(CALL_NAME_L_PAD) -#define DIALLING_NAME_R REL_W(CALL_NAME_L_PAD+CALL_NAME_WIDTH) -#define DIALLING_NAME_T REL_H(CALL_NAME_T_PAD) -#define DIALLING_NAME_B REL_H(CALL_NAME_T_PAD+CALL_NAME_HEIGHT) - -#define DIALLING_NUMBER_L REL_W(CALL_NUMBER_L_PAD) -#define DIALLING_NUMBER_R REL_W(CALL_NUMBER_L_PAD+CALL_NUMBER_WIDTH) -#define DIALLING_NUMBER_T REL_H(CALL_NUMBER_T_PAD) -#define DIALLING_NUMBER_B REL_H(CALL_NUMBER_T_PAD+CALL_NUMBER_HEIGHT) - -#define DIALLING_CID_L REL_W(CALLER_ID_L_PAD) -#define DIALLING_CID_R REL_W(CALLER_ID_L_PAD+CALLER_ID_WIDTH) -#define DIALLING_CID_T REL_H(CALLER_ID_T_PAD) -#define DIALLING_CID_B REL_H(CALLER_ID_T_PAD+CALLER_ID_HEIGHT) - -#define DIALLING_BACKGROUND_CID_L REL_W(BACKGROUND_CID_L_PAD) -#define DIALLING_BACKGROUND_CID_R REL_W(BACKGROUND_CID_L_PAD+BACKGROUND_CID_WIDTH) -#define DIALLING_BACKGROUND_CID_T REL_H(BACKGROUND_CID_T_PAD) -#define DIALLING_BACKGROUND_CID_B REL_H(BACKGROUND_CID_T_PAD+BACKGROUND_CID_HEIGHT) - -/* accept - MT view */ -#define DIALLING_MT_BTN1_L REL_W(ACCEPT_BTN_L_PAD) -#define DIALLING_MT_BTN1_R REL_W(ACCEPT_BTN_L_PAD+ACCEPT_BTN_WIDTH) -#define DIALLING_MT_BTN1_T REL_H(ACCEPT_BTN_T_PAD) -#define DIALLING_MT_BTN1_B REL_H(ACCEPT_BTN_T_PAD+ACCEPT_BTN_HEIGHT) - -/* reject - MT view */ -#define DIALLING_MT_BTN2_L REL_W(REJECT_BTN_L_PAD) -#define DIALLING_MT_BTN2_R REL_W(REJECT_BTN_L_PAD+REJECT_BTN_WIDTH) -#define DIALLING_MT_BTN2_T REL_H(REJECT_BTN_T_PAD) -#define DIALLING_MT_BTN2_B REL_H(REJECT_BTN_T_PAD+REJECT_BTN_HEIGHT) -/* - * End of MO/Dialing view & MT/Incoming view - */ - - -/* - * MT LOCK View - * In Portrait mode - */ -#define INCOMING_LOCK_ACCEPT_BG_L REL_W(-182) -#define INCOMING_LOCK_ACCEPT_BG_R REL_W(140) -#define INCOMING_LOCK_ACCEPT_BG_T REL_H(591) -#define INCOMING_LOCK_ACCEPT_BG_B REL_H(715) - -#define INCOMING_LOCK_ACCEPT_ICON_L REL_LOCK_W(202) -#define INCOMING_LOCK_ACCEPT_ICON_R REL_LOCK_W(272) -#define INCOMING_LOCK_ACCEPT_ICON_T REL_LOCK_H(23) -#define INCOMING_LOCK_ACCEPT_ICON_B REL_LOCK_H(93) - -#define INCOMING_LOCK_ACCEPT_TEXT_L REL_LOCK_W(30) -#define INCOMING_LOCK_ACCEPT_TEXT_R REL_LOCK_W(182) -#define INCOMING_LOCK_ACCEPT_TEXT_T INCOMING_LOCK_ACCEPT_ICON_T -#define INCOMING_LOCK_ACCEPT_TEXT_B INCOMING_LOCK_ACCEPT_ICON_B - -#define INCOMING_LOCK_REJECT_BG_L REL_W(340) -#define INCOMING_LOCK_REJECT_BG_R REL_W(662) -#define INCOMING_LOCK_REJECT_BG_T INCOMING_LOCK_ACCEPT_BG_T -#define INCOMING_LOCK_REJECT_BG_B INCOMING_LOCK_ACCEPT_BG_B - -#define INCOMING_LOCK_REJECT_ICON_L REL_LOCK_W(50) -#define INCOMING_LOCK_REJECT_ICON_R REL_LOCK_W(120) -#define INCOMING_LOCK_REJECT_ICON_T INCOMING_LOCK_ACCEPT_ICON_T -#define INCOMING_LOCK_REJECT_ICON_B INCOMING_LOCK_ACCEPT_ICON_B - -#define INCOMING_LOCK_REJECT_TEXT_L REL_LOCK_W(130) -#define INCOMING_LOCK_REJECT_TEXT_R REL_LOCK_W(282) -#define INCOMING_LOCK_REJECT_TEXT_T INCOMING_LOCK_REJECT_ICON_T -#define INCOMING_LOCK_REJECT_TEXT_B INCOMING_LOCK_REJECT_ICON_B -/* - * End of MT LOCK View - */ - - -/* - * KEYPAD View - * In Portrait mode - */ -#define INCALL_DIALER_TIMER_L REL_W(KEYPAD_TIMER_L_PAD) -#define INCALL_DIALER_TIMER_R REL_W(KEYPAD_TIMER_L_PAD+KEYPAD_TIMER_WIDTH) -#define INCALL_DIALER_TIMER_T REL_H(KEYPAD_TIMER_T_PAD) -#define INCALL_DIALER_TIMER_B REL_H(KEYPAD_TIMER_L_PAD+KEYPAD_TIMER_HEIGHT) - -#define INCALL_DIALER_NAME_L INCALL_DIALER_TIMER_L -#define INCALL_DIALER_NAME_R INCALL_DIALER_TIMER_R -#define INCALL_DIALER_NAME_T INCALL_DIALER_TIMER_T -#define INCALL_DIALER_NAME_B INCALL_DIALER_TIMER_B - -/* -#define DIALLING_KEYPAD_T_BF REL_H(319) -#define DIALLING_KEYPAD_B_BF REL_H(710) -*/ - -#define DIALLING_KEYPAD_L REL_W(0) -#define DIALLING_KEYPAD_R REL_W(MAIN_SCREEN_W) -#define DIALLING_KEYPAD_T REL_H(KEYPAD_BTNS_T_PAD) -#define DIALLING_KEYPAD_B REL_H(KEYPAD_BTNS_T_PAD+KEYPAD_BTNS_HEIGHT) - -#define DIALLING_ENTRY_TEXT_L REL_W(KEYPAD_ENTRY_TXT_L_PAD) -#define DIALLING_ENTRY_TEXT_R REL_W(KEYPAD_ENTRY_TXT_L_PAD+KEYPAD_ENTRY_TXT_WIDTH) -#define DIALLING_ENTRY_TEXT_T REL_H(KEYPAD_ENTRY_TXT_T_PAD) -#define DIALLING_ENTRY_TEXT_B REL_H(KEYPAD_ENTRY_TXT_T_PAD+KEYPAD_ENTRY_TXT_HEIGHT) - -#define DIALER_BTN1_L REL_W(KEYPAD_HIDE_BTN_L_PAD) -#define DIALER_BTN1_R REL_W(KEYPAD_HIDE_BTN_L_PAD+KEYPAD_HIDE_BTN_WIDTH) -#define DIALER_BTN1_T REL_H(KEYPAD_HIDE_BTN_T_PAD) -#define DIALER_BTN1_B REL_H(KEYPAD_HIDE_BTN_T_PAD+KEYPAD_HIDE_BTN_HEIGHT) - -#define DIALER_BTN2_L REL_W(KEYPAD_END_BTN_L_PAD) -#define DIALER_BTN2_R REL_W(KEYPAD_END_BTN_L_PAD+KEYPAD_END_BTN_WIDTH) -#define DIALER_BTN2_T DIALER_BTN1_T -#define DIALER_BTN2_B DIALER_BTN1_B -/* - * End of KEYPAD View - */ - - -/* - * INCALL View - * In Portrait mode - */ -#define INCALL_CID_L DIALLING_CID_L -#define INCALL_CID_R DIALLING_CID_R -#define INCALL_CID_T DIALLING_CID_T -#define INCALL_CID_B DIALLING_CID_B - -/* -#define INCALL_CID_DIM_T DIALLING_CID_T -#define INCALL_CID_DIM_B DIALLING_CID_B -#define INCALL_CID_DIM_L REL_W(145) -#define INCALL_CID_DIM_R REL_W(334) -*/ - -#define INCALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L -#define INCALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R -#define INCALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T -#define INCALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B - -#define INCALL_NAME_L DIALLING_NAME_L -#define INCALL_NAME_R DIALLING_NAME_R -#define INCALL_NAME_T DIALLING_NAME_T -#define INCALL_NAME_B DIALLING_NAME_B - -#define INCALL_NUMBER_L DIALLING_NUMBER_L -#define INCALL_NUMBER_R DIALLING_NUMBER_R -#define INCALL_NUMBER_T DIALLING_NUMBER_T -#define INCALL_NUMBER_B DIALLING_NUMBER_B - -#define INCALL_HOLD_L REL_W(INCALL_HOLD_BTN_L_PAD) -#define INCALL_HOLD_R REL_W(INCALL_HOLD_BTN_L_PAD+INCALL_HOLD_BTN_WIDTH) -#define INCALL_HOLD_T REL_H(INCALL_HOLD_BTN_T_PAD) -#define INCALL_HOLD_B REL_H(INCALL_HOLD_BTN_T_PAD+INCALL_HOLD_BTN_HEIGHT) - -#define INCALL_TIMER_L REL_W(INCALL_TIMER_L_PAD) -#define INCALL_TIMER_R REL_W(INCALL_TIMER_L_PAD+INCALL_TIMER_WIDTH) -#define INCALL_TIMER_T REL_H(INCALL_TIMER_T_PAD) -#define INCALL_TIMER_B REL_H(INCALL_TIMER_T_PAD+INCALL_TIMER_HEIGHT) - -#define INCALL_BACKGROUND_SHARE_L REL_W(0) -#define INCALL_BACKGROUND_SHARE_R REL_W(MAIN_SCREEN_W) -#define INCALL_BACKGROUND_SHARE_T REL_H(INCALL_SHARE_BG_T_PAD) -#define INCALL_BACKGROUND_SHARE_B REL_H(INCALL_SHARE_BG_T_PAD+INCALL_SHARE_BG_HEIGHT) -/* - * End of INCALL View - */ - - -/* - * MULTI-CALL SPLIT View - * In Portrait mode - */ -/* L[ACT] + R[HLD] */ -#define MULTICALL_SPLIT_BACKGROUND_CID_L INCALL_BACKGROUND_CID_L -#define MULTICALL_SPLIT_BACKGROUND_CID_R INCALL_BACKGROUND_CID_R -#define MULTICALL_SPLIT_BACKGROUND_CID_T INCALL_BACKGROUND_CID_T -#define MULTICALL_SPLIT_BACKGROUND_CID_B INCALL_BACKGROUND_CID_B - -#define MULTICALL_SPLIT_CID_1_L REL_W(SPLIT_CID1_L_PAD) -#define MULTICALL_SPLIT_CID_1_R REL_W(SPLIT_CID1_L_PAD+SPLIT_CID1_WIDTH) -#define MULTICALL_SPLIT_CID_1_T REL_H(SPLIT_CID1_T_PAD) -#define MULTICALL_SPLIT_CID_1_B REL_H(SPLIT_CID1_T_PAD+SPLIT_CID1_HEIGHT) - -#define MULTICALL_SPLIT_PAUSE_L REL_W(SPLIT_PAUSE_L_PAD) -#define MULTICALL_SPLIT_PAUSE_R REL_W(SPLIT_PAUSE_L_PAD+SPLIT_PAUSE_WIDTH) -#define MULTICALL_SPLIT_PAUSE_T REL_H(SPLIT_PAUSE_T_PAD) -#define MULTICALL_SPLIT_PAUSE_B REL_H(SPLIT_PAUSE_T_PAD+SPLIT_PAUSE_HEIGHT) - -#define MULTICALL_SPLIT_CID_2_L REL_W(SPLIT_CID2_L_PAD) -#define MULTICALL_SPLIT_CID_2_R REL_W(SPLIT_CID2_L_PAD+SPLIT_CID2_WIDTH) -#define MULTICALL_SPLIT_CID_2_T REL_H(SPLIT_CID2_T_PAD) -#define MULTICALL_SPLIT_CID_2_B REL_H(SPLIT_CID2_T_PAD+SPLIT_CID2_HEIGHT) - -#define MULTICALL_SPLIT_PLAY_L REL_W(SPLIT_PLAY_L_PAD) -#define MULTICALL_SPLIT_PLAY_R REL_W(SPLIT_PLAY_L_PAD+SPLIT_PLAY_WIDTH) -#define MULTICALL_SPLIT_PLAY_T REL_H(SPLIT_PLAY_T_PAD) -#define MULTICALL_SPLIT_PLAY_B REL_H(SPLIT_PLAY_T_PAD+SPLIT_PLAY_HEIGHT) - -#define MULTICALL_SPLIT_NAME_1_L REL_W(SPLIT_NAME1_L_PAD) -#define MULTICALL_SPLIT_NAME_1_R REL_W(SPLIT_NAME1_L_PAD+SPLIT_NAME1_WIDTH) -#define MULTICALL_SPLIT_NAME_1_T REL_H(SPLIT_NAME1_T_PAD) -#define MULTICALL_SPLIT_NAME_1_B REL_H(SPLIT_NAME1_T_PAD+SPLIT_NAME1_HEIGHT) - -#define MULTICALL_SPLIT_NAME_2_L REL_W(SPLIT_NAME2_L_PAD) -#define MULTICALL_SPLIT_NAME_2_R REL_W(SPLIT_NAME2_L_PAD+SPLIT_NAME2_WIDTH) -#define MULTICALL_SPLIT_NAME_2_T REL_H(SPLIT_NAME2_T_PAD) -#define MULTICALL_SPLIT_NAME_2_B REL_H(SPLIT_NAME2_T_PAD+SPLIT_NAME2_HEIGHT) - -#define MULTICALL_SPLIT_TIMER_L MULTICALL_SPLIT_CID_1_L -#define MULTICALL_SPLIT_TIMER_R MULTICALL_SPLIT_CID_1_R -#define MULTICALL_SPLIT_TIMER_T REL_H(SPLIT_TIMER_TXT_T_PAD) -#define MULTICALL_SPLIT_TIMER_B REL_H(SPLIT_TIMER_TXT_T_PAD+SPLIT_TIMER_TXT_HEIGHT) - -#define MULTICALL_SPLIT_ON_HOLD_TXT_L MULTICALL_SPLIT_CID_2_L -#define MULTICALL_SPLIT_ON_HOLD_TXT_R MULTICALL_SPLIT_CID_2_R -#define MULTICALL_SPLIT_ON_HOLD_TXT_T REL_H(SPLIT_ONHOLD_TXT_T_PAD) -#define MULTICALL_SPLIT_ON_HOLD_TXT_B REL_H(SPLIT_ONHOLD_TXT_T_PAD+SPLIT_ONHOLD_TXT_HEIGHT) - -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_L MULTICALL_SPLIT_CID_2_L -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_R REL_W(SPLIT_ONHOLD_TXT_W_ICON_WIDTH) -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_T MULTICALL_SPLIT_ON_HOLD_TXT_T -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_B MULTICALL_SPLIT_ON_HOLD_TXT_B - -#define MULTICALL_SPLIT_MORE_ICON_L REL_W(SPLIT_MORE_BTN_L_PAD) -#define MULTICALL_SPLIT_MORE_ICON_R REL_W(SPLIT_MORE_BTN_L_PAD+SPLIT_MORE_BTN_WIDTH) -#define MULTICALL_SPLIT_MORE_ICON_T MULTICALL_SPLIT_ON_HOLD_TXT_T -#define MULTICALL_SPLIT_MORE_ICON_B MULTICALL_SPLIT_ON_HOLD_TXT_B -/* L[ACT] + R[HLD] */ - -/* L[HLD] + R[ACT] */ -#define MULTICALL_SPLIT_SWAP_CID_1_L REL_W(SPLIT_SWAP_CID1_L_PAD) -#define MULTICALL_SPLIT_SWAP_CID_1_R REL_W(SPLIT_SWAP_CID1_L_PAD+SPLIT_SWAP_CID1_WIDTH) -#define MULTICALL_SPLIT_SWAP_CID_1_T MULTICALL_SPLIT_CID_2_T -#define MULTICALL_SPLIT_SWAP_CID_1_B MULTICALL_SPLIT_CID_2_B - -#define MULTICALL_SPLIT_SWAP_PLAY_L REL_W(SPLIT_SWAP_PLAY_L_PAD) -#define MULTICALL_SPLIT_SWAP_PLAY_R REL_W(SPLIT_SWAP_PLAY_L_PAD+SPLIT_SWAP_PLAY_WIDTH) -#define MULTICALL_SPLIT_SWAP_PLAY_T MULTICALL_SPLIT_PLAY_T -#define MULTICALL_SPLIT_SWAP_PLAY_B MULTICALL_SPLIT_PLAY_B - -#define MULTICALL_SPLIT_SWAP_CID_2_L REL_W(SPLIT_SWAP_CID2_L_PAD) -#define MULTICALL_SPLIT_SWAP_CID_2_R REL_W(SPLIT_SWAP_CID2_L_PAD+SPLIT_SWAP_CID2_WIDTH) -#define MULTICALL_SPLIT_SWAP_CID_2_T MULTICALL_SPLIT_CID_1_T -#define MULTICALL_SPLIT_SWAP_CID_2_B MULTICALL_SPLIT_CID_1_B - -#define MULTICALL_SPLIT_SWAP_PAUSE_L REL_W(SPLIT_SWAP_PAUSE_L_PAD) -#define MULTICALL_SPLIT_SWAP_PAUSE_R REL_W(SPLIT_SWAP_PAUSE_L_PAD+SPLIT_SWAP_PAUSE_WIDTH) -#define MULTICALL_SPLIT_SWAP_PAUSE_T MULTICALL_SPLIT_PAUSE_T -#define MULTICALL_SPLIT_SWAP_PAUSE_B MULTICALL_SPLIT_PAUSE_B - -#define MULTICALL_SPLIT_SWAP_NAME_1_L MULTICALL_SPLIT_NAME_1_L -#define MULTICALL_SPLIT_SWAP_NAME_1_R REL_W(SPLIT_SWAP_NAME1_L_PAD+SPLIT_SWAP_NAME1_WIDTH) -#define MULTICALL_SPLIT_SWAP_NAME_1_T MULTICALL_SPLIT_NAME_2_T -#define MULTICALL_SPLIT_SWAP_NAME_1_B MULTICALL_SPLIT_NAME_2_B - -#define MULTICALL_SPLIT_SWAP_NAME_2_L REL_W(SPLIT_SWAP_NAME2_L_PAD) -#define MULTICALL_SPLIT_SWAP_NAME_2_R REL_W(SPLIT_SWAP_NAME2_L_PAD+SPLIT_SWAP_NAME2_WIDTH) -#define MULTICALL_SPLIT_SWAP_NAME_2_T MULTICALL_SPLIT_NAME_1_T -#define MULTICALL_SPLIT_SWAP_NAME_2_B MULTICALL_SPLIT_NAME_1_B - -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_L MULTICALL_SPLIT_SWAP_CID_1_L -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_R MULTICALL_SPLIT_SWAP_CID_1_R -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_T MULTICALL_SPLIT_ON_HOLD_TXT_T -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_B MULTICALL_SPLIT_ON_HOLD_TXT_B - -#define MULTICALL_SPLIT_SWAP_TIMER_L MULTICALL_SPLIT_SWAP_CID_2_L -#define MULTICALL_SPLIT_SWAP_TIMER_R MULTICALL_SPLIT_SWAP_CID_2_R -#define MULTICALL_SPLIT_SWAP_TIMER_T MULTICALL_SPLIT_TIMER_T -#define MULTICALL_SPLIT_SWAP_TIMER_B MULTICALL_SPLIT_TIMER_B - -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_L MULTICALL_SPLIT_SWAP_CID_2_L -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_R REL_W(SPLIT_TIMER_TXT_W_ICON_WIDTH) -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_T MULTICALL_SPLIT_TIMER_T -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_B MULTICALL_SPLIT_TIMER_B - -#define MULTICALL_SPLIT_SWAP_MORE_ICON_L REL_W(SPLIT_SWAP_MORE_BTN_L_PAD) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_R REL_W(SPLIT_SWAP_MORE_BTN_L_PAD+SPLIT_SWAP_MORE_BTN_WIDTH) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_T REL_H(SPLIT_SWAP_MORE_BTN_T_PAD) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_B REL_H(SPLIT_SWAP_MORE_BTN_T_PAD+SPLIT_SWAP_MORE_BTN_HEIGHT) -/* L[HLD] + R[ACT] */ - -/* - * End of MULTI-CALL SPLIT View - */ - - -/* - * MULTI-CALL LIST View - * In Portrait mode - */ -#define MULTICALL_LIST_L REL_W(0) -#define MULTICALL_LIST_R REL_W(MAIN_SCREEN_W) -#define MULTICALL_LIST_T REL_H(CONF_LIST_T_PAD) -#define MULTICALL_LIST_B REL_H(CONF_LIST_T_PAD+CONF_LIST_HEIGHT) - -#define MULTICALL_LIST_HOLD_L REL_W(CONF_HOLD_L_PAD) -#define MULTICALL_LIST_HOLD_R REL_W(CONF_HOLD_L_PAD+CONF_HOLD_WIDTH) -#define MULTICALL_LIST_HOLD_T REL_H(CONF_HOLD_T_PAD) -#define MULTICALL_LIST_HOLD_B REL_H(CONF_HOLD_T_PAD+CONF_HOLD_HEIGHT) - -#define MULTICALL_LIST_TIMER_L REL_W(0) -#define MULTICALL_LIST_TIMER_R REL_W(MAIN_SCREEN_W) -#define MULTICALL_LIST_TIMER_T REL_H(CONF_TIMER_T_PAD) -#define MULTICALL_LIST_TIMER_B REL_H(CONF_TIMER_T_PAD+CONF_TIMER_HEIGHT) - -#define MULTICALL_LIST_BIG_END_L REL_W(CALL_BIG_END_L_PAD) -#define MULTICALL_LIST_BIG_END_R REL_W(CALL_BIG_END_L_PAD+CALL_BIG_END_WIDTH) -#define MULTICALL_LIST_BIG_END_T REL_H(CALL_BIG_END_T_PAD) -#define MULTICALL_LIST_BIG_END_B REL_H(CALL_BIG_END_T_PAD+CALL_BIG_END_HEIGHT) -/* - * End of MULTI-CALL LIST View - */ - - -/* - * SIX Button Layout - * In Portrait mode - */ -#define SIX_BTN_1_L REL_W(SIX_BTN_COL1_L_PAD) -#define SIX_BTN_1_R REL_W(SIX_BTN_COL1_L_PAD+SIX_BTN_COL1_WIDTH) -#define SIX_BTN_2_L REL_W(SIX_BTN_COL2_L_PAD) -#define SIX_BTN_2_R REL_W(SIX_BTN_COL2_L_PAD+SIX_BTN_COL1_WIDTH) -#define SIX_BTN_3_L REL_W(SIX_BTN_COL3_L_PAD) -#define SIX_BTN_3_R REL_W(SIX_BTN_COL3_L_PAD+SIX_BTN_COL1_WIDTH) - -#define SIX_BTN_1_T REL_H(SIX_BTN_ROW1_T_PAD) -#define SIX_BTN_1_B REL_H(SIX_BTN_ROW1_T_PAD+SIX_BTN_ROW1_HEIGHT) -#define SIX_BTN_2_T REL_H(SIX_BTN_ROW2_T_PAD) -#define SIX_BTN_2_B REL_H(SIX_BTN_ROW2_T_PAD+SIX_BTN_ROW1_HEIGHT) - -#define SIX_BTN_BIG_END_L REL_W(CALL_BIG_END_L_PAD) -#define SIX_BTN_BIG_END_R REL_W(CALL_BIG_END_L_PAD+CALL_BIG_END_WIDTH) -#define SIX_BTN_BIG_END_T REL_H(CALL_BIG_END_T_PAD) -#define SIX_BTN_BIG_END_B REL_H(CALL_BIG_END_T_PAD+CALL_BIG_END_HEIGHT) - -#define SIX_BTN_INCOMING_1_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_1_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_1_T REL_H(INCMG_CALL_BTN1_T_PAD) -#define SIX_BTN_INCOMING_1_B REL_H(INCMG_CALL_BTN1_T_PAD+INCMG_CALL_BTN_HEIGHT) - -#define SIX_BTN_INCOMING_2_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_2_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_2_T REL_H(INCMG_CALL_BTN2_T_PAD) -#define SIX_BTN_INCOMING_2_B REL_H(INCMG_CALL_BTN2_T_PAD+INCMG_CALL_BTN_HEIGHT) - -#define SIX_BTN_INCOMING_3_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_3_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_3_T REL_H(INCMG_CALL_BTN3_T_PAD) -#define SIX_BTN_INCOMING_3_B REL_H(INCMG_CALL_BTN3_T_PAD+INCMG_CALL_BTN_HEIGHT) -/* - * End of SIX Button Layout - */ - -/* - * Navigation bar layout - */ -#define CALL_NAVIGATION_BAR_T REL_H(NAVIFRAME_T_PAD) -#define CALL_NAVIGATION_BAR_B REL_H(MAIN_SCREEN_H) -#define CALL_NAVIGATION_BAR_L REL_W(0) -#define CALL_NAVIGATION_BAR_R REL_W(MAIN_SCREEN_W) -/* - * End of Navigation bar layout - */ - - -/* - * END CALL View - * In Portrait mode - */ -#define ENDSINGLECALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L -#define ENDSINGLECALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R -#define ENDSINGLECALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T -#define ENDSINGLECALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B - -#define ENDSINGLECALL_CID_L DIALLING_CID_L -#define ENDSINGLECALL_CID_R DIALLING_CID_R -#define ENDSINGLECALL_CID_T DIALLING_CID_T -#define ENDSINGLECALL_CID_B DIALLING_CID_B - -#define ENDSINGLECALL_NAME_L DIALLING_NAME_L -#define ENDSINGLECALL_NAME_R DIALLING_NAME_R -#define ENDSINGLECALL_NAME_T DIALLING_NAME_T -#define ENDSINGLECALL_NAME_B DIALLING_NAME_B - -#define ENDSINGLECALL_NUMBER_L DIALLING_NUMBER_L -#define ENDSINGLECALL_NUMBER_R DIALLING_NUMBER_R -#define ENDSINGLECALL_NUMBER_T DIALLING_NUMBER_T -#define ENDSINGLECALL_NUMBER_B DIALLING_NUMBER_B - -#define ENDSINGLECALL_TIMER_L INCALL_TIMER_L -#define ENDSINGLECALL_TIMER_R INCALL_TIMER_R -#define ENDSINGLECALL_TIMER_T INCALL_TIMER_T -#define ENDSINGLECALL_TIMER_B INCALL_TIMER_B - -#define ENDSINGLECALL_VIDEO_BTN_L REL_W(VIDEO_BTN_POS1_L_PAD) -#define ENDSINGLECALL_VIDEO_BTN_R REL_W(VIDEO_BTN_POS1_L_PAD+VIDEO_BTN_POS1_WIDTH) -#define ENDSINGLECALL_VIDEO_BTN_T REL_H(VIDEO_BTN_POS1_T_PAD) -#define ENDSINGLECALL_VIDEO_BTN_B REL_H(VIDEO_BTN_POS1_T_PAD+VIDEO_BTN_POS1_HEIGHT) - -#define ENDSINGLECALL_VIDEO2_BTN_L REL_W(VIDEO_BTN_POS2_L_PAD) -#define ENDSINGLECALL_VIDEO2_BTN_R REL_W(VIDEO_BTN_POS2_L_PAD+VIDEO_BTN_POS2_WIDTH) -#define ENDSINGLECALL_VIDEO2_BTN_T REL_H(VIDEO_BTN_POS2_T_PAD) -#define ENDSINGLECALL_VIDEO2_BTN_B REL_H(VIDEO_BTN_POS2_T_PAD+VIDEO_BTN_POS2_HEIGHT) - -#define ENDSINGLECALL_VOICE_BTN_L REL_W(VOICE_BTN_POS1_L_PAD) -#define ENDSINGLECALL_VOICE_BTN_R REL_W(VOICE_BTN_POS1_L_PAD+VOICE_BTN_POS1_WIDTH) -#define ENDSINGLECALL_VOICE_BTN_T ENDSINGLECALL_VIDEO_BTN_T -#define ENDSINGLECALL_VOICE_BTN_B ENDSINGLECALL_VIDEO_BTN_B - -#define ENDSINGLECALL_VOICE2_BTN_L ENDSINGLECALL_VOICE_BTN_L -#define ENDSINGLECALL_VOICE2_BTN_R ENDSINGLECALL_VOICE_BTN_R -#define ENDSINGLECALL_VOICE2_BTN_T ENDSINGLECALL_VIDEO2_BTN_T -#define ENDSINGLECALL_VOICE2_BTN_B ENDSINGLECALL_VIDEO2_BTN_B - -#define ENDSINGLECALL_MSG_BTN_L REL_W(MSG_BTN_POS1_L_PAD) -#define ENDSINGLECALL_MSG_BTN_R REL_W(MSG_BTN_POS1_L_PAD+MSG_BTN_POS1_WIDTH) -#define ENDSINGLECALL_MSG_BTN_T REL_H(MSG_BTN_POS1_T_PAD) -#define ENDSINGLECALL_MSG_BTN_B REL_H(MSG_BTN_POS1_T_PAD+MSG_BTN_POS1_HEIGHT) - -#define ENDSINGLECALL_MSG2_BTN_L ENDSINGLECALL_MSG_BTN_L -#define ENDSINGLECALL_MSG2_BTN_R ENDSINGLECALL_MSG_BTN_R -#define ENDSINGLECALL_MSG2_BTN_T REL_H(MSG_BTN_POS2_T_PAD) -#define ENDSINGLECALL_MSG2_BTN_B REL_H(MSG_BTN_POS2_T_PAD+MSG_BTN_POS2_HEIGHT) - -#define ENDSINGLECALL_CONTACT_BTN_L REL_W(CONTACT_BTN_POS1_L_PAD) -#define ENDSINGLECALL_CONTACT_BTN_R REL_W(CONTACT_BTN_POS1_L_PAD+CONTACT_BTN_POS1_WIDTH) -#define ENDSINGLECALL_CONTACT_BTN_T REL_H(CONTACT_BTN_POS1_T_PAD) -#define ENDSINGLECALL_CONTACT_BTN_B REL_H(CONTACT_BTN_POS1_T_PAD+CONTACT_BTN_POS1_HEIGHT) -/* - * End of END CALL View - */ -#endif /*__VCUI_VIEW_LAYOUT_WVGA__*/ diff --git a/ui/vcui-view-layout.h b/ui/vcui-view-layout.h deleted file mode 100755 index b24e370..0000000 --- a/ui/vcui-view-layout.h +++ /dev/null @@ -1,592 +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 __VCUI_VIEW_LAYOUT__ -#define __VCUI_VIEW_LAYOUT__ - -#define COLOR_DEFAULT 0 0 0 255 -#define COLOR_BG_ALPHA 0 0 0 0 -#define COLOR_BG_FOR_HELD_CALL_DIM 0 0 0 150 - -/*#define BTN_EDGE_W 9*/ - -/*List of the screen and widget dimensions as per GUI*/ -/*Portrait mode*/ -#define MAIN_SCREEN_W 480 -#define MAIN_SCREEN_H 800 - -#define REL_W(x) (x / MAIN_SCREEN_W) -#define REL_H(x) (x / MAIN_SCREEN_H) - -/* Window layout with nothing (only indicator) */ -/* -#define WL_INDI_H 52 -#define MAIN_INDICATOR_W MAIN_SCREEN_W -#define MAIN_INDICATOR_H 748 -#define REL_INDI_W(x) (x / MAIN_INDICATOR_W) -#define REL_INDI_H(x) (x / MAIN_INDICATOR_H) -*/ - -/* Window layout with titlebar */ -/* -#define WL_TB_H 92 -#define MAIN_TITLEBAR_W MAIN_SCREEN_W -#define MAIN_TITLEBAR_H 702 -#define REL_TITLEBAR_W(x) (x / MAIN_TITLEBAR_W) -#define REL_TITLEBAR_H(x) (x / MAIN_TITLEBAR_H) -*/ - -/* Window layout with navibar */ -/*#define WL_NB_H 94*/ -#define MAIN_NAVIBAR_W MAIN_SCREEN_W -#define MAIN_NAVIBAR_H 706 -#define REL_NAVIBAR_W(x) (x / MAIN_NAVIBAR_W) -#define REL_NAVIBAR_H(x) (x / MAIN_NAVIBAR_H) - -/* Main View (MO/MT view) */ -#define DIALLING_STATUS_L REL_W(12) -#define DIALLING_STATUS_R REL_W(468) -#define DIALLING_STATUS_T REL_H(428) -#define DIALLING_STATUS_B REL_H(460) - -#define DIALLING_MT_STATUS_L REL_W(123) -#define DIALLING_MT_STATUS_R REL_W(357) -#define DIALLING_MT_STATUS_T REL_H(375) -#define DIALLING_MT_STATUS_B REL_H(407) - -#define DIALLING_NAME_L REL_W(12) -#define DIALLING_NAME_R REL_W(468) -#define DIALLING_NAME_T REL_H(52) -#define DIALLING_NAME_B REL_H(102) - -#define DIALLING_NUMBER_L DIALLING_NAME_L -#define DIALLING_NUMBER_R DIALLING_NAME_R -#define DIALLING_NUMBER_T REL_H(106) -#define DIALLING_NUMBER_B REL_H(138) - -#define DIALLING_CID_L REL_W(145) -#define DIALLING_CID_R REL_W(335) -#define DIALLING_CID_T REL_H(145) -#define DIALLING_CID_B REL_H(335) - -#define DIALLING_BACKGROUND_CID_L REL_W(0) -#define DIALLING_BACKGROUND_CID_R REL_W(MAIN_SCREEN_W) -#define DIALLING_BACKGROUND_CID_T REL_H(0) -#define DIALLING_BACKGROUND_CID_B REL_H(MAIN_SCREEN_H) - -/* accept */ -#define DIALLING_MT_BTN1_L REL_W(26) -#define DIALLING_MT_BTN1_R REL_W(228) -#define DIALLING_MT_BTN1_T REL_H(620) -#define DIALLING_MT_BTN1_B REL_H(690) - -/* reject */ -#define DIALLING_MT_BTN2_L REL_W(252) -#define DIALLING_MT_BTN2_R REL_W(454) -#define DIALLING_MT_BTN2_T DIALLING_MT_BTN1_T -#define DIALLING_MT_BTN2_B DIALLING_MT_BTN1_B -/* End of Main View (MO/MT view) */ - -/* MT LOCK View */ -#define REL_LOCK_W(x) (x / 322) -#define REL_LOCK_H(x) (x / 124) - -#define INCOMING_LOCK_ACCEPT_BG_L REL_W(-182) -#define INCOMING_LOCK_ACCEPT_BG_R REL_W(140) -#define INCOMING_LOCK_ACCEPT_BG_T REL_H(591) -#define INCOMING_LOCK_ACCEPT_BG_B REL_H(715) - -#define INCOMING_LOCK_ACCEPT_ICON_L REL_LOCK_W(202) -#define INCOMING_LOCK_ACCEPT_ICON_R REL_LOCK_W(272) -#define INCOMING_LOCK_ACCEPT_ICON_T REL_LOCK_H(23) -#define INCOMING_LOCK_ACCEPT_ICON_B REL_LOCK_H(93) - -#define INCOMING_LOCK_ACCEPT_TEXT_L REL_LOCK_W(30) -#define INCOMING_LOCK_ACCEPT_TEXT_R REL_LOCK_W(182) -#define INCOMING_LOCK_ACCEPT_TEXT_T INCOMING_LOCK_ACCEPT_ICON_T -#define INCOMING_LOCK_ACCEPT_TEXT_B INCOMING_LOCK_ACCEPT_ICON_B - -#define INCOMING_LOCK_REJECT_BG_L REL_W(340) -#define INCOMING_LOCK_REJECT_BG_R REL_W(662) -#define INCOMING_LOCK_REJECT_BG_T INCOMING_LOCK_ACCEPT_BG_T -#define INCOMING_LOCK_REJECT_BG_B INCOMING_LOCK_ACCEPT_BG_B - -#define INCOMING_LOCK_REJECT_ICON_L REL_LOCK_W(50) -#define INCOMING_LOCK_REJECT_ICON_R REL_LOCK_W(120) -#define INCOMING_LOCK_REJECT_ICON_T INCOMING_LOCK_ACCEPT_ICON_T -#define INCOMING_LOCK_REJECT_ICON_B INCOMING_LOCK_ACCEPT_ICON_B - -#define INCOMING_LOCK_REJECT_TEXT_L REL_LOCK_W(130) -#define INCOMING_LOCK_REJECT_TEXT_R REL_LOCK_W(282) -#define INCOMING_LOCK_REJECT_TEXT_T INCOMING_LOCK_REJECT_ICON_T -#define INCOMING_LOCK_REJECT_TEXT_B INCOMING_LOCK_REJECT_ICON_B - -#define REL_LOCK_MSG_W(x) (x / 232) -#define REL_LOCK_MSG_H(x) (x / 125) -/* End of MT LOCK View */ - -/* KEYPAD View */ -#define INCALL_DIALER_TIMER_T REL_H(241) -#define INCALL_DIALER_TIMER_B REL_H(271) -#define INCALL_DIALER_TIMER_L REL_W(300) -#define INCALL_DIALER_TIMER_R REL_W(454) - -#define INCALL_DIALER_NAME_T INCALL_DIALER_TIMER_T -#define INCALL_DIALER_NAME_B INCALL_DIALER_TIMER_B -#define INCALL_DIALER_NAME_L REL_W(27) -#define INCALL_DIALER_NAME_R REL_W(300) - -/* -#define DIALLING_KEYPAD_T_BF REL_H(319) -#define DIALLING_KEYPAD_B_BF REL_H(710) -*/ - -#define DIALLING_KEYPAD_T REL_H(289) -#define DIALLING_KEYPAD_B REL_H(680) -#define DIALLING_KEYPAD_L REL_W(0) -#define DIALLING_KEYPAD_R REL_W(MAIN_SCREEN_W) -#define KEYPAD_W MAIN_SCREEN_W -#define KEYPAD_H 391 - -#define DIALLING_ENTRY_TEXT_T REL_H(46) -#define DIALLING_ENTRY_TEXT_B REL_H(186) -#define DIALLING_ENTRY_TEXT_L REL_W(26) -#define DIALLING_ENTRY_TEXT_R REL_W(454) -#define REL_KEYPAD_W(x) ((x)/KEYPAD_W) -#define REL_KEYPAD_H(y) ((y)/KEYPAD_H) - -#define DIALER_BTN1_T REL_H(712) -#define DIALER_BTN1_B REL_H(782) -#define DIALER_BTN1_L REL_W(27) -#define DIALER_BTN1_R REL_W(229) - -#define DIALER_BTN2_T DIALER_BTN1_T -#define DIALER_BTN2_B DIALER_BTN1_B -#define DIALER_BTN2_L REL_W(252) -#define DIALER_BTN2_R REL_W(454) -/* End of KEYPAD View */ - -/* INCALL View : Use Windows Layout with nothing (only indicator) */ -/*Portrait view - START*/ -#define INCALL_CID_T DIALLING_CID_T -#define INCALL_CID_B DIALLING_CID_B -#define INCALL_CID_L DIALLING_CID_L -#define INCALL_CID_R DIALLING_CID_R - -/* -#define INCALL_CID_DIM_T DIALLING_CID_T -#define INCALL_CID_DIM_B DIALLING_CID_B -#define INCALL_CID_DIM_L REL_W(145) -#define INCALL_CID_DIM_R REL_W(334) -*/ - -#define INCALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L -#define INCALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R -#define INCALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T -#define INCALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B - -#define INCALL_NAME_T DIALLING_NAME_T -#define INCALL_NAME_B DIALLING_NAME_B -#define INCALL_NAME_L DIALLING_NAME_L -#define INCALL_NAME_R DIALLING_NAME_R - -#define INCALL_NUMBER_T DIALLING_NUMBER_T -#define INCALL_NUMBER_B DIALLING_NUMBER_B -#define INCALL_NUMBER_L DIALLING_NUMBER_L -#define INCALL_NUMBER_R DIALLING_NUMBER_R - -#define INCALL_HOLD_T REL_H(389) -#define INCALL_HOLD_B REL_H(443) -#define INCALL_HOLD_L REL_W(26) -#define INCALL_HOLD_R REL_W(99) - -#define INCALL_TIMER_T REL_H(400) -#define INCALL_TIMER_B REL_H(432) -#define INCALL_TIMER_L REL_W(173) -#define INCALL_TIMER_R REL_W(454) - -#define INCALL_BACKGROUND_SHARE_L REL_W(0) -#define INCALL_BACKGROUND_SHARE_R REL_W(MAIN_SCREEN_W) -#define INCALL_BACKGROUND_SHARE_T REL_H(365) -#define INCALL_BACKGROUND_SHARE_B REL_H(774) -/*Portrait view - END*/ - -/* MULTICALL_SPLIT View : Use Windows Layout with no indicator */ -/*portrait mode - START*/ -/*L[ACT] + R[HLD]*/ -#define MULTICALL_SPLIT_BACKGROUND_CID_L INCALL_BACKGROUND_CID_L -#define MULTICALL_SPLIT_BACKGROUND_CID_R INCALL_BACKGROUND_CID_R -#define MULTICALL_SPLIT_BACKGROUND_CID_T INCALL_BACKGROUND_CID_T -#define MULTICALL_SPLIT_BACKGROUND_CID_B INCALL_BACKGROUND_CID_B - -#define MULTICALL_SPLIT_CID_1_T REL_H(136) -#define MULTICALL_SPLIT_CID_1_B REL_H(326) -#define MULTICALL_SPLIT_CID_1_L REL_W(50) -#define MULTICALL_SPLIT_CID_1_R REL_W(240) - -#define MULTICALL_SPLIT_PAUSE_T REL_H(282) -#define MULTICALL_SPLIT_PAUSE_B REL_H(322) -#define MULTICALL_SPLIT_PAUSE_L REL_W(54) -#define MULTICALL_SPLIT_PAUSE_R REL_W(94) - -#define MULTICALL_SPLIT_CID_2_T REL_H(169) -#define MULTICALL_SPLIT_CID_2_B REL_H(299) -#define MULTICALL_SPLIT_CID_2_L REL_W(305) -#define MULTICALL_SPLIT_CID_2_R REL_W(435) - -#define MULTICALL_SPLIT_PLAY_T REL_H(266) -#define MULTICALL_SPLIT_PLAY_B REL_H(291) -#define MULTICALL_SPLIT_PLAY_L REL_W(313) -#define MULTICALL_SPLIT_PLAY_R REL_W(338) - -#define MULTICALL_SPLIT_NAME_1_T REL_H(90) -#define MULTICALL_SPLIT_NAME_1_B REL_H(126) -#define MULTICALL_SPLIT_NAME_1_L REL_W(24) -#define MULTICALL_SPLIT_NAME_1_R REL_W(266) - -#define MULTICALL_SPLIT_NAME_2_T REL_H(136) -#define MULTICALL_SPLIT_NAME_2_B REL_H(160) -#define MULTICALL_SPLIT_NAME_2_L REL_W(280) -#define MULTICALL_SPLIT_NAME_2_R REL_W(450) - -/* -#define MULTICALL_SPLIT_ACTIVE_ICON_T REL_H(343) -#define MULTICALL_SPLIT_ACTIVE_ICON_B REL_H(371) -#define MULTICALL_SPLIT_ACTIVE_ICON_L REL_W(97) -#define MULTICALL_SPLIT_ACTIVE_ICON_R REL_W(118) -*/ - -#define MULTICALL_SPLIT_ACTIVE_TXT_T MULTICALL_SPLIT_ACTIVE_ICON_T -#define MULTICALL_SPLIT_ACTIVE_TXT_B MULTICALL_SPLIT_ACTIVE_ICON_B -#define MULTICALL_SPLIT_ACTIVE_TXT_L REL_W(120) -#define MULTICALL_SPLIT_ACTIVE_TXT_R MULTICALL_SPLIT_CID_1_R - -#define MULTICALL_SPLIT_MORE_ICON_T REL_H(308) -#define MULTICALL_SPLIT_MORE_ICON_B REL_H(332) -#define MULTICALL_SPLIT_MORE_ICON_L REL_W(409) -#define MULTICALL_SPLIT_MORE_ICON_R REL_W(433) - -/* -#define MULTICALL_SPLIT_ON_HOLD_ICON_T REL_H(308) -#define MULTICALL_SPLIT_ON_HOLD_ICON_B REL_H(332) -#define MULTICALL_SPLIT_ON_HOLD_ICON_L REL_W(320) -#define MULTICALL_SPLIT_ON_HOLD_ICON_R REL_W(341) -*/ - -#define MULTICALL_SPLIT_ON_HOLD_TXT_T REL_H(308) -#define MULTICALL_SPLIT_ON_HOLD_TXT_B REL_H(332) -#define MULTICALL_SPLIT_ON_HOLD_TXT_L REL_W(303) -#define MULTICALL_SPLIT_ON_HOLD_TXT_R REL_W(433) - -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_T REL_H(308) -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_B REL_H(332) -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_L REL_W(303) -#define MULTICALL_SPLIT_ON_HOLD_TXT_WITH_ICON_R REL_W(409) - -#define MULTICALL_SPLIT_TIMER_T REL_H(343) -#define MULTICALL_SPLIT_TIMER_B REL_H(371) -#define MULTICALL_SPLIT_TIMER_L REL_W(56) -#define MULTICALL_SPLIT_TIMER_R REL_W(246) -/*L[ACT] + R[HLD]*/ - -/*L[HLD] + R[ACT]*/ -#define MULTICALL_SPLIT_SWAP_CID_1_T MULTICALL_SPLIT_CID_2_T -#define MULTICALL_SPLIT_SWAP_CID_1_B MULTICALL_SPLIT_CID_2_B -#define MULTICALL_SPLIT_SWAP_CID_1_L REL_W(49) -#define MULTICALL_SPLIT_SWAP_CID_1_R REL_W(179) - -#define MULTICALL_SPLIT_SWAP_PLAY_T MULTICALL_SPLIT_PLAY_T -#define MULTICALL_SPLIT_SWAP_PLAY_B MULTICALL_SPLIT_PLAY_B -#define MULTICALL_SPLIT_SWAP_PLAY_L REL_W(57) -#define MULTICALL_SPLIT_SWAP_PLAY_R REL_W(82) - -#define MULTICALL_SPLIT_SWAP_CID_2_T MULTICALL_SPLIT_CID_1_T -#define MULTICALL_SPLIT_SWAP_CID_2_B MULTICALL_SPLIT_CID_1_B -#define MULTICALL_SPLIT_SWAP_CID_2_L REL_W(244) -#define MULTICALL_SPLIT_SWAP_CID_2_R REL_W(434) - -#define MULTICALL_SPLIT_SWAP_PAUSE_T MULTICALL_SPLIT_PAUSE_T -#define MULTICALL_SPLIT_SWAP_PAUSE_B MULTICALL_SPLIT_PAUSE_B -#define MULTICALL_SPLIT_SWAP_PAUSE_L REL_W(248) -#define MULTICALL_SPLIT_SWAP_PAUSE_R REL_W(288) - -#define MULTICALL_SPLIT_SWAP_NAME_1_T MULTICALL_SPLIT_NAME_2_T -#define MULTICALL_SPLIT_SWAP_NAME_1_B MULTICALL_SPLIT_NAME_2_B -#define MULTICALL_SPLIT_SWAP_NAME_1_L MULTICALL_SPLIT_NAME_1_L -#define MULTICALL_SPLIT_SWAP_NAME_1_R REL_W(194) - -#define MULTICALL_SPLIT_SWAP_NAME_2_T MULTICALL_SPLIT_NAME_1_T -#define MULTICALL_SPLIT_SWAP_NAME_2_B MULTICALL_SPLIT_NAME_1_B -#define MULTICALL_SPLIT_SWAP_NAME_2_L REL_W(208) -#define MULTICALL_SPLIT_SWAP_NAME_2_R REL_W(450) - -/* -#define MULTICALL_SPLIT_SWAP_ACTIVE_ICON_T MULTICALL_SPLIT_ACTIVE_ICON_T -#define MULTICALL_SPLIT_SWAP_ACTIVE_ICON_B MULTICALL_SPLIT_ACTIVE_ICON_B -#define MULTICALL_SPLIT_SWAP_ACTIVE_ICON_L REL_W(287) -#define MULTICALL_SPLIT_SWAP_ACTIVE_ICON_R REL_W(308) -*/ - -#define MULTICALL_SPLIT_SWAP_ACTIVE_TXT_T MULTICALL_SPLIT_ACTIVE_ICON_T -#define MULTICALL_SPLIT_SWAP_ACTIVE_TXT_B MULTICALL_SPLIT_ACTIVE_ICON_B -#define MULTICALL_SPLIT_SWAP_ACTIVE_TXT_L REL_W(310) -#define MULTICALL_SPLIT_SWAP_ACTIVE_TXT_R MULTICALL_SPLIT_SWAP_CID_2_R - -/* -#define MULTICALL_SPLIT_SWAP_ON_HOLD_ICON_T MULTICALL_SPLIT_ON_HOLD_ICON_T -#define MULTICALL_SPLIT_SWAP_ON_HOLD_ICON_B MULTICALL_SPLIT_ON_HOLD_ICON_B -#define MULTICALL_SPLIT_SWAP_ON_HOLD_ICON_L REL_W(67) -#define MULTICALL_SPLIT_SWAP_ON_HOLD_ICON_R REL_W(88) -*/ - -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_T REL_H(308) -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_B REL_H(332) -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_L REL_W(50) -#define MULTICALL_SPLIT_SWAP_ON_HOLD_TXT_R REL_W(180) - -#define MULTICALL_SPLIT_SWAP_MORE_ICON_T REL_H(343) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_B REL_H(371) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_L REL_W(412) -#define MULTICALL_SPLIT_SWAP_MORE_ICON_R REL_W(436) - -#define MULTICALL_SPLIT_SWAP_TIMER_T REL_H(343) -#define MULTICALL_SPLIT_SWAP_TIMER_B REL_H(371) -#define MULTICALL_SPLIT_SWAP_TIMER_L REL_W(246) -#define MULTICALL_SPLIT_SWAP_TIMER_R REL_W(436) - -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_T REL_H(343) -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_B REL_H(371) -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_L REL_W(246) -#define MULTICALL_SPLIT_SWAP_TIMER_WITH_ICON_R REL_W(406) -/*L[HLD] + R[ACT]*/ -/*portrait mode - END*/ -/* End of MULTICALL_SPLIT View : Use Windows Layout with no indicator */ - -/* MULTICALL_LIST View */ -/* -#define MULTICALL_CID_T REL_TITLEBAR_H(8) -#define MULTICALL_CID_B REL_TITLEBAR_H(428) -#define MULTICALL_CID_L REL_TITLEBAR_W(15) -#define MULTICALL_CID_R REL_TITLEBAR_W(468) - -#define MULTICALL_NAME_T REL_TITLEBAR_H(218) -#define MULTICALL_NAME_B REL_TITLEBAR_H(268) - -#define MULTICALL_NUM_T REL_TITLEBAR_H(48) -#define MULTICALL_NUM_B REL_TITLEBAR_H(88) -*/ - -#define MULTICALL_LIST_T REL_H(120) -#define MULTICALL_LIST_B REL_H(475) -#define MULTICALL_LIST_L REL_W(0) -#define MULTICALL_LIST_R REL_W(MAIN_SCREEN_W) - -#define MULTICALL_LIST_HOLD_T REL_H(609) -#define MULTICALL_LIST_HOLD_B REL_H(663) -#define MULTICALL_LIST_HOLD_L REL_W(381) -#define MULTICALL_LIST_HOLD_R REL_W(454) - -#define MULTICALL_LIST_TIMER_T REL_H(620) -#define MULTICALL_LIST_TIMER_B REL_H(652) -#define MULTICALL_LIST_TIMER_L REL_W(0) -#define MULTICALL_LIST_TIMER_R REL_W(MAIN_SCREEN_W) - -#define MULTICALL_LIST_BIG_END_T REL_H(704) -#define MULTICALL_LIST_BIG_END_B REL_H(774) -#define MULTICALL_LIST_BIG_END_L REL_W(26) -#define MULTICALL_LIST_BIG_END_R REL_W(454) -/* End of MULTICALL_LIST View */ - -/* Six button layout, Without Window Layout */ -#define SIX_BTN_1_L REL_W(26) -#define SIX_BTN_1_R REL_W(160) -#define SIX_BTN_2_L REL_W(173) -#define SIX_BTN_2_R REL_W(307) -#define SIX_BTN_3_L REL_W(320) -#define SIX_BTN_3_R REL_W(454) - -#define SIX_BTN_1_T REL_H(494) -#define SIX_BTN_1_B REL_H(582) -#define SIX_BTN_2_T REL_H(595) -#define SIX_BTN_2_B REL_H(683) - -#define SIX_BTN_BIG_END_L REL_W(26) -#define SIX_BTN_BIG_END_R REL_W(454) -#define SIX_BTN_BIG_END_T REL_H(712) -#define SIX_BTN_BIG_END_B REL_H(782) - -#define SIX_BTN_INCOMING_1_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_1_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_1_T REL_H(438) -#define SIX_BTN_INCOMING_1_B REL_H(508) - -#define SIX_BTN_INCOMING_2_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_2_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_2_T REL_H(524) -#define SIX_BTN_INCOMING_2_B REL_H(594) - -#define SIX_BTN_INCOMING_3_L SIX_BTN_BIG_END_L -#define SIX_BTN_INCOMING_3_R SIX_BTN_BIG_END_R -#define SIX_BTN_INCOMING_3_T REL_H(610) -#define SIX_BTN_INCOMING_3_B REL_H(680) -/* Six Button Layout End */ - -/* Six button layout, Window Layout : INDICATOR */ -/* -#define INDI_SIX_BTN_1_L REL_INDI_W(26) -#define INDI_SIX_BTN_1_R REL_INDI_W(160) -#define INDI_SIX_BTN_2_L REL_INDI_W(173) -#define INDI_SIX_BTN_2_R REL_INDI_W(307) -#define INDI_SIX_BTN_3_L REL_INDI_W(320) -#define INDI_SIX_BTN_3_R REL_INDI_W(454) - -#define INDI_SIX_BTN_1_T_BF REL_INDI_H(417) -#define INDI_SIX_BTN_1_B_BF REL_INDI_H(505) -#define INDI_SIX_BTN_2_T_BF REL_INDI_H(518) -#define INDI_SIX_BTN_2_B_BF REL_INDI_H(606) - -#define INDI_SIX_BTN_1_T REL_INDI_H(467) -#define INDI_SIX_BTN_1_B REL_INDI_H(555) -#define INDI_SIX_BTN_2_T REL_INDI_H(568) -#define INDI_SIX_BTN_2_B REL_INDI_H(656) - -#define INDI_SIX_BTN_BIG_END_L REL_INDI_W(26) -#define INDI_SIX_BTN_BIG_END_R REL_INDI_W(454) - -#define INDI_SIX_BTN_BIG_END_T_BF REL_INDI_H(635) -#define INDI_SIX_BTN_BIG_END_B_BF REL_INDI_H(705) - -#define INDI_SIX_BTN_BIG_END_T REL_INDI_H(685) -#define INDI_SIX_BTN_BIG_END_B REL_INDI_H(755) - -#define INDI_SIX_BTN_INCOMING_1_L INDI_SIX_BTN_BIG_END_L -#define INDI_SIX_BTN_INCOMING_1_R INDI_SIX_BTN_BIG_END_R -#define INDI_SIX_BTN_INCOMING_1_T REL_INDI_H(411) -#define INDI_SIX_BTN_INCOMING_1_B REL_INDI_H(481) - -#define INDI_SIX_BTN_INCOMING_2_L INDI_SIX_BTN_BIG_END_L -#define INDI_SIX_BTN_INCOMING_2_R INDI_SIX_BTN_BIG_END_R -#define INDI_SIX_BTN_INCOMING_2_T REL_INDI_H(497) -#define INDI_SIX_BTN_INCOMING_2_B REL_INDI_H(567) - -#define INDI_SIX_BTN_INCOMING_3_L INDI_SIX_BTN_BIG_END_L -#define INDI_SIX_BTN_INCOMING_3_R INDI_SIX_BTN_BIG_END_R -#define INDI_SIX_BTN_INCOMING_3_T REL_INDI_H(583) -#define INDI_SIX_BTN_INCOMING_3_B REL_INDI_H(653) -*/ -/* Six Button Layout End */ - -/* Six button layout, Window Layout : Titlebar */ -/* -#define TITLEBAR_SIX_BTN_1_L REL_TITLEBAR_W(18) -#define TITLEBAR_SIX_BTN_1_R REL_TITLEBAR_W(160) -#define TITLEBAR_SIX_BTN_2_L REL_TITLEBAR_W(169) -#define TITLEBAR_SIX_BTN_2_R REL_TITLEBAR_W(311) -#define TITLEBAR_SIX_BTN_3_L REL_TITLEBAR_W(320) -#define TITLEBAR_SIX_BTN_3_R REL_TITLEBAR_W(462) - -#define TITLEBAR_SIX_BTN_1_T REL_TITLEBAR_H(477) -#define TITLEBAR_SIX_BTN_1_B REL_TITLEBAR_H(569) -#define TITLEBAR_SIX_BTN_2_T REL_TITLEBAR_H(580) -#define TITLEBAR_SIX_BTN_2_B REL_TITLEBAR_H(672) - -#define TITLEBAR_SIX_BTN_TXT_1_T REL_TITLEBAR_H(533) -#define TITLEBAR_SIX_BTN_TXT_1_B REL_TITLEBAR_H(562) -#define TITLEBAR_SIX_BTN_TXT_2_T REL_TITLEBAR_H(636) -#define TITLEBAR_SIX_BTN_TXT_2_B REL_TITLEBAR_H(665) - -#define TITLEBAR_SIX_BTN_TXT_1_M1_T REL_TITLEBAR_H(580) -#define TITLEBAR_SIX_BTN_TXT_1_M1_B REL_TITLEBAR_H(625) -#define TITLEBAR_SIX_BTN_TXT_1_M2_T REL_TITLEBAR_H(627) -#define TITLEBAR_SIX_BTN_TXT_1_M2_B REL_TITLEBAR_H(672) - -#define TITLEBAR_SIX_BTN_TXT_2_M1_T REL_TITLEBAR_H(477) -#define TITLEBAR_SIX_BTN_TXT_2_M1_B REL_TITLEBAR_H(569) -#define TITLEBAR_SIX_BTN_TXT_2_M2_T REL_TITLEBAR_H(580) -#define TITLEBAR_SIX_BTN_TXT_2_M2_B REL_TITLEBAR_H(672) -*/ -/* Six Button Layout End */ - -/* Navigation bar layout */ -#define CALL_NAVIGATION_BAR_T REL_H(40) -#define CALL_NAVIGATION_BAR_B REL_H(MAIN_SCREEN_H) -#define CALL_NAVIGATION_BAR_L REL_W(0) -#define CALL_NAVIGATION_BAR_R REL_W(MAIN_SCREEN_W) -/* Navigation bar layout */ - -/* End call layout */ -#define ENDSINGLECALL_BACKGROUND_CID_L DIALLING_BACKGROUND_CID_L -#define ENDSINGLECALL_BACKGROUND_CID_R DIALLING_BACKGROUND_CID_R -#define ENDSINGLECALL_BACKGROUND_CID_T DIALLING_BACKGROUND_CID_T -#define ENDSINGLECALL_BACKGROUND_CID_B DIALLING_BACKGROUND_CID_B - -#define ENDSINGLECALL_CID_L REL_W(145) -#define ENDSINGLECALL_CID_R REL_W(335) -#define ENDSINGLECALL_CID_T REL_H(145) -#define ENDSINGLECALL_CID_B REL_H(335) - -#define ENDSINGLECALL_NAME_L DIALLING_NAME_L -#define ENDSINGLECALL_NAME_R DIALLING_NAME_R -#define ENDSINGLECALL_NAME_T DIALLING_NAME_T -#define ENDSINGLECALL_NAME_B DIALLING_NAME_B - -#define ENDSINGLECALL_NUMBER_L DIALLING_NUMBER_L -#define ENDSINGLECALL_NUMBER_R DIALLING_NUMBER_R -#define ENDSINGLECALL_NUMBER_T DIALLING_NUMBER_T -#define ENDSINGLECALL_NUMBER_B DIALLING_NUMBER_B - -#define ENDSINGLECALL_TIMER_L REL_W(173) -#define ENDSINGLECALL_TIMER_R REL_W(454) -#define ENDSINGLECALL_TIMER_T REL_H(400) -#define ENDSINGLECALL_TIMER_B REL_H(432) - -#define ENDSINGLECALL_VIDEO_BTN_L REL_W(26) -#define ENDSINGLECALL_VIDEO_BTN_R REL_W(228) -#define ENDSINGLECALL_VIDEO_BTN_T REL_H(534) -#define ENDSINGLECALL_VIDEO_BTN_B REL_H(604) - -#define ENDSINGLECALL_VIDEO2_BTN_L REL_W(26) -#define ENDSINGLECALL_VIDEO2_BTN_R REL_W(228) -#define ENDSINGLECALL_VIDEO2_BTN_T REL_H(620) -#define ENDSINGLECALL_VIDEO2_BTN_B REL_H(690) - -#define ENDSINGLECALL_VOICE_BTN_L REL_W(252) -#define ENDSINGLECALL_VOICE_BTN_R REL_W(454) -#define ENDSINGLECALL_VOICE_BTN_T ENDSINGLECALL_VIDEO_BTN_T -#define ENDSINGLECALL_VOICE_BTN_B ENDSINGLECALL_VIDEO_BTN_B - -#define ENDSINGLECALL_VOICE2_BTN_L REL_W(252) -#define ENDSINGLECALL_VOICE2_BTN_R REL_W(454) -#define ENDSINGLECALL_VOICE2_BTN_T ENDSINGLECALL_VIDEO2_BTN_T -#define ENDSINGLECALL_VOICE2_BTN_B ENDSINGLECALL_VIDEO2_BTN_B - -#define ENDSINGLECALL_MSG_BTN_L REL_W(26) -#define ENDSINGLECALL_MSG_BTN_R REL_W(454) -#define ENDSINGLECALL_MSG_BTN_T REL_H(620) -#define ENDSINGLECALL_MSG_BTN_B REL_H(690) - -#define ENDSINGLECALL_MSG2_BTN_L REL_W(26) -#define ENDSINGLECALL_MSG2_BTN_R REL_W(454) -#define ENDSINGLECALL_MSG2_BTN_T REL_H(706) -#define ENDSINGLECALL_MSG2_BTN_B REL_H(776) - -#define ENDSINGLECALL_CONTACT_BTN_L REL_W(26) -#define ENDSINGLECALL_CONTACT_BTN_R REL_W(454) -#define ENDSINGLECALL_CONTACT_BTN_T REL_H(706) -#define ENDSINGLECALL_CONTACT_BTN_B REL_H(776) -/* End call layout */ - #endif /*__VCUI_VIEW_LAYOUT__*/ diff --git a/ui/vcui-view-multi-call-conf.c b/ui/vcui-view-multi-call-conf.c deleted file mode 100755 index 5b6c641..0000000 --- a/ui/vcui-view-multi-call-conf.c +++ /dev/null @@ -1,241 +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. - */ - - -#include "vcui-application.h" -#include "vcui-view-common.h" -#include "vcui-view-elements.h" -#include "vcui-view-multi-call-conf.h" - -static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); -static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); -static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data); -static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data); -static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data); - -static voice_call_view_data_t s_view = { - .type = VIEW_INCALL_MULTICALL_CONF_VIEW, - .app_data = NULL, - .layout = NULL, - .onCreate = __vcui_view_multi_call_conf_oncreate, - .onUpdate = __vcui_view_multi_call_conf_onupdate, - .onHide = __vcui_view_multi_call_conf_onhide, - .onShow = __vcui_view_multi_call_conf_onshow, - .onDestroy = __vcui_view_multi_call_conf_ondestroy, - .priv = NULL, -}; - -voice_call_view_data_t *_vcui_view_multi_call_conf_new(vcui_app_call_data_t *ad) -{ - s_view.app_data = ad; - s_view.priv = calloc(1, sizeof(vcui_view_multi_call_conf_priv_t)); - - if (!s_view.priv) { - CALL_UI_DEBUG("ERROR!!!!!!!!!!! "); - } - - return &s_view; -} - -static void __vcui_view_multi_call_conf_draw_screen(Evas_Object *eo, void *data) -{ - CALL_UI_DEBUG(".."); - - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv; - vcui_app_call_data_t *ad = vd->app_data; - char buf[DEF_BUF_LEN] = { 0, }; - call_data_t *call_data = NULL; - - priv->call_status = _vcui_doc_get_show_callstatus(); - call_data = _vcui_doc_get_last_status(priv->call_status); - if (call_data == NULL) { - CALL_UI_DEBUG("call data is null"); - return; - } - priv->total_members = _vcui_doc_get_count_hold()+_vcui_doc_get_count_unhold(); - - /* call image */ - _vcui_show_wallpaper_image(priv->contents); - priv->ic = _vcui_show_default_image(priv->contents, vd->app_data->win_main, CONF_ICON); - if (priv->call_status == CALL_HOLD) { - double scale_factor = 0.0; - scale_factor = elm_config_scale_get(); - CALL_UI_DEBUG("scale_factor %f", scale_factor); - - if (scale_factor == 1.0) { - edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_HD", "CID_HD"); - } else { - edje_object_signal_emit(_EDJ(priv->contents), "SHOW_DIM_WVGA", "CID_WVGA"); - } - } else { - edje_object_signal_emit(_EDJ(priv->contents), "HIDE_DIM", "CID"); - } - evas_object_smart_callback_add(priv->ic, "clicked", _vcui_conf_img_cb, vd); - - edje_object_part_text_set(_EDJ(eo), "txt_call_name", _("IDS_CALL_OPT_CONFERENCE_CALL")); - snprintf(buf, DEF_BUF_LEN, "%d %s", priv->total_members, _("IDS_CALL_BODY_PEOPLE")); - edje_object_part_text_set(_EDJ(eo), "txt_contact_phone_type", buf); /* in case of multicallconf, it is num of people */ - - _vcui_view_common_set_each_time(call_data->start_time); - - _vcui_create_top_left_button(vd); - _vcui_create_top_right_button(vd); - _vcui_create_bottom_left_button(vd); - _vcui_create_bottom_middle_button(vd); - if ((_vcui_is_phonelock_status() == EINA_TRUE)&&(_vcui_is_idle_lock() == EINA_TRUE)) { - _vcui_create_top_middle_button_disabled(vd); - _vcui_create_bottom_right_button_disabled(vd); - } else { - _vcui_create_top_middle_button(vd); - _vcui_create_bottom_right_button(vd); - } - _vcui_create_button_bigend(vd); - - ad->beffect_needed = EINA_FALSE; - - evas_object_show(eo); -} - -static Evas_Object *__vcui_view_multi_call_conf_create_contents(void *data, char *group) -{ - if (data == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - - Evas_Object *eo; - - /* load edje */ - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group); - if (eo == NULL) - return NULL; - - return eo; -} - -static Evas_Object *__vcui_view_multi_call_conf_create_layout_main(Evas_Object *parent) -{ - if (parent == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - - Evas_Object *ly; - ly = elm_layout_add(parent); - retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); - - elm_layout_theme_set(ly, "standard", "window", "integration"); - evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(parent, ly); - - edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); - edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); - evas_object_show(ly); - - return ly; -} - -static int __vcui_view_multi_call_conf_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) -{ - voice_call_view_data_t *vd = view_data; - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv; - - if (!vd->layout) { - - /* Create Main Layout */ - vd->layout = __vcui_view_multi_call_conf_create_layout_main(vd->app_data->win_main); - if (vd->layout == NULL) { - CALL_UI_DEBUG("ERROR"); - return VC_ERROR; - } - /* Create Contents */ - priv->contents = __vcui_view_multi_call_conf_create_contents(vd, GRP_MULTICALL_CONF); - elm_object_part_content_set(vd->layout, "elm.swallow.content", priv->contents); - - evas_object_name_set(priv->contents, "MULTIVIEWCONF"); - CALL_UI_DEBUG("[========== MULTIVIEWCONF: priv->contents Addr : [%p] ==========]", priv->contents); - } else { - CALL_UI_DEBUG("[UI]ad->layout_multicallconf==NULL case "); - evas_object_show(vd->layout); - } - - __vcui_view_multi_call_conf_onshow(view_data); - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_conf_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) -{ - CALL_UI_DEBUG("multicall-conf view update"); - - __vcui_view_multi_call_conf_onshow(view_data); - - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_conf_onhide(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("multicall-conf view hide"); - - evas_object_hide(view_data->layout); - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_conf_onshow(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("multicall-conf view show"); - - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)view_data->priv; - - __vcui_view_multi_call_conf_draw_screen(priv->contents, view_data); - - evas_object_hide(view_data->layout); - evas_object_show(view_data->layout); - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_conf_ondestroy(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("multicall-conf view destroy"); - vcui_app_call_data_t *ad = _vcui_get_app_data(); - - voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW]; - vcui_view_multi_call_conf_priv_t *priv = (vcui_view_multi_call_conf_priv_t *)vd->priv; - - if (priv != NULL) { - if (priv->contents) { - evas_object_del(priv->contents); - priv->contents = NULL; - } - - free(priv); - priv = NULL; - } - - if (vd->layout != NULL) { - evas_object_hide(vd->layout); - evas_object_del(vd->layout); - vd->layout = NULL; - } - - ad->view_st[VIEW_INCALL_MULTICALL_CONF_VIEW] = NULL; - - _vcui_cache_flush(); - CALL_UI_DEBUG("complete destroy multi view conf"); - - return VC_NO_ERROR; -} diff --git a/ui/vcui-view-multi-call-conf.h b/ui/vcui-view-multi-call-conf.h deleted file mode 100755 index 65e05f1..0000000 --- a/ui/vcui-view-multi-call-conf.h +++ /dev/null @@ -1,32 +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 _VCUI_VIEW_MULTI_CALL_CONF_ -#define _VCUI_VIEW_MULTI_CALL_CONF_ - -typedef struct { - Evas_Object *contents; - Evas_Object *ic; - Evas_Object *record_btn; - vcui_app_call_status_t call_status; - int total_members; -} vcui_view_multi_call_conf_priv_t; - -voice_call_view_data_t *_vcui_view_multi_call_conf_new(vcui_app_call_data_t *ad); - -#endif /*_VCUI_VIEW_MULTI_CALL_CONF_*/ - diff --git a/ui/vcui-view-multi-call-split.c b/ui/vcui-view-multi-call-split.c deleted file mode 100755 index 653fa7d..0000000 --- a/ui/vcui-view-multi-call-split.c +++ /dev/null @@ -1,402 +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. - */ - - -#include "vcui-application.h" -#include "vcui-view-elements.h" -#include "vcui-view-multi-call-split.h" - -static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3); -static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2); -static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data); -static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data); -static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data); - -static voice_call_view_data_t s_view = { - .type = VIEW_INCALL_MULTICALL_SPLIT_VIEW, - .app_data = NULL, - .layout = NULL, - .onCreate = __vcui_view_multi_call_split_oncreate, - .onUpdate = __vcui_view_multi_call_split_onupdate, - .onHide = __vcui_view_multi_call_split_onhide, - .onShow = __vcui_view_multi_call_split_onshow, - .onDestroy = __vcui_view_multi_call_split_ondestroy, - .priv = NULL, -}; - -voice_call_view_data_t *_vcui_view_multi_call_split_new(vcui_app_call_data_t *ad) -{ - s_view.app_data = ad; - s_view.priv = calloc(1, sizeof(incall_multi_view_split_priv_t)); - - if (!s_view.priv) { - CALL_UI_DEBUG("ERROR!!!!!!!!!!!"); - } - - return &s_view; -} - -static void __vcui_more_btn_cb(void *data, Evas_Object *obj, void *event_info) -{ - CALL_UI_DEBUG(".."); - _vcui_view_change(VIEW_INCALL_MULTICALL_LIST_VIEW, 0, 0, 0); -} - -static void __vcui_view_multi_call_split_draw_screen(Evas_Object *eo, void *data) -{ - CALL_UI_DEBUG(".."); - - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv; - - vcui_app_call_data_t *ad = vd->app_data; - - Evas_Object *sw1; - Evas_Object *sw2; - Evas_Object *sw3; - Evas_Object *sw4; - Evas_Object *play_ic; - Evas_Object *pause_ic; - Evas_Object *more_ic; - - priv->now_data_hold = _vcui_doc_get_last_status(CALL_HOLD); - priv->now_data_unhold = _vcui_doc_get_last_status(CALL_UNHOLD); - - if ((priv->now_data_hold == NULL) || (priv->now_data_unhold == NULL)) { - CALL_UI_DEBUG("call data is null"); - return; - } - - sw1 = edje_object_part_swallow_get(_EDJ(eo), "swl_cid_1"); - if (sw1) { - edje_object_part_unswallow(_EDJ(eo), sw1); - evas_object_del(sw1); - } - sw2 = edje_object_part_swallow_get(_EDJ(eo), "swl_cid_2"); - if (sw2) { - edje_object_part_unswallow(_EDJ(eo), sw2); - evas_object_del(sw2); - } - sw3 = edje_object_part_swallow_get(_EDJ(eo), "txt_call_name_1"); - if (sw3) { - edje_object_part_unswallow(_EDJ(eo), sw3); - evas_object_del(sw3); - } - sw4 = edje_object_part_swallow_get(_EDJ(eo), "txt_call_name_2"); - if (sw4) { - edje_object_part_unswallow(_EDJ(eo), sw4); - evas_object_del(sw4); - } - play_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_play"); - if (play_ic) { - edje_object_part_unswallow(_EDJ(eo), play_ic); - evas_object_del(play_ic); - } - pause_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_pause"); - if (pause_ic) { - edje_object_part_unswallow(_EDJ(eo), pause_ic); - evas_object_del(pause_ic); - } - more_ic = edje_object_part_swallow_get(_EDJ(eo), "swl_more"); - if (more_ic) { - edje_object_part_unswallow(_EDJ(eo), more_ic); - evas_object_del(more_ic); - } - - priv->ic_incall = elm_icon_add(vd->app_data->win_main); - elm_object_part_content_set(eo, "swl_cid_1", priv->ic_incall); - - priv->ic_onhold = elm_icon_add(vd->app_data->win_main); - elm_object_part_content_set(eo, "swl_cid_2", priv->ic_onhold); - - play_ic = elm_icon_add(vd->app_data->win_main); - elm_object_part_content_set(eo, "swl_play", play_ic); - pause_ic = elm_icon_add(vd->app_data->win_main); - elm_object_part_content_set(eo, "swl_pause", pause_ic); - more_ic = elm_icon_add(vd->app_data->win_main); - elm_object_part_content_set(eo, "swl_more", more_ic); - - CALL_UI_DEBUG("priv->now_data_unhold->call_num:[%s]", priv->now_data_unhold->call_num); - CALL_UI_DEBUG("priv->now_data_hold->call_num:[%s]", priv->now_data_hold->call_num); - CALL_UI_DEBUG("priv->now_data_unhold->call_file_path:[%s]", priv->now_data_unhold->call_file_path); - CALL_UI_DEBUG("priv->now_data_hold->call_file_path:[%s]", priv->now_data_hold->call_file_path); - - _vcui_show_wallpaper_image(priv->contents); - if (_vcui_doc_get_count_unhold() == 1 && _vcui_doc_get_count_hold() == 1) { - /* in call */ - elm_icon_file_set(priv->ic_incall, (char *)priv->now_data_unhold->call_file_path, NULL); - - if (strlen((char *)priv->now_data_unhold->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_num); - } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_display); - } - - /* on hold */ - elm_icon_file_set(priv->ic_onhold, (char *)priv->now_data_hold->call_file_path, NULL); - - if (strlen((char *)priv->now_data_hold->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_num); - } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_display); - } - - /* on hold callback */ - if (priv->ic_onhold) { - evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb); - } - evas_object_smart_callback_add(priv->ic_onhold, "clicked", _vcui_swap_btn_cb, vd); - } else if (_vcui_doc_get_count_unhold() == 1 && _vcui_doc_get_count_hold() > 1) { - /* in call */ - elm_icon_file_set(priv->ic_incall, (char *)priv->now_data_unhold->call_file_path, NULL); - - if (strlen((char *)priv->now_data_unhold->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_num); - } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", (char *)priv->now_data_unhold->call_display); - } - - /* on hold */ - elm_icon_file_set(priv->ic_onhold, CONF_ICON, NULL); - edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", _("IDS_CALL_OPT_CONFERENCE_CALL")); - - /* on hold callback */ - if (priv->ic_onhold) { - evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb); - } - evas_object_smart_callback_add(priv->ic_onhold, "clicked", _vcui_swap_btn_cb, vd); - } else if (_vcui_doc_get_count_unhold() > 1 && _vcui_doc_get_count_hold() == 1) { - /* in call */ - elm_icon_file_set(priv->ic_incall, CONF_ICON, NULL); - edje_object_part_text_set(_EDJ(eo), "txt_call_name_1", _("IDS_CALL_OPT_CONFERENCE_CALL")); - - /* on hold */ - elm_icon_file_set(priv->ic_onhold, (char *)priv->now_data_hold->call_file_path, NULL); - - if (strlen((char *)priv->now_data_hold->call_display) == 0) { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_num); - } else { - edje_object_part_text_set(_EDJ(eo), "txt_call_name_2", (char *)priv->now_data_hold->call_display); - } - - /* on hold callback */ - if (priv->ic_onhold) { - evas_object_smart_callback_del(priv->ic_onhold, "clicked", _vcui_swap_btn_cb); - } - evas_object_smart_callback_add(priv->ic_onhold, "clicked", _vcui_swap_btn_cb, vd); - - /* enter conf list view */ - if (priv->ic_incall) { - evas_object_smart_callback_del(priv->ic_incall, "clicked", _vcui_conf_img_cb); - } - evas_object_smart_callback_add(priv->ic_incall, "clicked", _vcui_conf_img_cb, vd); - } else { - CALL_UI_DEBUG("[=========== ERROR : Invalid Status!!! ============]"); - return; - } - - elm_icon_file_set(play_ic, PLAY_ICON, NULL); - elm_icon_file_set(pause_ic, PAUSE_ICON, NULL); - - elm_icon_file_set(more_ic, MORE_ICON, NULL); - evas_object_smart_callback_add(more_ic, "clicked", __vcui_more_btn_cb, vd); - - _vcui_view_common_set_each_time(priv->now_data_unhold->start_time); - - edje_object_part_text_set(_EDJ(eo), "txt_onhold", _("IDS_CALL_BODY_ON_HOLD_ABB")); - - if ((_vcui_doc_get_count_unhold() == 5 && _vcui_doc_get_count_hold() == 1) || (_vcui_doc_get_count_unhold() == 1 && _vcui_doc_get_count_hold() == 5)) { - _vcui_create_top_right_button_disabled(vd); - } else { - _vcui_create_top_right_button(vd); - } - - _vcui_create_top_left_button(vd); - _vcui_create_bottom_left_button(vd); - _vcui_create_bottom_middle_button(vd); - if ((_vcui_is_phonelock_status() == EINA_TRUE)&&(_vcui_is_idle_lock() == EINA_TRUE)) { - _vcui_create_top_middle_button_disabled(vd); - _vcui_create_bottom_right_button_disabled(vd); - } else { - _vcui_create_top_middle_button(vd); - _vcui_create_bottom_right_button(vd); - } - _vcui_create_button_bigend(vd); - - ad->beffect_needed = EINA_FALSE; - - evas_object_show(eo); -} - -static Evas_Object *__vcui_view_multi_call_split_create_contents(void *data, char *group) -{ - if (data == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - voice_call_view_data_t *vd = (voice_call_view_data_t *)data; - - Evas_Object *eo = NULL; - - /* load edje */ - eo = _vcui_load_edj(vd->app_data->win_main, EDJ_NAME, group); - if (eo == NULL) - return NULL; - - return eo; -} - -static Evas_Object *__vcui_view_multi_call_split_create_layout_main(Evas_Object *parent) -{ - if (parent == NULL) { - CALL_UI_DEBUG("ERROR"); - return NULL; - } - - Evas_Object *ly; - ly = elm_layout_add(parent); - retvm_if(ly == NULL, NULL, "Failed elm_layout_add."); - - elm_layout_theme_set(ly, "standard", "window", "integration"); - evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(parent, ly); - - edje_object_signal_emit(_EDJ(ly), "elm,state,show,indicator", "elm"); - edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm"); - evas_object_show(ly); - - return ly; -} - -static int __vcui_view_multi_call_split_oncreate(voice_call_view_data_t *view_data, int param1, void *param2, void *param3) -{ - CALL_UI_DEBUG("multi-split view create"); - - voice_call_view_data_t *vd = view_data; - vcui_app_call_data_t *ad = vd->app_data; - - if (!vd->layout) { - vd->layout = __vcui_view_multi_call_split_create_layout_main(vd->app_data->win_main); - if (vd->layout == NULL) { - CALL_UI_DEBUG("ERROR"); - return VC_ERROR; - } - } else { - CALL_UI_DEBUG("[UI]ad->layout_incall==NULL case "); - evas_object_show(vd->layout); - } - - __vcui_view_multi_call_split_onshow(view_data); - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_split_onupdate(voice_call_view_data_t *view_data, void *update_data1, void *update_data2) -{ - CALL_UI_DEBUG("multi-split view update"); - - __vcui_view_multi_call_split_onshow(view_data); - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_split_onhide(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("multi-split view hide"); - - evas_object_hide(view_data->layout); - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_split_onshow(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("multi-split view show"); - - incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)view_data->priv; - vcui_app_call_data_t *ad = view_data->app_data; - - if (priv->contents) { - evas_object_del(priv->contents); - priv->contents = NULL; - } - - CALL_UI_DEBUG("bswapped(%d)",ad->bswapped); - if (ad->bswapped == 1) { - priv->contents = __vcui_view_multi_call_split_create_contents(view_data, GRP_MULTICALL_SPLIT2); - } else { - priv->contents = __vcui_view_multi_call_split_create_contents(view_data, GRP_MULTICALL_SPLIT); - } - elm_object_part_content_set(view_data->layout, "elm.swallow.content", priv->contents); - evas_object_name_set(priv->contents, "MULTIVIEWSPLIT"); - CALL_UI_DEBUG("[========== MULTIVIEWSPLIT: priv->contents Addr : [%p] ==========]", priv->contents); - - __vcui_view_multi_call_split_draw_screen(priv->contents, view_data); - - evas_object_hide(view_data->layout); - - double scale_factor = 0.0; - if (ad->bswapped == 1) { - edje_object_signal_emit(_EDJ(priv->contents), "set-portrait", "incall-split2-view"); - if (_vcui_doc_get_count_unhold() > 1 && _vcui_doc_get_count_hold() == 1) { - CALL_UI_DEBUG("show-more-portrait mode signal emit"); - edje_object_signal_emit(_EDJ(priv->contents), "show-more-portrait", "incall-split2-conf-call"); - } - } - else { - edje_object_signal_emit(_EDJ(priv->contents), "set-portrait", "incall-split1-view"); - if (_vcui_doc_get_count_hold() > 1 && _vcui_doc_get_count_unhold() == 1) { - CALL_UI_DEBUG("show-more-portrait mode signal emit"); - edje_object_signal_emit(_EDJ(priv->contents), "show-more-portrait", "incall-split1-conf-call"); - } - } - - scale_factor = elm_config_scale_get(); - CALL_UI_DEBUG("scale_factor %f", scale_factor); - if (scale_factor == 1.0) { - edje_object_signal_emit(_EDJ(priv->contents), "show-swl-dim-hd", "cid-hd"); - } else { - edje_object_signal_emit(_EDJ(priv->contents), "show-swl-dim-wvga", "cid-wvga"); - } - evas_object_show(view_data->layout); - return VC_NO_ERROR; -} - -static int __vcui_view_multi_call_split_ondestroy(voice_call_view_data_t *view_data) -{ - CALL_UI_DEBUG("multi-split view destroy"); - - vcui_app_call_data_t *ad = _vcui_get_app_data(); - voice_call_view_data_t *vd = ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW]; - - incall_multi_view_split_priv_t *priv = (incall_multi_view_split_priv_t *)vd->priv; - if (priv != NULL) { - if (priv->contents) { - evas_object_del(priv->contents); - priv->contents = NULL; - } - free(priv); - priv = NULL; - } - - if (vd->layout != NULL) { - evas_object_hide(vd->layout); - evas_object_del(vd->layout); - vd->layout = NULL; - } - ad->view_st[VIEW_INCALL_MULTICALL_SPLIT_VIEW] = NULL; - - _vcui_cache_flush(); - - return VC_NO_ERROR; -} -- 2.7.4

e*>f5t((cbXU=84M?2rD_fF(alR9m7 zEczE^Nf}o4f@iB3RVNm?%TQ}B|GcYk%Vx0#y~>a<9rPRQau?~)Dq`F=2Xc`lR=qqc zz$YJ0&An`3y*W=wG+IM569D_h+|^tX5X1DNI29(x%=jB;(Q#149eLTL!~amf@Utu7 zGfwWYlS&*l_Iv+B_l>V+uTrKBtk?SO3o=!|O<<|!!_L4InNRGz!|VBPsX<(Yb}OZg zZe-@~5y*By2OUQ3t%0T;b{h+S7^Fh1>_v-zTqRiE<>XFxo3d!RR{k1jc>=0R;#Iyf z61op(nM&ZedCLai;W1k0%1b*%BOsqz{SXY*kY2kypq~VMNxoHcL;1})us_LQvzTEl zVCi;X@Q{yO5&<3_z?m=_H5S`(pyah&*ha2audp0l^(x1 z0cN&Uj#FMu6tq5c3x@RFH$FV;-C?Ma%l-H*wP9pTvqek0$tsQLTA`M!t$uoNT%s5VK6ZLyIj9nMzt0K(J`kGt8H&L1_HpKrD#KM zFACKp)QM7rs6^0(&SIg20MJ1ka7tgd*@Gkqc(kJiVyGR}Vhx%t1n*T7exn@|n?*J! z#+u*BJ{n>j%C~+JC~7Q|x)sR+rN8b_+#j?j66GXyeatFrC;H&Mk#^2&{UXo@r<9Z! zUZv&S%Yo>7+f?2H(rIx$VV|vRr&#?s7Eo>Yd-{;FMgcSrwjf$ZC=2&kocEpaEzT}M zW4_;+1eAV-msv-Yk)im!_)OwxlkPb%~E#Zklk+sXQ<&A`!?;oqGC3I(|XX15RKddaB)LAvDYpU%(4X#a%*4= z93cu>#(Mmu!DRsY+XfXy#I&@U^;MrZ2pI4(XenvVB$UY1F?T;XEf&A0qa)ptJ9N0L z%eVGpa6gEegJiU2uBSOSun9 zgj_Ts$_P*d&2aA5%U8o^&2cSOK8u($*BEi^D$x!Aw%3K2Gtr2TEHf-B`)dv@?8Mus z`S4lRmbL6b&I^5L{d0uxHdSw+V&r)=U}6#KyYDLoz~7)y^uV|7BYUr?VnMAtWi}pz z*Ya*ABqln&R`kCdwJ(^?xR_a^`-viu(-@ID^=~bu9Bz2n-Tg>?ORl7WpUIwcIT{;X z^v1uEpRJc#xWp+d<*>{wO%B&g<&qslIdqxJ*Sgq*Cw+us27D&BanAD2(b-dhZ}mF> z>w#}oSAPw>ty#pzB1Rji5^+Ir99t&3RUT3{{DK$v91Fr5A^`nzDgkUJU18CsuXYM@yy3+|6Vf_iTO0V6L?7ue~*lA&4aH-B)%?oth zOC(I1|G+S?RsBzL_V);HA>8vff{zRDbl^0gCcmGhQf;tYUM{;N{6^`+fi$Xpy_?`UuhOZQ{| ziIXD4bY1deNb`=<8fzBpXWwRa4(x}~#zflMiL;j@n50#?mDE#{GwkK*saLB0@n4E- YJ0>o7$LW0CuK{10YPzbGDwZMt0~1ehxBvhE diff --git a/ui/images/hd/icon/vc_btn_more.png b/ui/images/hd/icon/vc_notify_missed_call.png old mode 100644 new mode 100755 similarity index 61% rename from ui/images/hd/icon/vc_btn_more.png rename to ui/images/hd/icon/vc_notify_missed_call.png index 70246686ea08a71eb654e2b0726de36a34c170d8..909dacacdc58b51c817ffa9efb6f4e402b04c767 GIT binary patch delta 1647 zcmV-#29Wu`A@?C6iBL{Q4GJ0x0000DNk~Le0001K0001K2nGNE0ZxTItg#`U3V#M7 zNklsf@TZVbgd3 z&6fXYhG5so#>VCdRm6zJW|ExBNNlM7M++P{hRWe|DkDBj{RBW4jQ{`u0RR7DqFc^j zqDGErASOqk+fZe}HCo9ztP>LWH00000|Nmkl zw+^6dy+PNEPgTo){rdHv07lQT7^N*We1={R{Kr*&QNyzTI4r?i84RF4z2ZVL_y8%E5R*V0e*OC8z`($O4L9Nthv^|X826KlaivOp!GFj|2_C$e znic>600960Vj6aZ@Tf&Y)S_R%ehK{g^=m)0Xks7*lj@`O(DH0Qjs_S5j{Y0T7B%A0 zvjB@F@A38Va9YI1#&!UYC5dQa?@4Z}5&;r%)W!^y)V}ztd6Fz4)}jjx3=D#J8Z3g; z$VV3#7#Iv07#Kc4X>=e6m4BniqDD40HbX3yl57c~+O`3Q4;7*K1Fego2T)A4rZc{l zkprnMBV1+Oe+pYg4)iL$9}rsvF;a*h(91`oRr#nzxB&nF0RR8&nb8fxAP|P>%RSo- zbcAlCBRGL8)CqJG;s$Ks2(p2`97(Nm6z-r&b0oY$;L8#6|Nk}3CVw`Wfo#$#DU?Df z)Q^m@3!=t1w$3az46^OrbWe*)Jr=Ipq4>K@tmJLMp5Q91$%sU`P-DRvcl1@KgdcmY z^85h6SAdCCBRhR<@lhO!3s-^RKzYItrvR$LaG0omHh$`!y>- zbs{-Xy(vf&g~mt(`8=5f00)7Hu4JC|qfjV?QYf+U0RRC1|Loh%m4Yx32k>zZoTY=c z1GWQ8SUZ3Yumh~X65I~7gVhS811Q0BF1rV^Z^U~C#1V*@%GjP1HrgVNZ4c()1LO0x9a9r) zt$R>;&x2S^X}5iyXK$JgUlJc-4+^?hG%&P~z&pkj6!)wt4kd!I1${6W4kd=M0!2|& z8f130Q5Q)}sLg47wJ(dMFBaZkPYY$U!obAKGT_grP00}6u?O9KKDkPwi7gn)#A1SA9`1SBBMOAS^Ji*eP)erGjgbyMj~ zXk%7PQ&(=8)L6d06;s!A663kLh?WD%@|Hq3FUE#RQRSl&3iU5TSVD@lQ zXMfTl#%{kfKt2On44i0?bn`F;W1Qev9uDIpz{SCdnMtzS?G9=0SQP5NNBZw2LSKp$ddQG3JCxJ002ovPDHLkV1gtS-OT_1 delta 1591 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 delta 947 zcmV;k15Es)B)}XYiBL{Q4GJ0x0000DNk~Le0000o0000o2nGNE03JVxv9TeZ3V#D@ zNklHfef;S;5(T>`^Px=T+rN6(wGn>sS)gS{&sZ`3Vs`?VZ zX|4X$4WjFMba{DM({;U?${PU3HRQyJs;aM?LN^42q?XNQTQ6yFuPdQcRXRF4&j0me zl5a1BUTr?rQ+{)~T+{IIa9@?j?*JS*Frxu@1mN$>R*oc`_*icrQAMPOWa#|OVzKy1 z)3oOeo)laK0RUDuLw^yH%GudjDG&%esg&7Y3goNY1aPlX^Z#{W`1B0K?QMV~5Tyo# z!HYTJ#@>bGP1njV$*^GK^AZMwL4{;jJrn9>e(db*D4v4E<8iF7uj_}0hYh2ML?W;(3!Z`iKq8TFH{KOR zT*(p3vI<@%ZY&ln*7}aq5k&(Kg$E~-m7((xK>k|IT7Dn#L3|J�T*~ypaC}07Bs& V675Lj0{{R300>D%PDHLkV1o7NxSjw2 diff --git a/ui/images/hd/icon/vc_outgoingcall_No_caller_ID.png b/ui/images/hd/icon/vc_outgoingcall_No_caller_ID.png new file mode 100644 index 0000000000000000000000000000000000000000..103ff57c4150ef94345133c39f19a88a0cd57f4a GIT binary patch literal 69936 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 literal 0 HcmV?d00001 diff --git a/ui/images/hd/icon/vc_qp_caller_ID.png b/ui/images/hd/icon/vc_qp_caller_ID.png old mode 100644 new mode 100755 index fa4f11395f395b07d275823de76c3bfdc57dde23..93c0f9b830b10dcdb9f4979f26e02de7ddeaae98 GIT binary patch literal 5874 zcmV004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 IM6N<$f+&e6YybcN literal 2772 zcmV;_3M=)AP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XT000XT0n*)m z`~Uz7T1iAfRCr$PoB3B$*A~a~{@XXLK3{FCRz*=NDuV%J2uUD>gb)ZM5RyQ`9FVaT zML;H*Euc)I@7Mjl-xFfB+BU$wm%+H!SsuQ?9X|Q)efHhw^0)u(uZt=DFLeS0mL91y zFr{Io4ogL28rV4ocCfQ@=F?T!Qr_(p*<0(Pq2E+iPWh@`+6S(j~1;c8Rq(q`S>6OS8lB`V7H46=3gn zS7dW-N}hE2B;vP7EL0`YmMVa%khbPZ>4|z|pu16eVqS>^Dx}3%E-ekE5~wYb?pC*K zZ_J*W`wR!RvpFwKxbY@$k#qo3cWaFrT^PLp^rX|LM!dZa4)c7X_jT0aYd7FoWVkPQ zD$ooCHuJn+Y8?-xGh7XKHAozQIwEcbg>!-$NKx;??{y$-jb5-!@Ap^5i1G5pkknQ_ zfNN@`4~d;_>T2~!Ctxx3`T?u|hIjLgiAOlsN?E{exZPk54XWZE{O&!;H)|%^jZ~ygvI1e?Ie0f#C36iy?*sV>YX{# z7O+bnl6Vi2czdW?xr=jZbk|9A!f*CImad4?5OBJM?`Fxr-$PS48TZYpI7DZL&N+ zs>}T(8JXUrh}3!TT#Zm-&xZ9zQ_q7sV%JJ@lCctR2llx=k;g-4Lzs=i}p<4ggEb@pk*AtSyeq zDjrk($YU{tV<*D0i%B2zu-}G~11)Hs^r@%an%>Xv*=P{U{&slA_PN?R^=|vI}n!o=vLH! zMdct+0}+csIfe;b%wlUq&_wfI{Uz!mOEGhZ5Vb5BMd_gfCY!K z%-}FmpLyDI_JMUG)wHr$_gVNxBr1DtA zU#@nw>8c2FSO@@((s|C^tr<=4jhv9fw1dTCZEsAA3p+$%&=+H?CkczLGeUp6 zy`UE`9$5R~#V&Ufw!a9BivaT(N2mdA13*3Xq27Ql_e4&n18j%sF?N1^Azo)LLa{`J zC6j&-;P`wQ07%aD&|_GU^|+tpF?9pR6A)S#l5Ys@o?uSe` z9y)aJXkU}Auy{`ZHjk6&I~HdK@YYU__&r63`K%1?vMBd8dJ0dh6S&^@kUYL2z<9FC zlH1BjbORfV?8wq>egNZE|4H-#yqI_4fQ1-(07NhZ*MM#Y-(}^TVR>xbWtNS_v5N<6 z?d8wd4S%TKJoKX@+gM{xcUell*@^^=q7;5A?wG@cHI#Z&R%LntO)#qjh2VlqTi*UfUUg(jgv*U$493XCVL zD$7i`3%SdW99HklQ?6665TYsT?gE*c=rt79sQ_D?ej;AH7|a$n!;rw(-C$dpAXC+w zkqh4%?5;y#w6t+!V`)q(N;1TY*P-gFa#cR#B0yjSm$HuE*<8kEhk@75b0H*+gT-^L z&5wxv@l6HBhpvVnt7Xzvb$FCYUC)#G33OBqzJ9}jEl&5Nh`pu4k);LQ#d&SzLxd_J zrlx!F^CN8G7!7P6Cp2;l$Nl28+*RS%;9?Ggs{o3?=&+;cEOw2&cAm?$k2bE6gO5d? zifjdjfNCo4iwCVB&V2xQ6rF!4vA_Ak(CarGm;>8z9zgOs9x6}-#yRs@!fmPREQI$i zDzNQWli0*{h~?2$1@Y5ciG)FGD38B*zU%Z#ISQz^x%?u zg`mcM4+F5UQR1n*k5FWJ!5jv+9Ybe1VlXh~0By(K=CsT`?~&rX?*Qt*;=rm%APm83 z{ILW7;6a5YLW;mnq7%HW=(@~2>y|xyI9lJ!?~ezEX$Na%b`WivVkx|TNs4p76G!Q7 zsRfv%d$|2ZV0035l~y|8SK?e2^EK6Ld$l;K8@OWw+ufLy)wv-V>hVdr`KlCTUy{=N zAH-U8LmXvy68Q;^A{frAP)azX*knknT4KT2ud_kfsz$1k&t zq7K|#{^i&JO{$LhlflOiYr!=*=s(IqynqUPf&}EDix3Vj0HUj^FjRgzgE~JvC$5hX zP=;5sigPX_$6l7fuKEPPzu=JkK7dW*hd&?BhC}lB;kQzPPsdT5p8H`5x(CeUEGm5EF6EtBdLD|Z0FU4a*|rzkVqL`&hoo()oqnnIj2To7fGiP z7`El+E3z^>@Q2_&0k)0gn3MT;1*{risu6Z{6~S@WClPX47h6Yzvo!yTdWrcUA4Rk@3M61Rj2j9ZHD_8^ z9B87gl`%2pW&I1q=rsr#aMcY3EE$RfnATY#B%+R;5mSEFzZED8DtK1${04u3xr_6( z{u_rf^zuxPbH0^wloDJe*(PD}#wC>y)B2|z7=5PV+#k>dO~4|kN|X_tlV)1~oP&u~ zZ6XwJh+X9{xD9004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( zX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3$DNjUR8-d%htIutdZEoQ0#b(FyTAa_ zdy`&8VVD_UC<6{NG_fI~0ue<-nj%P0#DLLIBvwSR5EN9f2P6n6F&ITuEN@2Ei>|D^ z_ww@lRz|vC zuzLs)$;-`!o*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!&C1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2h zoGcOF60t^#FqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTX za!E_i;d2ub1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqK zG_|(0G&D0Z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY z_n(^h55xYX#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^b zXThc7C4-yrInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qj zZ=)yBuQ3=54Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK% z>{;v(b^`kbN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<) z0>40zCTJ7v2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01) zS~6}jY?%U?gEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j z*2tcg9i<^OEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfKTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761 zjmyXF)a;mc^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQq zHZJR2&bcD49Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^ zTY0bZ?)4%01p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK z8LKk71XR(_RKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS z<&CX#T35dwS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@ zqL5!WvekBL-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW z%ue3U;av{94wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#oSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%o zZ=0JGnu?n~9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8N zo_-(u{qS+0<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-U zsyQuty7Ua;Ou?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimk zUAw*F_TX^n@STz9kDQ z$NC=!KfXWC8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgU zAAWQEt$#LRcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6 z?<+s(e(3(_^YOu_)K8!O1p}D#{JO;G(*OVf32;bRa{vGi!~g&e!~vBn4jTXf5vxf= zK~#8N?Oj=OTt^k|xubm>?VGhPRwT!8~5W*7y($3DV+TVY2rFP^&N^Nhefu3V(XJ_Y$1uAkN zkz;mu_tZ8(*-UP!%8Ckg`So#i`PFf?v6)oKtu6VSU;KG}V>A7EN^NiNsJ*?t2ne`` zhZu{3b!ULt*@al!+gGhE4XU}JUNto))Np@~a8Nw%2r$#L3#zKJT$PuV;j2_YTmw+c zD{E?EYDRr?>#j=Txib7;EEbCdV4()dfJ4sd>uy*55Nll>ZK|xa1PiRd75j?7nZ`wT zoESjEC-_T$+ZQnSdEC*0hh^pN^ z8VSWQKt)Bl`t0-T>Z4Dus*3Wm&;u1pokW0=TPbz=#Bue#H(wWur-2~iu1J6gFU8&I z6T|AolOrM`$*Eqvw>Z+t{oA1f$#Br?=T52fXPy^sqFD2~kqE|L7*jud=c1~pD1%Xv z3axb*Dv&fl+iLvOs5&t+DBR>{BX_noH>w|h|1C8#*eCt@K@i2xAv7QnpcDXleq=zs zbaGT}`3#U*IEql}xeMn{t2Zy46}=ZWGd&a_2|(~+26~UFSI1xQorAI|oBD_xJlNBv z-hJa$wTBPF1XSQ48GyQBT3>!`TnvPu8vAZ(f*CpJXl+t&T|A40 z@y2>924n&?)Yq+!5BAE~!VnV-6r`Qq9o1ByQ14uNSt1ExSP%kC(RcRL7<{PmP>d-s zkanT4=}5kP>AZ3f5uhFjOCzzAV{GFujDnkjkFW;<63tv<^5$!25nC&Vbrrs#Cxfvg zgFULHsUh(3SqF(!y1lcl&Yd}-+MuMVhr-%+K};_pDnUyxNKtGZBr4;cV;$b}CV=FklVih(8wSTs)me?+O3#N!eTp`{l@vjP&ih+n6$^}ua` zs5Sa?%%dp5?r#tVL{T7dz-}xbK37*;gDvm6z|GmmArQI@4T)NnsH<@mC8sF&63oW} zNrS^}X{Bnat7PH%vxy+oHfv*^D`ZlxK{8xJ<j613XdYS~C*+k-CR1h)_q zV_Ym6sUMFnAqla)wfTVf_(Uc!W_OoKFw|eYUG0+WQeMhrm~vGM!=tjYLY0)n4+z>V zP)FuC7;qdUaS(t6#8z!hm4r>m9Re8sPXqUWQ^-TyM4LtS&i$D=46a1|;5!$^1ou)D zxSeRR&oOkhwy~l9{Fe{#Dottxj#){y)s-U7D-r7>Fl>exDM`3K{7zyeku%lo9x|6U z@jY|Ra*Z)BCz))W1_VK$e{N8X4)uYWnvgP8q2q1oa1IB{LC{<^U!<%uP*G2J2dJu3 zo{cIO3D@9@^C`s_=gTako@4E53~R#qk$5Rh40nl`OY0`tSmfHIt;3qCN;NXjBb=r4 zHuA?UbAlv(4PMZ5tW6#7@0J1bXE%m|p$Ov}wKX@Wq5dwNQWc^=Y9ZXkxlkI!@TU~t zk7JP;iQw`Q0Hc51yi@y#FLfTXmGDdSM zaENP){iAe9p*%`SLx4ty`o)mQCV&Hw$ZmpaeVrQW?S3eIx6n=xdp?FV-}Uv)NP|R~ zq)jC68-b@WM)7BKoayBNq&+xkwKbJ$c%avFfW#!l0BCwfxruA;L!zcx6LL^BEWYfm z5dn$Ofq1+`JqL4=&Zi%Z<~IYBJVzASrggoqO``4y5|F5kSapn{FgDUBBk+fr^}KY# zeRPcn6XNm}CA^$sk5;v@9vvdr4~Mg=-2X^`j$`SVUliNErEPQ)a%)qgfF-($(E~BH zeG+p93}IgYq&X>?D48gN4Fcl|wIT>W>EjIcc3InmBL}5$N+OC7$)Pny1}yD|k(gU> zn1J7%N(4%6MQX@Ro10Pfm12_Tu(xkd5-_U4 zN-nC$Mx*QfBrg_Lhw69Kw$J*{i?L?E!@(xr+D1~8xvfT{fe~}7AaQauP_~h4ZE>ze zuPI?kLYJF@58y)`zk1FZRn06)oAhwP^wxe)Zp7)g#&qj6PHQ7XCXOfs>x zW?UmC?>K%R9yVZbVyvIQB={&c*(G4?kndeAu3Np+Iq= zD3-m-KP;qwI^zu=N_-NByli{YVnC3UMee86l`pQ#`JON| z9t`{2-~Xj<-@7lw6NISaI?z>FUR@(Lpy&mLJM5a5hNIXo_wuiN{*{`d!)Q6|l1&r@ zWC_uQDVW_%iw?@T(IK=sN#K_;Y+&!+w((#Vhq(jv=Gm@YzZEz)QAggqGa>7-8sGr~ z<|xik)PaZr62y);w88i-T#Q91=hBi=H8D8@pClQWco9lL)cN|2J8~3d3z>Qv8|Jc$0i8G z^s7O_fM`YVG_*~3fTD#SwGp*EllsNiH?c^;oMYly*#BI+E;Sg~2oUeS;P`CnCNceC zFgyg3gv1dZy86`(_4$`KtPF^pGdZ)MZbAOD)PT13^bz`h;Ccd9)wkKmMfa!Y1Qh;T z#7vraxh^yC>1?;S(*la27=9;reS3FO zeLFEF|F+f0#UFigRrGV_cr;is5rbL;`8Oij#({obTv|TBL$Jy0QWgnRJvBG)YswV| zLw4q_W465K&pf66!ADmRm3RQ4e@mmJF2%n;yQb!`IN97{{5dLdiO!@&p&#R+7sNi| zEJct(4Ubp~{7lbkz~el`;9t-FXU zr1em~zL+9C3&-CN-9#donw>v%9EXA=h6Hp4b%vYTH-#)BWj^cbWXk@-exHlSad6kz zM>Qbgo%-mggKa`MSV&5kWXjuJTE3f-BUf5MPRB@m23R``jdaSR&xg#I&bFqG59T-bBtgVNQ??<;x= zi@~@MExJ$tFZN(wo8}~Ujl{JI$A4x{hir;%T<5QEd>N{N5+9@a(Yq* zO(?cNzlRIwbM831U{NPsD5Z)Spv+B!PEjV zI;d;s9@gAX9+mg#5~Sh}^O8=P9#sgvN&ym|_m|iQIlM4V(mYhiTyjCgHyuU1EfQ5G7x_I6rdd=M*9aP@#!XmitFSU{aHXfPbdOxq=%8^D7aRP~&8mY)z zEamX{C5y?HC~m<%zKe^tcvB|#wsI{PKR4yH zn{chS7bpH$&8Zn>Li3gQjGw#k_OBjd<8=KWe%9I6q6YiAJQ)n%#|rgz0DS>xlqg<| zDNX=M#jL0E1}>W)!;LVuFF)j1MsP(OPd;)xU-Y4DpQNwp#wXmRx`EF)xehN+mA~+>=WHavzIlsJLyx1RdixFg(Ue&Ml1%+Gr?N{AUe-@1I{>R`Qi}cb7r#M&x_VYM3OjUlwn{N}DI@LiK+NO}2Q9Cy2^F!<9v#ZCTr?sP5&U6v zgwb&ahl@K=la{Goex_s7p=AaCDG&(>gv2Ui`N_|Jy)TuzIsgvtV_-zUkK_BsV4yxK zfnU-DanTH&Lr0F0ZXf8OXp@v4i#xVFU(9VBvxVa}a#H9($W=_ko&#siVSg$1 zyZ7GTXW?;kuR@_O%=f(EL<2gDO*J(pL@#loep02E^DvZB}7q1-6mWkTMeGjK+u@v?Oy}t$mzuu=r8J$B+g$+p^S7` zs~E5f1}PgD4uXI*pq_XgY6gj}fgFvfL@SyYbXu?@hvax{W^Qpw67P%QE>|Gw1=rym zU2MXUJAo+9sBcX9ey?>~(JL0<3l8)b#z1k%V?MH<_88oi7o-PzM$1{PXTUMIKZ*AQ z`DLyLxVFA@ohc4kRfXBYna0LZqVQ0VGOaV}8HPX-aBx|n$`4cBmz4?WOO1|NLY@cH z+Ds0~Vc{S%g@-`OwK-Z8W<$o2Wl;BOAtjOryhnsvhnNP5SJM!~`V0$+n9tM(g#% z;2wGSX*JO-;w4~V?J2niP_E&*plsu%x;12GwN~n{gL$doD`|zJvJdfQy zCF|+?G-+J0*uAwvxxUZn3G9GeMG5CBTj&X#f25}L45SFa^$etEAVpvWA~3}N1BkzF U0pVh0%K!iX07*qoM6N<$f};W3Bme*a literal 3949 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 Hu0mjfIask9 diff --git a/ui/images/hd/icon/vc_qp_mute_on.png b/ui/images/hd/icon/vc_qp_mute_on.png new file mode 100755 index 0000000000000000000000000000000000000000..05622ffa185b1a027c74e374c46c475f44f4a899 GIT binary patch literal 3710 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 J>tGJg{|EC2k!An@ diff --git a/ui/images/hd/icon/vc_record_icon_dim.png b/ui/images/hd/icon/vc_record_icon_dim.png deleted file mode 100644 index d2d95234305a13b8e7eb56742115cc3e9c84740c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3530 zcmai07JghMGMI5dcYNDMUyA{`RaphK4oCEYC| za3wA%0uT572i~>zKKsM|boSb3trKr*tV2o0Mg{<&)YH{8zgE-#NJ4Zy6KM}CuZ7fG z*V+#Na{B)W0a-aL0FaqHhQUlt-BA80KR1*&mmUnp!($>D~_;rBg8loigaBmGZ{2RDU_3TC9vGe;DLa%FlA+-J2>Lc01`MsP6BX7**NiAu~*bTpqX|MbQA>VpDb@c zf@T2f!HLi!pso!;V>9?HKpr7*7;<)62c{yxf&azU1VCfYGD9H1HkF$Zl9vp)=w0G8 zftwPj7`gva3s{K*23Lb_1u!E5#Ptxax}drd;P5o$wSa^Ih?~Vl-vfjpz@eXqClEws z0tW3vgz_(;Dw=J<>!dPkm794Lw8CvkM0|)52vJS}ydJXYs2+;^_(F7b$H{5^a&x5ITOEK^|FE%3VX-+=2GeL^>T^1P>~39hx&>h&ORXAW`X{a-d(`EQzMXE!%CX7szEwvK~{&`V_JLmcA5 z^LLo?-_w(o&uhHlk`Kal2+vkJzaASF-WqvJ8s)UGm8A2xk^Jf}$Hbj(J*Q?XL56iR zI-f+%tXD^pg?HkiZ}0Wo9lv_Cwk&*3pt>vrs@+u~A;}^o51a}9HQ=YQ^2e>60&v)h z>i8x=LV$LQTpbCxI#9dN$-4{Cu6l2M0I=8O6@?Ghsr8WnpqUpgSgpZ++`%G@Bf8ab zbD@L$uY+t9l()MRN&_W(gudnLaIYc)DiAYV%^~O@_D!8b8fWGflj2P!+G*KDrQ%Kf z$B`trL!d33lu)Cegx-;RE)L@K(uyaMggG<%jJrdZkS>9jYaoun?2bXQjIMa{vmwuY1FdWIGXHZ!AK5c@{joIz=@yGA}EwqbioW__@#Q4yT&Uegr zg5v-R${5DTzBr@+Yc>lp3z9W}JCiySWoaeYAo!dyd5|nk zKaDSqT~G{OT2@rHR7P%jWH|&+Dz&!=t29pF&x}myT@K6ZP+Z~V&_qoj!CyF z*DW_I*V%2Ct=cQb7PV`&TAzngY4qvy+wtollkhjO+ZMAHi^XKcOhzh-Csm?l9);}r zt(pN}o)qtAK~MhBZf8{vkMh9(!i+6|i`>-~ndC($+v z)`eDl=hU+meAK1D#VnrvsC3AHXLDopL`h8w&%< zP8|=JRsU7>eYdWh2+Zz}-Z$piYiXk2(xjq}J zaEY$H?0J&VD8`vaJm69HrsAfx2w4NP=sVm-U|Nv47U_a;{W2UssE}TsD>S_KwQg|! zja<&byQ@9APP)~%4TUiV2oVmet@a9cg<55wpn0-&#+yPh_lYW$n_e~udQF;??;$W% zVeNduMjqkz9fJ`a^$?F;a!az!=+NDT>AeRgR$|u6^^SjHuzW-_OQ zd~0L_thwNea#Nd2@c@2UNe%u1ehmKum)##Y-pJ1?*)hX_YEQ2 z&iG|_YScjsjsNPn)>Xo`QkxRq?y$-Kuy%fv9?^uz`l$HO>xcgj<;#=_lfKrR)~u># zJCEl5;P(0u*V7<si#WaeL4&rmLyRTm_ZI_M>3bY0v4&GSgz1FaHI8sC71gf4{QL zr0wCc`kuxtY%z9H&GvF(=3wE4J1!vaXly~}lqfoK? zVNK2VV&`u$Y~;}hUoP|I`^%v!W+t()v&r3Q{8+|VKIRaU^2O_U;l&T!F6+nn-p*dm z&jW!{686XU&-Xe476Ld93YMu&HlB065V&&tU2|eFT6~_unv!xwNRV;#*I7zr{`%kK za@I9B0wDM<0O&{neqUYd4ggQZ0r=qnfMNy!%&4~yd$a+#aiXWG0S}z}IX8?l(qQTP zb$}|eskATSg|i>%SxbLN)+Zr17o)AIaq@8K7)*SfR<8!wh2o<%$6sr;$5?Uc3i6&X z5gHZJiR~@a$frq1$a)>5Hjkh}j|{i`wsV5;3I!}Y=>vVN;SjdGYxDrh(Q7!NiQKLs zp-v#JPVkB4KL=t%F$%8szI|YIaq1Evgm|e7iIck#DT|X(5FCVGe!rL|WxT~&diE`K zqw9}6n#_@EbjQ)95k4(4M&b|Z)o=g9+CFqCN*@^!}>CF?YX8IIOmhVILQ*qz!$SnSkUh3ZKWFCnaVhQ_%CACsE^=MNY z$hoNEbhUk!`HmQF)i={m!aiw9&6qO7mHzi;tyk&8oi3opTk$#e&x>M`7G>#RG(t`4ca+D{Po>zg2t14RQLpt1fFXa;* zlM6u!%>q%WD5HZ)wXIDSSj2WI<^7Bp$+y`{@Y~LSy?9e8YL3V44wC z@V1Cz`PvqsEF{XIeCO-#9HWNQ)yFaISl$m^0nc>H!mvKQ;bO{*ep(>NbhTZNAJ5q@CG4T}udpG>03UI`vlC=BD_*v&&WK~=I= zWd9LGs-s8h^7xsuH~sh9LUEDbQZh>mI8Zk+Lp_fpclvpV5lE*yQlXOhgr52Gc!|uA zCFTyJm08paQxP2{ZAdFRn!e(Uqse5<_A-bOLAx@;*zC^miOKE#*)tX0Ujk=Tfsi&q vrWN@CBJuT^-~U%6Y4wEvzh#$iZxeuX)31v>4;+)Pj|J#y8EaNS9U}e*uS$IE diff --git a/ui/themes/vc_control_btn_new_prev.png b/ui/images/hd/icon/vc_reject_back_icon.png similarity index 100% rename from ui/themes/vc_control_btn_new_prev.png rename to ui/images/hd/icon/vc_reject_back_icon.png diff --git a/ui/themes/vc_reject_with_msg_control_top_arrow.png b/ui/images/hd/icon/vc_reject_create_icon.png old mode 100755 new mode 100644 similarity index 87% rename from ui/themes/vc_reject_with_msg_control_top_arrow.png rename to ui/images/hd/icon/vc_reject_create_icon.png index 507803132f1ddcb6b2ffc9bd60c59fa8a00baf3a..aa8e122c42e2542e102df839c94a827f6179b44c GIT binary patch delta 357 zcmaDM{zF``Gr-TCmrII^fq{Y7)59eQNLzp~2OE%F(Pk~TQE@(3y|Sl^V@SoVH#ZLo zHW>)8Ug&@PW+q=wBVP-j&cUE9LOKWeuJCCz3KiYsjz__q6?g08$0-()x8^Y3QTrCnToJWu!jVmSt5!X|wfUc9Aftwh z%8s@btI`A?omo2VskD#szay7a8_q0ZapU6=ykB3y?7D>MLx(_k^gHd1@A$3iz9g^w z!~4MaySx21y;&9J4(?)g#SH5w>b)~gGrB8y49R+r2Y0N3v~wgQwr;KqKl!+G>*~(D v(2L(0V)6^V7Ik{IIWTdmOgO-MyqsavdynYkV5dF6kYn(4^>bP0l+XkK=qHQ- delta 341 zcmV-b0jmD^7w8uuiBL{Q4GJ0x0000DNk~Le0000F0000B2nGNE0H8bmY(N_k5} zn}2~<`o4cuO1V)Kou+AeOhjwHfqxAE4^>r3$8o?pN0KD7Fbt1~$RC4m>bgD6S2*?V8V6a=?_s^x2uSE220+?v6pOjLop67vcKKdMS94cQarQS>c n_l&Wfv5lX_7@J5buRjI=T%1-<66XoH00000NkvXXu0mjfgL#lI diff --git a/ui/images/hd/keypad/vc_keypad_btn_icon-1.png b/ui/images/hd/keypad/vc_keypad_btn_icon-1.png deleted file mode 100644 index b2396b63be6012c4f354f616b7ed57b0b441d81a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3875 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 EKOSB>&;S4c diff --git a/ui/images/hd/keypad/vc_keypad_btn_press-1.png b/ui/images/hd/keypad/vc_keypad_btn_press-1.png deleted file mode 100644 index 74ef761d5c82bbc2d55b4341d2b586fa6ea24f61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3270 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 diff --git a/ui/images/hd/keypad/vc_keypad_btn_icon.png b/ui/images/hd/vc_keypad_btn_icon.png similarity index 100% rename from ui/images/hd/keypad/vc_keypad_btn_icon.png rename to ui/images/hd/vc_keypad_btn_icon.png diff --git a/ui/images/hd/vc_keypad_btn_normal.png b/ui/images/hd/vc_keypad_btn_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..cd53ca825df2b9524035fb43e9bbe0b8810eb735 GIT binary patch literal 972 zcmaJ=zi-n(7`3QWl}bfOFhC@vle;0}yK~|;KGl@gPH99PRY{~~jALID)7oe33voMC zDq9C&VqrpJDMOK%k%|x#D+5SO`~gS|Oh^oz(B|;#e+yQB@8zv+*+BfHU;yDehJ0qKX>S6P#S~}?%DZR*gN34k zi%2i(w}6T;f>?!UF^>_^774;&_{kz#>}`{pwKj|;c81*LJR%VG`+cQfP*~i7Sl4xk zRH&+XfygI&A$QVzn9Pq9ESk8nA90_BAX9YOtj7&mI6X@th{m#EGAxrQ7)+fAVg+R> zjexfOe`pYl(Fw27bHD!-P8xd=g*BS6UhImC+n&!tMZ}D$!&%&5Y9Poz zbxpxw%MU%)PX>6~CY3PZPUzB#WynH7@qLe&*eW2sWR+A)!?=ufj0-EMple#GXljMR zh-)#o7toN8xZXLpJdvBVLJ*0_7LEOf)LV;L00t=&f3la=iF!k>H`$9hkqd-IFcHZ7Vk8#;2j^_E@y_0Wm*|Cvm4@tu)fF?G4*LX|-B2&WlUU4;R$$zkmJg zymFqOo*sZJQ_tQXAHJM^k}KW+c6@kQy7}hIwOp=tGAqp>>63Typn5NPn!T?|xoW*$ HZ9Vz}TRz1^@s6)~~dp00009a7bBm000XU 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